mirror of
https://github.com/python/cpython.git
synced 2026-05-28 15:16:53 -04:00
aaab30e00c
(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.
129 lines
3.8 KiB
Python
129 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()
|