annotate Mac/Tools/IDE/PyBrowser.py @ 25838:8540887bcec6 2.2

Backport of 2.183: Fix memory leak in add_subclass() found by NealN with valgrind.
author Guido van Rossum <guido@python.org>
date Fri, 18 Oct 2002 13:42:21 +0000
parents 64a1049fe53b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
1 import W
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
2 import Wkeys
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
3 import struct
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
4 import string
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
5 import types
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
6 import re
22579
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
7 from Carbon import Qd, Icn, Fm, QuickDraw
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
8 from Carbon.List import GetListPort
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
9 from Carbon.QuickDraw import hilitetransfermode
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
10
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
11
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
12 nullid = '\0\0'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
13 closedid = struct.pack('h', 468)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
14 openid = struct.pack('h', 469)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
15 closedsolidid = struct.pack('h', 470)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
16 opensolidid = struct.pack('h', 471)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
17
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
18 arrows = (nullid, closedid, openid, closedsolidid, opensolidid)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
19
18453
e78a51268c81 - fixed some re usage, partly so it'll still work when re uses pre instead
Just van Rossum <just@letterror.com>
parents: 18167
diff changeset
20 has_ctlcharsRE = re.compile(r'[\000-\037\177-\377]')
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
21 def ctlcharsREsearch(str):
16918
6d59817cf792 Silly typo which caused the stack browser to crash.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16725
diff changeset
22 if has_ctlcharsRE.search(str) is None:
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
23 return -1
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
24 return 1
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
25
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
26 def double_repr(key, value, truncvalue = 0,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
27 type = type, StringType = types.StringType,
16725
d170c1e772c5 Use re in stead of regex, so we get rid of the annoying warning during startup.
Jack Jansen <jack.jansen@cwi.nl>
parents: 15282
diff changeset
28 has_ctlchars = ctlcharsREsearch, _repr = repr, str = str):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
29 if type(key) == StringType and has_ctlchars(key) < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
30 key = str(key)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
31 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
32 key = _repr(key)
11422
7fb8b0f13da0 String values will now always be shown with quotes, so one can see the difference between the value 2 and the value '2'. -- jvr
Just van Rossum <just@lettererror.com>
parents: 10087
diff changeset
33 if key == '__builtins__':
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
34 value = "<" + type(value).__name__ + " '__builtin__'>"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
35 elif key == '__return__':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
36 # bleh, when returning from a class codeblock we get infinite recursion in repr.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
37 # Use safe repr instead.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
38 import repr
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
39 value = repr.repr(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
40 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
41 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
42 value = _repr(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
43 '' + value # test to see if it is a string, in case a __repr__ method is buggy
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
44 except:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
45 value = '\xa5\xa5\xa5 exception in repr()'
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
46 if truncvalue:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
47 return key + '\t' + value[:255]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
48 return key + '\t' + value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
49
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
50
22579
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
51 def truncString(s, maxwid):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
52 if maxwid < 1:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
53 return 1, ""
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
54 strlen = len(s)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
55 strwid = Qd.TextWidth(s, 0, strlen);
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
56 if strwid <= maxwid:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
57 return 0, s
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
58
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
59 Qd.TextFace(QuickDraw.condense)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
60 strwid = Qd.TextWidth(s, 0, strlen)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
61 ellipsis = Qd.StringWidth('\xc9')
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
62
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
63 if strwid <= maxwid:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
64 Qd.TextFace(0)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
65 return 1, s
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
66 if strwid < 1:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
67 Qd.TextFace(0)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
68 return 1, ""
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
69
22579
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
70 mid = int(strlen * maxwid / strwid)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
71 while 1:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
72 if mid <= 0:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
73 mid = 0
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
74 break
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
75 strwid = Qd.TextWidth(s, 0, mid) + ellipsis
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
76 strwid2 = Qd.TextWidth(s, 0, mid + 1) + ellipsis
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
77 if strwid <= maxwid and maxwid <= strwid2:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
78 if maxwid == strwid2:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
79 mid += 1
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
80 break
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
81 if strwid > maxwid:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
82 mid -= 1
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
83 if mid <= 0:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
84 mid = 0
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
85 break
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
86 elif strwid2 < maxwid:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
87 mid += 1
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
88 Qd.TextFace(0)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
89 return 1, s[:mid] + '\xc9'
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
90
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
91
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
92 def drawTextCell(text, cellRect, ascent, theList):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
93 l, t, r, b = cellRect
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
94 cellwidth = r - l
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
95 Qd.MoveTo(l + 2, t + ascent)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
96 condense, text = truncString(text, cellwidth - 3)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
97 if condense:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
98 Qd.TextFace(QuickDraw.condense)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
99 Qd.DrawText(text, 0, len(text))
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
100 Qd.TextFace(0)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
101
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
102
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
103 PICTWIDTH = 16
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
104
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
105
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
106 class BrowserWidget(W.CustomList):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
107
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
108 def __init__(self, possize, object = None, col = 100, closechildren = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
109 W.List.__init__(self, possize, callback = self.listhit)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
110 self.object = (None,)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
111 self.indent = 16
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
112 self.lastmaxindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
113 self.closechildren = closechildren
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
114 self.children = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
115 self.mincol = 64
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
116 self.setcolumn(col)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
117 self.bind('return', self.openselection)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
118 self.bind('enter', self.openselection)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
119 if object is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
120 self.set(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
121
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
122 def set(self, object):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
123 if self.object[0] is not object:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
124 self.object = object,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
125 self[:] = self.unpack(object, 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
126 elif self._parentwindow is not None and self._parentwindow.wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
127 self.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
128
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
129 def unpack(self, object, indent):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
130 return unpack_object(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
131
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
132 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
133 # for now...
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
134 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
135 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
136 sel = self.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
137 fold = self.getunfoldedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
138 topcell = self.gettopcell()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
139 self[:] = self.unpack(self.object[0], 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
140 self.unfoldobjects(fold)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
141 self.setselectedobjects(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
142 self.settopcell(topcell)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
143 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
144
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
145 def setcolumn(self, col):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
146 self.col = col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
147 self.colstr = struct.pack('h', col)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
148 if self._list:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
149 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
150 self.setitems(self.items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
151 self.setselection(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
152
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
153 def key(self, char, event):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
154 if char in (Wkeys.leftarrowkey, Wkeys.rightarrowkey):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
155 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
156 sel.reverse()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
157 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
158 for index in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
159 self.fold(index, char == Wkeys.rightarrowkey)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
160 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
161 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
162 W.List.key(self, char, event)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
163
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
164 def rollover(self, (x, y), onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
165 if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
166 if self.incolumn((x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
167 W.SetCursor('hmover')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
168 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
169 W.SetCursor('arrow')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
170
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
171 def inarrow(self, (x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
172 cl, ct, cr, cb = self._list.LRect((0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
173 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
174 if (x - cl) < 16:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
175 cellheight = cb - ct
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
176 index = (y - ct) / cellheight
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
177 if index < len(self.items):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
178 return 1, index
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
179 return None, None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
180
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
181 def incolumn(self, (x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
182 l, t, r, b = self._list.LRect((0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
183 abscol = l + self.col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
184 return abs(abscol - x) < 3
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
185
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
186 def trackcolumn(self, (x, y)):
19488
42b2f1936254 Import the MacOS toolbox modules from the Carbon package.
Jack Jansen <jack.jansen@cwi.nl>
parents: 18453
diff changeset
187 from Carbon import Qd, QuickDraw, Evt
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
188 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
189 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
190 bounds = l, t, r, b = l + 1, t + 1, r - 16, b - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
191 abscol = l + self.col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
192 mincol = l + self.mincol
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
193 maxcol = r - 10
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
194 diff = abscol - x
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
195 Qd.PenPat('\000\377\000\377\000\377\000\377')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
196 Qd.PenMode(QuickDraw.srcXor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
197 rect = abscol - 1, t, abscol, b
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
198 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
199 lastpoint = (x, y)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
200 newcol = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
201 #W.SetCursor('fist')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
202 while Evt.Button():
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20833
diff changeset
203 Evt.WaitNextEvent(0, 1, None) # needed for OSX
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
204 (x, y) = Evt.GetMouse()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
205 if (x, y) <> lastpoint:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
206 newcol = x + diff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
207 newcol = max(newcol, mincol)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
208 newcol = min(newcol, maxcol)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
209 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
210 rect = newcol - 1, t, newcol, b
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
211 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
212 lastpoint = (x, y)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
213 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
214 Qd.PenPat(Qd.qd.black)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
215 Qd.PenNormal()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
216 if newcol > 0 and newcol <> abscol:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
217 self.setcolumn(newcol - l)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
218
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
219 def click(self, point, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
220 if point == (-1, -1): # gross.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
221 W.List.click(self, point ,modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
222 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
223 hit, index = self.inarrow(point)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
224 if hit:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
225 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
226 self.fold(index, arrow == 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
227 elif self.incolumn(point):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
228 self.trackcolumn(point)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
229 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
230 W.List.click(self, point, modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
231
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
232 # for W.List.key
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
233 def findmatch(self, tag):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
234 lower = string.lower
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
235 items = self.items
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
236 taglen = len(tag)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
237 match = '\377' * 100
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
238 match_i = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
239 for i in range(len(items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
240 item = lower(str(items[i][0]))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
241 if tag <= item < match:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
242 match = item
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
243 match_i = i
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
244 if match_i >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
245 return match_i
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
246 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
247 return len(items) - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
248
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
249 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
250 if self.closechildren:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
251 for window in self.children:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
252 window.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
253 self.children = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
254 W.List.close(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
255
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
256 def fold(self, index, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
257 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
258 if arrow == 0 or (onoff and arrow == 2) or (not onoff and arrow == 1):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
259 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
260 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
261 topcell = self.gettopcell()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
262 if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
263 self[index] = (key, value, 4, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
264 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
265 self[index+1:index+1] = self.unpack(value, indent + 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
266 self[index] = (key, value, 2, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
267 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
268 self[index] = (key, value, 3, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
269 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
270 count = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
271 for i in range(index + 1, len(self.items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
272 (dummy, dummy, dummy, subindent) = self.items[i]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
273 if subindent <= indent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
274 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
275 count = count + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
276 self[index+1:index+1+count] = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
277 self[index] = (key, value, 1, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
278 maxindent = self.getmaxindent()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
279 if maxindent <> self.lastmaxindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
280 newabsindent = self.col + (maxindent - self.lastmaxindent) * self.indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
281 if newabsindent >= self.mincol:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
282 self.setcolumn(newabsindent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
283 self.lastmaxindent = maxindent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
284 self.settopcell(topcell)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
285 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
286
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
287 def unfoldobjects(self, objects):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
288 for obj in objects:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
289 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
290 index = self.items.index(obj)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
291 except ValueError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
292 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
293 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
294 self.fold(index, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
295
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
296 def getunfoldedobjects(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
297 curindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
298 objects = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
299 for index in range(len(self.items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
300 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
301 if indent > curindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
302 (k, v, a, i) = self.items[index - 1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
303 objects.append((k, v, 1, i))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
304 curindent = indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
305 elif indent < curindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
306 curindent = indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
307 return objects
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
308
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
309 def listhit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
310 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
311 self.openselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
312
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
313 def openselection(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
314 import os
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
315 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
316 for index in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
317 (key, value, arrow, indent) = self[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
318 if arrow:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
319 self.children.append(Browser(value))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
320 elif type(value) == types.StringType and '\0' not in value:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
321 editor = self._parentwindow.parent.getscript(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
322 if editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
323 editor.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
324 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
325 elif os.path.exists(value) and os.path.isfile(value):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
326 import macfs
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
327 fss = macfs.FSSpec(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
328 if fss.GetCreatorType()[1] == 'TEXT':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
329 W.getapplication().openscript(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
330
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
331 def itemrepr(self, (key, value, arrow, indent), str = str, double_repr = double_repr,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
332 arrows = arrows, pack = struct.pack):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
333 arrow = arrows[arrow]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
334 return arrow + pack('h', self.indent * indent) + self.colstr + \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
335 double_repr(key, value, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
336
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
337 def getmaxindent(self, max = max):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
338 maxindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
339 for item in self.items:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
340 maxindent = max(maxindent, item[3])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
341 return maxindent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
342
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
343 def domenu_copy(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
344 sel = self.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
345 selitems = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
346 for key, value, dummy, dummy in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
347 selitems.append(double_repr(key, value))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
348 text = string.join(selitems, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
349 if text:
20833
860472877dda fixed a non-Carbon Carbon import
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
350 from Carbon import Scrap
22579
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
351 if hasattr(Scrap, 'PutScrap'):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
352 Scrap.ZeroScrap()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
353 Scrap.PutScrap('TEXT', text)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
354 else:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
355 Scrap.ClearCurrentScrap()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
356 sc = Scrap.GetCurrentScrap()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
357 sc.PutScrapFlavor('TEXT', 0, text)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
358
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
359 def listDefDraw(self, selected, cellRect, theCell,
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
360 dataOffset, dataLen, theList):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
361 self.myDrawCell(0, selected, cellRect, theCell,
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
362 dataOffset, dataLen, theList)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
363
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
364 def listDefHighlight(self, selected, cellRect, theCell,
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
365 dataOffset, dataLen, theList):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
366 self.myDrawCell(1, selected, cellRect, theCell,
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
367 dataOffset, dataLen, theList)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
368
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
369 def myDrawCell(self, onlyHilite, selected, cellRect, theCell,
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
370 dataOffset, dataLen, theList):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
371 savedPort = Qd.GetPort()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
372 Qd.SetPort(GetListPort(theList))
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
373 savedClip = Qd.NewRgn()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
374 Qd.GetClip(savedClip)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
375 Qd.ClipRect(cellRect)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
376 savedPenState = Qd.GetPenState()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
377 Qd.PenNormal()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
378
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
379 l, t, r, b = cellRect
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
380
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
381 if not onlyHilite:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
382 Qd.EraseRect(cellRect)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
383
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
384 ascent, descent, leading, size, hm = Fm.FontMetrics()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
385 linefeed = ascent + descent + leading
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
386
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
387 if dataLen >= 6:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
388 data = theList.LGetCell(dataLen, theCell)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
389 iconId, indent, tab = struct.unpack("hhh", data[:6])
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
390 key, value = data[6:].split("\t", 1)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
391
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
392 if iconId:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
393 theIcon = Icn.GetCIcon(iconId)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
394 rect = (0, 0, 16, 16)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
395 rect = Qd.OffsetRect(rect, l, t)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
396 rect = Qd.OffsetRect(rect, 0, (theList.cellSize[1] - (rect[3] - rect[1])) / 2)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
397 Icn.PlotCIcon(rect, theIcon)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
398
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
399 if len(key) >= 0:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
400 cl, ct, cr, cb = cellRect
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
401 vl, vt, vr, vb = self._viewbounds
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
402 cl = vl + PICTWIDTH + indent
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
403 cr = vl + tab
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
404 if cr > vr:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
405 cr = vr
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
406 if cl < cr:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
407 drawTextCell(key, (cl, ct, cr, cb), ascent, theList)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
408 cl = vl + tab
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
409 cr = vr
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
410 if cl < cr:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
411 drawTextCell(value, (cl, ct, cr, cb), ascent, theList)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
412 #elif dataLen != 0:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
413 # drawTextCell("???", 3, cellRect, ascent, theList)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
414
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
415 # draw nice dotted line
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
416 l, t, r, b = cellRect
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
417 l = self._viewbounds[0] + tab
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
418 r = l + 1;
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
419 if not (theList.cellSize[1] & 0x01) or (t & 0x01):
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
420 myPat = "\xff\x00\xff\x00\xff\x00\xff\x00"
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
421 else:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
422 myPat = "\x00\xff\x00\xff\x00\xff\x00\xff"
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
423 Qd.PenPat(myPat)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
424 Qd.PenMode(QuickDraw.srcCopy)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
425 Qd.PaintRect((l, t, r, b))
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
426 Qd.PenNormal()
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
427
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
428 if selected or onlyHilite:
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
429 l, t, r, b = cellRect
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
430 l = self._viewbounds[0] + PICTWIDTH
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
431 r = self._viewbounds[2]
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
432 Qd.PenMode(hilitetransfermode)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
433 Qd.PaintRect((l, t, r, b))
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
434
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
435 # restore graphics environment
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
436 Qd.SetPort(savedPort)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
437 Qd.SetClip(savedClip)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
438 Qd.DisposeRgn(savedClip)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
439 Qd.SetPenState(savedPenState)
64a1049fe53b Backport of 1.15 and 1.14:
Jack Jansen <jack.jansen@cwi.nl>
parents: 22029
diff changeset
440
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
441
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
442
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
443 class Browser:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
444
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
445 def __init__(self, object = None, title = None, closechildren = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
446 if hasattr(object, '__name__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
447 name = object.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
448 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
449 name = ''
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
450 if title is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
451 title = 'Object browser'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
452 if name:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
453 title = title + ': ' + name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
454 self.w = w = W.Window((300, 400), title, minsize = (100, 100))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
455 w.info = W.TextBox((18, 8, -70, 15))
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20833
diff changeset
456 w.updatebutton = W.BevelButton((-64, 4, 50, 16), 'Update', self.update)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
457 w.browser = BrowserWidget((-1, 24, 1, -14), None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
458 w.bind('cmdu', w.updatebutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
459 w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
460 self.set(object, name)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
461
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
462 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
463 if self.w.wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
464 self.w.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
465
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
466 def set(self, object, name = ''):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
467 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
468 tp = type(object).__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
469 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
470 length = len(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
471 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
472 length = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
473 if not name and hasattr(object, '__name__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
474 name = object.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
475 if name:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
476 info = name + ': ' + tp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
477 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
478 info = tp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
479 if length >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
480 if length == 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
481 info = info + ' (%d element)' % length
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
482 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
483 info = info + ' (%d elements)' % length
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
484 self.w.info.set(info)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
485 self.w.browser.set(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
486
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
487 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
488 self.w.browser.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
489
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
490
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
491 SIMPLE_TYPES = (
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
492 types.NoneType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
493 types.IntType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
494 types.LongType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
495 types.FloatType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
496 types.ComplexType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
497 types.StringType
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
498 )
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
499
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
500 INDEXING_TYPES = (
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
501 types.TupleType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
502 types.ListType,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
503 types.DictionaryType
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
504 )
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
505
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
506 def unpack_object(object, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
507 tp = type(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
508 if tp in SIMPLE_TYPES and tp is not types.NoneType:
18167
c5ac6f055c62 Some long overdue maintainance. Made all IDE sources 7-bit-clean, to avoid any further encoding conversion troubles.
Just van Rossum <just@letterror.com>
parents: 17845
diff changeset
509 raise TypeError, "can't browse simple type: %s" % tp.__name__
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
510 elif tp == types.DictionaryType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
511 return unpack_dict(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
512 elif tp in (types.TupleType, types.ListType):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
513 return unpack_sequence(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
514 elif tp == types.InstanceType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
515 return unpack_instance(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
516 elif tp == types.ClassType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
517 return unpack_class(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
518 elif tp == types.ModuleType:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
519 return unpack_dict(object.__dict__, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
520 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
521 return unpack_other(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
522
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
523 def unpack_sequence(seq, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
524 items = map(None, range(len(seq)), seq)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
525 items = map(lambda (k, v), type = type, simp = SIMPLE_TYPES, indent = indent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
526 (k, v, not type(v) in simp, indent), items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
527 return items
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
528
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
529 def unpack_dict(dict, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
530 items = dict.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
531 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
532
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
533 def unpack_instance(inst, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
534 if hasattr(inst, '__pybrowse_unpack__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
535 return unpack_object(inst.__pybrowse_unpack__(), indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
536 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
537 items = [('__class__', inst.__class__)] + inst.__dict__.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
538 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
539
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
540 def unpack_class(clss, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
541 items = [('__bases__', clss.__bases__), ('__name__', clss.__name__)] + clss.__dict__.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
542 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
543
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
544 def unpack_other(object, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
545 attrs = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
546 if hasattr(object, '__members__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
547 attrs = attrs + object.__members__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
548 if hasattr(object, '__methods__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
549 attrs = attrs + object.__methods__
22029
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
550 if hasattr(object, '__dict__'):
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
551 attrs = attrs + object.__dict__.keys()
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
552 if hasattr(object, '__slots__'):
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
553 # XXX??
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
554 attrs = attrs + object.__slots__
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
555 if hasattr(object, "__class__") and "__class__" not in attrs:
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
556 attrs.append("__class__")
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
557 if hasattr(object, "__doc__") and "__doc__" not in attrs:
a5b25a816a6d Backport of 1.13:
Jack Jansen <jack.jansen@cwi.nl>
parents: 21013
diff changeset
558 attrs.append("__doc__")
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
559 items = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
560 for attr in attrs:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
561 items.append((attr, getattr(object, attr)))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
562 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
563
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
564 def pack_items(items, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
565 items = map(lambda (k, v), type = type, simp = SIMPLE_TYPES, indent = indent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
566 (k, v, not type(v) in simp, indent),
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
567 items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
568 return tuple_caselesssort(items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
569
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
570 def caselesssort(alist):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
571 """Return a sorted copy of a list. If there are only strings in the list,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
572 it will not consider case"""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
573
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
574 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
575 # turn ['FOO', 'aaBc', 'ABcD'] into [('foo', 'FOO'), ('aabc', 'aaBc'), ('abcd', 'ABcD')], if possible
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
576 tupledlist = map(lambda item, lower = string.lower: (lower(item), item), alist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
577 except TypeError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
578 # at least one element in alist is not a string, proceed the normal way...
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
579 alist = alist[:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
580 alist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
581 return alist
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
582 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
583 tupledlist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
584 # turn [('aabc', 'aaBc'), ('abcd', 'ABcD'), ('foo', 'FOO')] into ['aaBc', 'ABcD', 'FOO']
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
585 return map(lambda x: x[1], tupledlist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
586
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
587 def tuple_caselesssort(items):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
588 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
589 tupledlist = map(lambda tuple, lower = string.lower: (lower(tuple[0]), tuple), items)
15282
bf21e417bed2 fixed 2.0 compat bug
Just van Rossum <just@lettererror.com>
parents: 11422
diff changeset
590 except (AttributeError, TypeError):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
591 items = items[:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
592 items.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
593 return items
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
594 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
595 tupledlist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
596 return map(lambda (low, tuple): tuple, tupledlist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
597