python-2.5.2/win32/Lib/idlelib/SearchDialog.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 from Tkinter import *
       
     2 import SearchEngine
       
     3 from SearchDialogBase import SearchDialogBase
       
     4 
       
     5 
       
     6 def _setup(text):
       
     7     root = text._root()
       
     8     engine = SearchEngine.get(root)
       
     9     if not hasattr(engine, "_searchdialog"):
       
    10         engine._searchdialog = SearchDialog(root, engine)
       
    11     return engine._searchdialog
       
    12 
       
    13 def find(text):
       
    14     pat = text.get("sel.first", "sel.last")
       
    15     return _setup(text).open(text,pat)
       
    16 
       
    17 def find_again(text):
       
    18     return _setup(text).find_again(text)
       
    19 
       
    20 def find_selection(text):
       
    21     return _setup(text).find_selection(text)
       
    22 
       
    23 class SearchDialog(SearchDialogBase):
       
    24 
       
    25     def create_widgets(self):
       
    26         f = SearchDialogBase.create_widgets(self)
       
    27         self.make_button("Find", self.default_command, 1)
       
    28 
       
    29     def default_command(self, event=None):
       
    30         if not self.engine.getprog():
       
    31             return
       
    32         if self.find_again(self.text):
       
    33             self.close()
       
    34 
       
    35     def find_again(self, text):
       
    36         if not self.engine.getpat():
       
    37             self.open(text)
       
    38             return False
       
    39         if not self.engine.getprog():
       
    40             return False
       
    41         res = self.engine.search_text(text)
       
    42         if res:
       
    43             line, m = res
       
    44             i, j = m.span()
       
    45             first = "%d.%d" % (line, i)
       
    46             last = "%d.%d" % (line, j)
       
    47             try:
       
    48                 selfirst = text.index("sel.first")
       
    49                 sellast = text.index("sel.last")
       
    50                 if selfirst == first and sellast == last:
       
    51                     text.bell()
       
    52                     return False
       
    53             except TclError:
       
    54                 pass
       
    55             text.tag_remove("sel", "1.0", "end")
       
    56             text.tag_add("sel", first, last)
       
    57             text.mark_set("insert", self.engine.isback() and first or last)
       
    58             text.see("insert")
       
    59             return True
       
    60         else:
       
    61             text.bell()
       
    62             return False
       
    63 
       
    64     def find_selection(self, text):
       
    65         pat = text.get("sel.first", "sel.last")
       
    66         if pat:
       
    67             self.engine.setcookedpat(pat)
       
    68         return self.find_again(text)