blob: 9a88e25f56f4c29c93744370460e8411dff23e2a [file] [log] [blame]
Guido van Rossum504b0bf1999-01-02 21:28:54 +00001from Tkinter import *
2
3class SearchDialogBase:
4
5 title = "Search Dialog"
6 icon = "Search"
7 needwrapbutton = 1
8
9 def __init__(self, root, engine):
10 self.root = root
11 self.engine = engine
12 self.top = None
13
14 def open(self, text):
15 self.text = text
16 if not self.top:
17 self.create_widgets()
18 else:
19 self.top.deiconify()
20 self.top.tkraise()
21 self.ent.focus_set()
22 self.ent.selection_range(0, "end")
23 self.ent.icursor(0)
24 self.top.grab_set()
25
26 def close(self, event=None):
27 if self.top:
28 self.top.grab_release()
29 self.top.withdraw()
30
31 def create_widgets(self):
32 top = Toplevel(self.root)
33 top.bind("<Return>", self.default_command)
34 top.bind("<Escape>", self.close)
35 top.protocol("WM_DELETE_WINDOW", self.close)
36 top.wm_title(self.title)
37 top.wm_iconname(self.icon)
38 self.top = top
39
40 self.row = 0
41 self.top.grid_columnconfigure(0, weight=0)
42 self.top.grid_columnconfigure(1, weight=100)
43
44 self.create_entries()
45 self.create_option_buttons()
46 self.create_other_buttons()
47 return self.create_command_buttons()
48
49 def make_entry(self, label, var):
50 l = Label(self.top, text=label)
Guido van Rossumeb58f5d2002-11-06 19:00:30 +000051 l.grid(row=self.row, column=0, sticky="w")
Guido van Rossum504b0bf1999-01-02 21:28:54 +000052 e = Entry(self.top, textvariable=var, exportselection=0)
Guido van Rossumeb58f5d2002-11-06 19:00:30 +000053 e.grid(row=self.row, column=1, sticky="we")
Guido van Rossum504b0bf1999-01-02 21:28:54 +000054 self.row = self.row + 1
55 return e
56
57 def make_frame(self):
58 f = Frame(self.top)
Guido van Rossumeb58f5d2002-11-06 19:00:30 +000059 f.grid(row=self.row, column=0, columnspan=2, sticky="we")
Guido van Rossum504b0bf1999-01-02 21:28:54 +000060 self.row = self.row + 1
61 return f
62
63 def make_button(self, label, command, isdef=0, side="left"):
64 b = Button(self.buttonframe,
65 text=label, command=command,
66 default=isdef and "active" or "normal")
67 b.pack(side=side)
68 return b
69
70 def create_entries(self):
71 self.ent = self.make_entry("Find:", self.engine.patvar)
72
73 def create_option_buttons(self):
74 f = self.make_frame()
75
76 btn = Checkbutton(f, anchor="w",
77 variable=self.engine.revar,
78 text="Regular expression")
79 btn.pack(side="left", fill="both")
80 if self.engine.isre():
81 btn.select()
82
83 btn = Checkbutton(f, anchor="w",
84 variable=self.engine.casevar,
85 text="Match case")
86 btn.pack(side="left", fill="both")
87 if self.engine.iscase():
88 btn.select()
89
90 btn = Checkbutton(f, anchor="w",
91 variable=self.engine.wordvar,
92 text="Whole word")
93 btn.pack(side="left", fill="both")
94 if self.engine.isword():
95 btn.select()
96
97 if self.needwrapbutton:
98 btn = Checkbutton(f, anchor="w",
99 variable=self.engine.wrapvar,
100 text="Wrap around")
101 btn.pack(side="left", fill="both")
102 if self.engine.iswrap():
103 btn.select()
104
105 def create_other_buttons(self):
106 f = self.make_frame()
107
108 lbl = Label(f, text="Direction: ")
109 lbl.pack(side="left")
110
111 btn = Radiobutton(f, anchor="w",
112 variable=self.engine.backvar, value=1,
113 text="Up")
114 btn.pack(side="left", fill="both")
115 if self.engine.isback():
116 btn.select()
117
118 btn = Radiobutton(f, anchor="w",
119 variable=self.engine.backvar, value=0,
120 text="Down")
121 btn.pack(side="left", fill="both")
122 if not self.engine.isback():
123 btn.select()
124
125 def create_command_buttons(self):
126 f = self.buttonframe = self.make_frame()
127 b = self.make_button("close", self.close, side="right")
128 b.lower()