mirror of
https://github.com/python/cpython.git
synced 2025-07-27 21:24:32 +00:00

(with one small bugfix in bgen/bgen/scantools.py) This replaces string module functions with string methods for the stuff in the Tools directory. Several uses of string.letters etc. are still remaining.
128 lines
3.8 KiB
Python
128 lines
3.8 KiB
Python
from Tkinter import *
|
|
|
|
class SearchDialogBase:
|
|
|
|
title = "Search Dialog"
|
|
icon = "Search"
|
|
needwrapbutton = 1
|
|
|
|
def __init__(self, root, engine):
|
|
self.root = root
|
|
self.engine = engine
|
|
self.top = None
|
|
|
|
def open(self, text):
|
|
self.text = text
|
|
if not self.top:
|
|
self.create_widgets()
|
|
else:
|
|
self.top.deiconify()
|
|
self.top.tkraise()
|
|
self.ent.focus_set()
|
|
self.ent.selection_range(0, "end")
|
|
self.ent.icursor(0)
|
|
self.top.grab_set()
|
|
|
|
def close(self, event=None):
|
|
if self.top:
|
|
self.top.grab_release()
|
|
self.top.withdraw()
|
|
|
|
def create_widgets(self):
|
|
top = Toplevel(self.root)
|
|
top.bind("<Return>", self.default_command)
|
|
top.bind("<Escape>", self.close)
|
|
top.protocol("WM_DELETE_WINDOW", self.close)
|
|
top.wm_title(self.title)
|
|
top.wm_iconname(self.icon)
|
|
self.top = top
|
|
|
|
self.row = 0
|
|
self.top.grid_columnconfigure(0, weight=0)
|
|
self.top.grid_columnconfigure(1, weight=100)
|
|
|
|
self.create_entries()
|
|
self.create_option_buttons()
|
|
self.create_other_buttons()
|
|
return self.create_command_buttons()
|
|
|
|
def make_entry(self, label, var):
|
|
l = Label(self.top, text=label)
|
|
l.grid(row=self.row, col=0, sticky="w")
|
|
e = Entry(self.top, textvariable=var, exportselection=0)
|
|
e.grid(row=self.row, col=1, sticky="we")
|
|
self.row = self.row + 1
|
|
return e
|
|
|
|
def make_frame(self):
|
|
f = Frame(self.top)
|
|
f.grid(row=self.row, col=0, columnspan=2, sticky="we")
|
|
self.row = self.row + 1
|
|
return f
|
|
|
|
def make_button(self, label, command, isdef=0, side="left"):
|
|
b = Button(self.buttonframe,
|
|
text=label, command=command,
|
|
default=isdef and "active" or "normal")
|
|
b.pack(side=side)
|
|
return b
|
|
|
|
def create_entries(self):
|
|
self.ent = self.make_entry("Find:", self.engine.patvar)
|
|
|
|
def create_option_buttons(self):
|
|
f = self.make_frame()
|
|
|
|
btn = Checkbutton(f, anchor="w",
|
|
variable=self.engine.revar,
|
|
text="Regular expression")
|
|
btn.pack(side="left", fill="both")
|
|
if self.engine.isre():
|
|
btn.select()
|
|
|
|
btn = Checkbutton(f, anchor="w",
|
|
variable=self.engine.casevar,
|
|
text="Match case")
|
|
btn.pack(side="left", fill="both")
|
|
if self.engine.iscase():
|
|
btn.select()
|
|
|
|
btn = Checkbutton(f, anchor="w",
|
|
variable=self.engine.wordvar,
|
|
text="Whole word")
|
|
btn.pack(side="left", fill="both")
|
|
if self.engine.isword():
|
|
btn.select()
|
|
|
|
if self.needwrapbutton:
|
|
btn = Checkbutton(f, anchor="w",
|
|
variable=self.engine.wrapvar,
|
|
text="Wrap around")
|
|
btn.pack(side="left", fill="both")
|
|
if self.engine.iswrap():
|
|
btn.select()
|
|
|
|
def create_other_buttons(self):
|
|
f = self.make_frame()
|
|
|
|
lbl = Label(f, text="Direction: ")
|
|
lbl.pack(side="left")
|
|
|
|
btn = Radiobutton(f, anchor="w",
|
|
variable=self.engine.backvar, value=1,
|
|
text="Up")
|
|
btn.pack(side="left", fill="both")
|
|
if self.engine.isback():
|
|
btn.select()
|
|
|
|
btn = Radiobutton(f, anchor="w",
|
|
variable=self.engine.backvar, value=0,
|
|
text="Down")
|
|
btn.pack(side="left", fill="both")
|
|
if not self.engine.isback():
|
|
btn.select()
|
|
|
|
def create_command_buttons(self):
|
|
f = self.buttonframe = self.make_frame()
|
|
b = self.make_button("close", self.close, side="right")
|
|
b.lower()
|