annotate Lib/idlelib/ClassBrowser.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents eab361617f6a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 """Class browser.
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 XXX TO DO:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5 - reparse when source changed (maybe just a button would be OK?)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6 (or recheck on window popup)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7 - add popup menu with more options (e.g. doc strings, base classes, imports)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8 - show function argument list? (have to do pattern matching on source)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
9 - should the classes and methods lists also be in the module's menu bar?
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
10 - add base classes to class browser tree
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
11 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
12
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13 import os
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
14 import sys
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15 import pyclbr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16
60144
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 31625
diff changeset
17 from idlelib import PyShell
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 31625
diff changeset
18 from idlelib.WindowList import ListedToplevel
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 31625
diff changeset
19 from idlelib.TreeWidget import TreeNode, TreeItem, ScrolledCanvas
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 31625
diff changeset
20 from idlelib.configHandler import idleConf
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 class ClassBrowser:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 def __init__(self, flist, name, path):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 # XXX This API should change, if the file doesn't end in ".py"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 # XXX the code here is bogus!
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 self.name = name
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 self.file = os.path.join(path[0], self.name + ".py")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29 self.init(flist)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 def close(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 self.top.destroy()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33 self.node.destroy()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35 def init(self, flist):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
36 self.flist = flist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
37 # reset pyclbr
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38 pyclbr._modules.clear()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
39 # create top
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40 self.top = top = ListedToplevel(flist.root)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 top.protocol("WM_DELETE_WINDOW", self.close)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42 top.bind("<Escape>", self.close)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43 self.settitle()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 top.focus_set()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45 # create scrolled canvas
31625
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 27311
diff changeset
46 theme = idleConf.GetOption('main','Theme','name')
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 27311
diff changeset
47 background = idleConf.GetHighlight(theme, 'normal')['background']
1b02c77cdcfe Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
Kurt B. Kaiser <kbk@shore.net>
parents: 27311
diff changeset
48 sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 sc.frame.pack(expand=1, fill="both")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 item = self.rootnode()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 self.node = node = TreeNode(sc.canvas, None, item)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52 node.update()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 node.expand()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55 def settitle(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 self.top.wm_title("Class Browser - " + self.name)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 self.top.wm_iconname("Class Browser")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 def rootnode(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 return ModuleBrowserTreeItem(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 class ModuleBrowserTreeItem(TreeItem):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 def __init__(self, file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 self.file = file
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 def GetText(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 return os.path.basename(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 def GetIconName(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71 return "python"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73 def GetSubList(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 sublist = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 for name in self.listclasses():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 item = ClassBrowserTreeItem(name, self.classes, self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 sublist.append(item)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 return sublist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 def OnDoubleClick(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 if os.path.normcase(self.file[-3:]) != ".py":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 if not os.path.exists(self.file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 PyShell.flist.open(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 def IsExpandable(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 return os.path.normcase(self.file[-3:]) == ".py"
18531
ec9aa0dc8b73 py-cvs-rel2_1 (Rev 1.12) merge - whitespace normalization
Kurt B. Kaiser <kbk@shore.net>
parents: 13975
diff changeset
89
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 def listclasses(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
91 dir, file = os.path.split(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 name, ext = os.path.splitext(file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 if os.path.normcase(ext) != ".py":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
94 return []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
95 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
96 dict = pyclbr.readmodule_ex(name, [dir] + sys.path)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
97 except ImportError, msg:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
98 return []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
99 items = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100 self.classes = {}
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
101 for key, cl in dict.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
102 if cl.module == name:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
103 s = key
27292
d7f80028301d SF bug #668906: class browser raises AttributeError
Raymond Hettinger <python@rcn.com>
parents: 26510
diff changeset
104 if hasattr(cl, 'super') and cl.super:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
105 supers = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
106 for sup in cl.super:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
107 if type(sup) is type(''):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
108 sname = sup
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
109 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
110 sname = sup.name
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
111 if sup.module != cl.module:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
112 sname = "%s.%s" % (sup.module, sname)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
113 supers.append(sname)
25283
cd70c8803eb5 Merge Py Idle changes
Kurt B. Kaiser <kbk@shore.net>
parents: 18531
diff changeset
114 s = s + "(%s)" % ", ".join(supers)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
115 items.append((cl.lineno, s))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
116 self.classes[s] = cl
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
117 items.sort()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
118 list = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
119 for item, s in items:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120 list.append(s)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121 return list
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
122
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123 class ClassBrowserTreeItem(TreeItem):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
124
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
125 def __init__(self, name, classes, file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
126 self.name = name
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
127 self.classes = classes
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
128 self.file = file
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
129 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
130 self.cl = self.classes[self.name]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
131 except (IndexError, KeyError):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
132 self.cl = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
133 self.isfunction = isinstance(self.cl, pyclbr.Function)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
134
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
135 def GetText(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
136 if self.isfunction:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
137 return "def " + self.name + "(...)"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
138 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
139 return "class " + self.name
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
140
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
141 def GetIconName(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
142 if self.isfunction:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
143 return "python"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
144 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
145 return "folder"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
146
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
147 def IsExpandable(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
148 if self.cl:
27311
eaa612a41dd0 ...and the old pyclbr.py faked Function instances with Class instances
Kurt B. Kaiser <kbk@shore.net>
parents: 27292
diff changeset
149 try:
eaa612a41dd0 ...and the old pyclbr.py faked Function instances with Class instances
Kurt B. Kaiser <kbk@shore.net>
parents: 27292
diff changeset
150 return not not self.cl.methods
eaa612a41dd0 ...and the old pyclbr.py faked Function instances with Class instances
Kurt B. Kaiser <kbk@shore.net>
parents: 27292
diff changeset
151 except AttributeError:
eaa612a41dd0 ...and the old pyclbr.py faked Function instances with Class instances
Kurt B. Kaiser <kbk@shore.net>
parents: 27292
diff changeset
152 return False
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
153
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
154 def GetSubList(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
155 if not self.cl:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
156 return []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
157 sublist = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
158 for name in self.listmethods():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
159 item = MethodBrowserTreeItem(name, self.cl, self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
160 sublist.append(item)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
161 return sublist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
162
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
163 def OnDoubleClick(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
164 if not os.path.exists(self.file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
165 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
166 edit = PyShell.flist.open(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
167 if hasattr(self.cl, 'lineno'):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
168 lineno = self.cl.lineno
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
169 edit.gotoline(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
170
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
171 def listmethods(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
172 if not self.cl:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
173 return []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
174 items = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
175 for name, lineno in self.cl.methods.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
176 items.append((lineno, name))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
177 items.sort()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
178 list = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
179 for item, name in items:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
180 list.append(name)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
181 return list
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
182
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
183 class MethodBrowserTreeItem(TreeItem):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
184
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
185 def __init__(self, name, cl, file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
186 self.name = name
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
187 self.cl = cl
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
188 self.file = file
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
189
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
190 def GetText(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
191 return "def " + self.name + "(...)"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
192
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
193 def GetIconName(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
194 return "python" # XXX
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
195
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
196 def IsExpandable(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
197 return 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
198
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
199 def OnDoubleClick(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
200 if not os.path.exists(self.file):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
201 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
202 edit = PyShell.flist.open(self.file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
203 edit.gotoline(self.cl.methods[self.name])
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
204
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
205 def main():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
206 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
207 file = __file__
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
208 except NameError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
209 file = sys.argv[0]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
210 if sys.argv[1:]:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
211 file = sys.argv[1]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
212 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
213 file = sys.argv[0]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
214 dir, file = os.path.split(file)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
215 name = os.path.splitext(file)[0]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
216 ClassBrowser(PyShell.flist, name, [dir])
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
217 if sys.stdin is sys.__stdin__:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
218 mainloop()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
219
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
220 if __name__ == "__main__":
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
221 main()