~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/idlelib/SearchDialog.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from tkinter import *
 
2
 
 
3
from idlelib import SearchEngine
 
4
from idlelib.SearchDialogBase import SearchDialogBase
 
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)