diff options
Diffstat (limited to 'Tools/idle/SearchDialog.py')
-rw-r--r-- | Tools/idle/SearchDialog.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Tools/idle/SearchDialog.py b/Tools/idle/SearchDialog.py new file mode 100644 index 0000000..501b6d0 --- /dev/null +++ b/Tools/idle/SearchDialog.py @@ -0,0 +1,59 @@ +from Tkinter import * +import SearchEngine +from SearchDialogBase import SearchDialogBase + + +def _setup(text): + root = text._root() + engine = SearchEngine.get(root) + if not hasattr(engine, "_searchdialog"): + engine._searchdialog = SearchDialog(root, engine) + return engine._searchdialog + +def find(text): + return _setup(text).open(text) + +def find_again(text): + return _setup(text).find_again(text) + +def find_selection(text): + return _setup(text).find_selection(text) + +class SearchDialog(SearchDialogBase): + + def create_widgets(self): + f = SearchDialogBase.create_widgets(self) + self.make_button("Find", self.default_command, 1) + + def default_command(self, event=None): + if not self.engine.getprog(): + return + if self.find_again(self.text): + self.close() + + def find_again(self, text): + if not self.engine.getpat(): + self.open(text) + return 0 + if not self.engine.getprog(): + return 0 + res = self.engine.search_text(text) + if res: + line, m = res + i, j = m.span() + first = "%d.%d" % (line, i) + last = "%d.%d" % (line, j) + text.tag_remove("sel", "1.0", "end") + text.tag_add("sel", first, last) + text.mark_set("insert", self.engine.isback() and first or last) + text.see("insert") + return 1 + else: + text.bell() + return 0 + + def find_selection(self, text): + pat = text.get("sel.first", "sel.last") + if pat: + self.engine.setcookedpat(pat) + return self.find_again(text) |