annotate Mac/Tools/IDE/PyBrowser.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents 50173ea1fd44
children c3a096bfbd6b
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
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
7 from Carbon import Qd, Icn, Fm, QuickDraw
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
8 from Carbon.QuickDraw import hilitetransfermode
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
9
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
10
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
11 nullid = '\0\0'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
12 closedid = struct.pack('h', 468)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
13 openid = struct.pack('h', 469)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
14 closedsolidid = struct.pack('h', 470)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
15 opensolidid = struct.pack('h', 471)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
16
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
17 arrows = (nullid, closedid, openid, closedsolidid, opensolidid)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
18
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
19 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
20 def ctlcharsREsearch(str):
16918
6d59817cf792 Silly typo which caused the stack browser to crash.
Jack Jansen <jack.jansen@cwi.nl>
parents: 16725
diff changeset
21 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
22 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
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
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
25 def double_repr(key, value, truncvalue = 0,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
26 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
27 has_ctlchars = ctlcharsREsearch, _repr = repr, str = str):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
28 if type(key) == StringType and has_ctlchars(key) < 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
29 key = str(key)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
30 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
31 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
32 if key == '__builtins__':
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
33 value = "<" + type(value).__name__ + " '__builtin__'>"
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
34 elif key == '__return__':
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
35 # 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
36 # Use safe repr instead.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
37 import repr
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
38 value = repr.repr(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
39 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
40 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
41 value = _repr(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
42 '' + 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
43 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
44 value = '\xa5\xa5\xa5 exception in repr()'
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
45 if truncvalue:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
46 return key + '\t' + value[:255]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
47 return key + '\t' + value
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
48
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
49
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
50 def truncString(s, maxwid):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
51 if maxwid < 1:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
52 return 1, ""
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
53 strlen = len(s)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
54 strwid = Qd.TextWidth(s, 0, strlen);
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
55 if strwid <= maxwid:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
56 return 0, s
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
57
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
58 Qd.TextFace(QuickDraw.condense)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
59 strwid = Qd.TextWidth(s, 0, strlen)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
60 ellipsis = Qd.StringWidth('\xc9')
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
61
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
62 if strwid <= maxwid:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
63 Qd.TextFace(0)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
64 return 1, s
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
65 if strwid < 1:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
66 Qd.TextFace(0)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
67 return 1, ""
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
68
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
69 mid = int(strlen * maxwid / strwid)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
70 while 1:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
71 if mid <= 0:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
72 mid = 0
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
73 break
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
74 strwid = Qd.TextWidth(s, 0, mid) + ellipsis
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
75 strwid2 = Qd.TextWidth(s, 0, mid + 1) + ellipsis
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
76 if strwid <= maxwid and maxwid <= strwid2:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
77 if maxwid == strwid2:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
78 mid += 1
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
79 break
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
80 if strwid > maxwid:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
81 mid -= 1
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
82 if mid <= 0:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
83 mid = 0
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
84 break
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
85 elif strwid2 < maxwid:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
86 mid += 1
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
87 Qd.TextFace(0)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
88 return 1, s[:mid] + '\xc9'
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
89
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
90
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
91 def drawTextCell(text, cellRect, ascent, theList):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
92 l, t, r, b = cellRect
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
93 cellwidth = r - l
27839
50173ea1fd44 More int() around float arguments.
Jack Jansen <jack.jansen@cwi.nl>
parents: 27737
diff changeset
94 Qd.MoveTo(int(l + 2), int(t + ascent))
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
95 condense, text = truncString(text, cellwidth - 3)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
96 if condense:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
97 Qd.TextFace(QuickDraw.condense)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
98 Qd.DrawText(text, 0, len(text))
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
99 Qd.TextFace(0)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
100
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
101
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
102 PICTWIDTH = 16
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
103
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
104
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
105 class BrowserWidget(W.CustomList):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
106
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
107 def __init__(self, possize, object = None, col = 100, closechildren = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
108 W.List.__init__(self, possize, callback = self.listhit)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
109 self.object = (None,)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
110 self.indent = 16
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
111 self.lastmaxindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
112 self.closechildren = closechildren
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
113 self.children = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
114 self.mincol = 64
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
115 self.setcolumn(col)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
116 self.bind('return', self.openselection)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
117 self.bind('enter', self.openselection)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
118 if object is not None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
119 self.set(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
120
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
121 def set(self, object):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
122 if self.object[0] is not object:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
123 self.object = object,
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
124 self[:] = self.unpack(object, 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
125 elif self._parentwindow is not None and self._parentwindow.wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
126 self.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
127
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
128 def unpack(self, object, indent):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
129 return unpack_object(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
130
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
131 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
132 # for now...
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
133 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
134 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
135 sel = self.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
136 fold = self.getunfoldedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
137 topcell = self.gettopcell()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
138 self[:] = self.unpack(self.object[0], 0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
139 self.unfoldobjects(fold)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
140 self.setselectedobjects(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
141 self.settopcell(topcell)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
142 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
143
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
144 def setcolumn(self, col):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
145 self.col = col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
146 self.colstr = struct.pack('h', col)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
147 if self._list:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
148 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
149 self.setitems(self.items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
150 self.setselection(sel)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
151
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
152 def key(self, char, event):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
153 if char in (Wkeys.leftarrowkey, Wkeys.rightarrowkey):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
154 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
155 sel.reverse()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
156 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
157 for index in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
158 self.fold(index, char == Wkeys.rightarrowkey)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
159 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
160 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
161 W.List.key(self, char, event)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
162
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
163 def rollover(self, (x, y), onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
164 if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
165 if self.incolumn((x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
166 W.SetCursor('hmover')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
167 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
168 W.SetCursor('arrow')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
169
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
170 def inarrow(self, (x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
171 cl, ct, cr, cb = self._list.LRect((0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
172 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
173 if (x - cl) < 16:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
174 cellheight = cb - ct
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
175 index = (y - ct) / cellheight
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
176 if index < len(self.items):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
177 return 1, index
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
178 return None, None
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
179
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
180 def incolumn(self, (x, y)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
181 l, t, r, b = self._list.LRect((0, 0))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
182 abscol = l + self.col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
183 return abs(abscol - x) < 3
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
184
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
185 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
186 from Carbon import Qd, QuickDraw, Evt
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
187 self.SetPort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
188 l, t, r, b = self._bounds
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
189 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
190 abscol = l + self.col
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
191 mincol = l + self.mincol
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
192 maxcol = r - 10
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
193 diff = abscol - x
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
194 Qd.PenPat('\000\377\000\377\000\377\000\377')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
195 Qd.PenMode(QuickDraw.srcXor)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
196 rect = abscol - 1, t, abscol, b
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
197 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
198 lastpoint = (x, y)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
199 newcol = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
200 #W.SetCursor('fist')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
201 while Evt.Button():
21013
41b8d66730d6 a whole bunch of OSX tweaks
Just van Rossum <just@letterror.com>
parents: 20833
diff changeset
202 Evt.WaitNextEvent(0, 1, None) # needed for OSX
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
203 (x, y) = Evt.GetMouse()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
204 if (x, y) <> lastpoint:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
205 newcol = x + diff
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
206 newcol = max(newcol, mincol)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
207 newcol = min(newcol, maxcol)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
208 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
209 rect = newcol - 1, t, newcol, b
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
210 Qd.PaintRect(rect)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
211 lastpoint = (x, y)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
212 Qd.PaintRect(rect)
26466
418a7ec92599 Lots of minor tweaks for the pep252 checkins, mainly because Qd
Jack Jansen <jack.jansen@cwi.nl>
parents: 25293
diff changeset
213 Qd.PenPat(Qd.GetQDGlobalsBlack())
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
214 Qd.PenNormal()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
215 if newcol > 0 and newcol <> abscol:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
216 self.setcolumn(newcol - l)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
217
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
218 def click(self, point, modifiers):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
219 if point == (-1, -1): # gross.
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
220 W.List.click(self, point ,modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
221 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
222 hit, index = self.inarrow(point)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
223 if hit:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
224 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
225 self.fold(index, arrow == 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
226 elif self.incolumn(point):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
227 self.trackcolumn(point)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
228 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
229 W.List.click(self, point, modifiers)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
230
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
231 # for W.List.key
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
232 def findmatch(self, tag):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
233 lower = string.lower
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
234 items = self.items
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
235 taglen = len(tag)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
236 match = '\377' * 100
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
237 match_i = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
238 for i in range(len(items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
239 item = lower(str(items[i][0]))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
240 if tag <= item < match:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
241 match = item
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
242 match_i = i
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
243 if match_i >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
244 return match_i
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
245 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
246 return len(items) - 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
247
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
248 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
249 if self.closechildren:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
250 for window in self.children:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
251 window.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
252 self.children = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
253 W.List.close(self)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
254
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
255 def fold(self, index, onoff):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
256 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
257 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
258 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
259 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
260 topcell = self.gettopcell()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
261 if onoff:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
262 self[index] = (key, value, 4, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
263 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
264 self[index+1:index+1] = self.unpack(value, indent + 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
265 self[index] = (key, value, 2, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
266 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
267 self[index] = (key, value, 3, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
268 self.setdrawingmode(0)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
269 count = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
270 for i in range(index + 1, len(self.items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
271 (dummy, dummy, dummy, subindent) = self.items[i]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
272 if subindent <= indent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
273 break
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
274 count = count + 1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
275 self[index+1:index+1+count] = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
276 self[index] = (key, value, 1, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
277 maxindent = self.getmaxindent()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
278 if maxindent <> self.lastmaxindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
279 newabsindent = self.col + (maxindent - self.lastmaxindent) * self.indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
280 if newabsindent >= self.mincol:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
281 self.setcolumn(newabsindent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
282 self.lastmaxindent = maxindent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
283 self.settopcell(topcell)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
284 self.setdrawingmode(1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
285
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
286 def unfoldobjects(self, objects):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
287 for obj in objects:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
288 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
289 index = self.items.index(obj)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
290 except ValueError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
291 pass
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
292 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
293 self.fold(index, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
294
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
295 def getunfoldedobjects(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
296 curindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
297 objects = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
298 for index in range(len(self.items)):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
299 (key, value, arrow, indent) = self.items[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
300 if indent > curindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
301 (k, v, a, i) = self.items[index - 1]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
302 objects.append((k, v, 1, i))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
303 curindent = indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
304 elif indent < curindent:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
305 curindent = indent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
306 return objects
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
307
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
308 def listhit(self, isdbl):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
309 if isdbl:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
310 self.openselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
311
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
312 def openselection(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
313 import os
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
314 sel = self.getselection()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
315 for index in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
316 (key, value, arrow, indent) = self[index]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
317 if arrow:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
318 self.children.append(Browser(value))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
319 elif type(value) == types.StringType and '\0' not in value:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
320 editor = self._parentwindow.parent.getscript(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
321 if editor:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
322 editor.select()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
323 return
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
324 elif os.path.exists(value) and os.path.isfile(value):
27737
4367f805db09 Got rid of macfs and FSSpecs in general (pathnames or FSRefs are now
Jack Jansen <jack.jansen@cwi.nl>
parents: 26639
diff changeset
325 if MacOS.GetCreatorAndType(value)[1] in ('TEXT', '\0\0\0\0'):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
326 W.getapplication().openscript(value)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
327
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
328 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
329 arrows = arrows, pack = struct.pack):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
330 arrow = arrows[arrow]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
331 return arrow + pack('h', self.indent * indent) + self.colstr + \
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
332 double_repr(key, value, 1)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
333
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
334 def getmaxindent(self, max = max):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
335 maxindent = 0
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
336 for item in self.items:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
337 maxindent = max(maxindent, item[3])
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
338 return maxindent
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
339
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
340 def domenu_copy(self, *args):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
341 sel = self.getselectedobjects()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
342 selitems = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
343 for key, value, dummy, dummy in sel:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
344 selitems.append(double_repr(key, value))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
345 text = string.join(selitems, '\r')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
346 if text:
20833
860472877dda fixed a non-Carbon Carbon import
Just van Rossum <just@letterror.com>
parents: 19488
diff changeset
347 from Carbon import Scrap
21605
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
348 if hasattr(Scrap, 'PutScrap'):
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
349 Scrap.ZeroScrap()
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
350 Scrap.PutScrap('TEXT', text)
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
351 else:
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
352 Scrap.ClearCurrentScrap()
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
353 sc = Scrap.GetCurrentScrap()
035d9c96aaec Use the Carbon scrap manager interface if the old interface isn't available.
Jack Jansen <jack.jansen@cwi.nl>
parents: 21599
diff changeset
354 sc.PutScrapFlavor('TEXT', 0, text)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
355
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
356 def listDefDraw(self, selected, cellRect, theCell,
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
357 dataOffset, dataLen, theList):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
358 self.myDrawCell(0, selected, cellRect, theCell,
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
359 dataOffset, dataLen, theList)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
360
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
361 def listDefHighlight(self, selected, cellRect, theCell,
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
362 dataOffset, dataLen, theList):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
363 self.myDrawCell(1, selected, cellRect, theCell,
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
364 dataOffset, dataLen, theList)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
365
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
366 def myDrawCell(self, onlyHilite, selected, cellRect, theCell,
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
367 dataOffset, dataLen, theList):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
368 savedPort = Qd.GetPort()
26466
418a7ec92599 Lots of minor tweaks for the pep252 checkins, mainly because Qd
Jack Jansen <jack.jansen@cwi.nl>
parents: 25293
diff changeset
369 Qd.SetPort(theList.GetListPort())
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
370 savedClip = Qd.NewRgn()
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
371 Qd.GetClip(savedClip)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
372 Qd.ClipRect(cellRect)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
373 savedPenState = Qd.GetPenState()
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
374 Qd.PenNormal()
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
375
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
376 l, t, r, b = cellRect
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
377
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
378 if not onlyHilite:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
379 Qd.EraseRect(cellRect)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
380
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
381 ascent, descent, leading, size, hm = Fm.FontMetrics()
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
382 linefeed = ascent + descent + leading
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
383
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
384 if dataLen >= 6:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
385 data = theList.LGetCell(dataLen, theCell)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
386 iconId, indent, tab = struct.unpack("hhh", data[:6])
25293
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
387 try:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
388 key, value = data[6:].split("\t", 1)
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
389 except ValueError:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
390 # bogus data, at least don't crash.
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
391 indent = 0
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
392 tab = 0
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
393 iconId = 0
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
394 key = ""
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
395 value = data[6:]
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
396
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
397 if iconId:
25293
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
398 try:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
399 theIcon = Icn.GetCIcon(iconId)
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
400 except Icn.Error:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
401 pass
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
402 else:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
403 rect = (0, 0, 16, 16)
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
404 rect = Qd.OffsetRect(rect, l, t)
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
405 rect = Qd.OffsetRect(rect, 0, (theList.cellSize[1] - (rect[3] - rect[1])) / 2)
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
406 Icn.PlotCIcon(rect, theIcon)
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
407
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
408 if len(key) >= 0:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
409 cl, ct, cr, cb = cellRect
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
410 vl, vt, vr, vb = self._viewbounds
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
411 cl = vl + PICTWIDTH + indent
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
412 cr = vl + tab
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
413 if cr > vr:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
414 cr = vr
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
415 if cl < cr:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
416 drawTextCell(key, (cl, ct, cr, cb), ascent, theList)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
417 cl = vl + tab
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
418 cr = vr
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
419 if cl < cr:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
420 drawTextCell(value, (cl, ct, cr, cb), ascent, theList)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
421 #elif dataLen != 0:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
422 # drawTextCell("???", 3, cellRect, ascent, theList)
25293
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
423 else:
61c2506ec2e8 make sure the object browser can't crash because when the list data gets bigger than 32kB
Just van Rossum <just@letterror.com>
parents: 22575
diff changeset
424 return # we have bogus data
22575
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
425
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
426 # draw nice dotted line
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
427 l, t, r, b = cellRect
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
428 l = self._viewbounds[0] + tab
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
429 r = l + 1;
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
430 if not (theList.cellSize[1] & 0x01) or (t & 0x01):
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
431 myPat = "\xff\x00\xff\x00\xff\x00\xff\x00"
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
432 else:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
433 myPat = "\x00\xff\x00\xff\x00\xff\x00\xff"
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
434 Qd.PenPat(myPat)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
435 Qd.PenMode(QuickDraw.srcCopy)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
436 Qd.PaintRect((l, t, r, b))
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
437 Qd.PenNormal()
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
438
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
439 if selected or onlyHilite:
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
440 l, t, r, b = cellRect
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
441 l = self._viewbounds[0] + PICTWIDTH
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
442 r = self._viewbounds[2]
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
443 Qd.PenMode(hilitetransfermode)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
444 Qd.PaintRect((l, t, r, b))
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
445
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
446 # restore graphics environment
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
447 Qd.SetPort(savedPort)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
448 Qd.SetClip(savedClip)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
449 Qd.DisposeRgn(savedClip)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
450 Qd.SetPenState(savedPenState)
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
451
bc20baaae3ee Make object browser work in OSX (by rewriting the old browser
Just van Rossum <just@letterror.com>
parents: 21605
diff changeset
452
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
453
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
454 class Browser:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
455
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
456 def __init__(self, object = None, title = None, closechildren = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
457 if hasattr(object, '__name__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
458 name = object.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
459 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
460 name = ''
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
461 if title is None:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
462 title = 'Object browser'
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
463 if name:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
464 title = title + ': ' + name
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
465 self.w = w = W.Window((300, 400), title, minsize = (100, 100))
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
466 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
467 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
468 w.browser = BrowserWidget((-1, 24, 1, -14), None)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
469 w.bind('cmdu', w.updatebutton.push)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
470 w.open()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
471 self.set(object, name)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
472
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
473 def close(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
474 if self.w.wid:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
475 self.w.close()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
476
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
477 def set(self, object, name = ''):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
478 W.SetCursor('watch')
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
479 tp = type(object).__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
480 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
481 length = len(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
482 except:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
483 length = -1
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
484 if not name and hasattr(object, '__name__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
485 name = object.__name__
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
486 if name:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
487 info = name + ': ' + tp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
488 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
489 info = tp
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
490 if length >= 0:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
491 if length == 1:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
492 info = info + ' (%d element)' % length
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
493 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
494 info = info + ' (%d elements)' % length
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
495 self.w.info.set(info)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
496 self.w.browser.set(object)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
497
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
498 def update(self):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
499 self.w.browser.update()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
500
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
501
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
502 SIMPLE_TYPES = (
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
503 type(None),
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
504 int,
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
505 long,
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
506 float,
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
507 complex,
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
508 str,
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
509 unicode,
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
510 )
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
511
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
512 def get_ivars(obj):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
513 """Return a list the names of all (potential) instance variables."""
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
514 # __mro__ recipe from Guido
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
515 slots = {}
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
516 # old-style C objects
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
517 if hasattr(obj, "__members__"):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
518 for name in obj.__members__:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
519 slots[name] = None
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
520 if hasattr(obj, "__methods__"):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
521 for name in obj.__methods__:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
522 slots[name] = None
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
523 # generic type
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
524 if hasattr(obj, "__dict__"):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
525 slots.update(obj.__dict__)
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
526 cls = type(obj)
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
527 if hasattr(cls, "__mro__"):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
528 # new-style class, use descriptors
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
529 for base in cls.__mro__:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
530 for name, value in base.__dict__.items():
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
531 # XXX using callable() is a heuristic which isn't 100%
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
532 # foolproof.
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
533 if hasattr(value, "__get__") and not callable(value):
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
534 slots[name] = None
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
535 if "__dict__" in slots:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
536 del slots["__dict__"]
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
537 slots = slots.keys()
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
538 slots.sort()
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
539 return slots
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
540
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
541 def unpack_object(object, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
542 tp = type(object)
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
543 if isinstance(object, SIMPLE_TYPES) and object is not None:
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
544 raise TypeError, "can't browse simple type: %s" % tp.__name__
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
545 elif isinstance(object, dict):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
546 return unpack_dict(object, indent)
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
547 elif isinstance(object, (tuple, list)):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
548 return unpack_sequence(object, indent)
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
549 elif isinstance(object, types.ModuleType):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
550 return unpack_dict(object.__dict__, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
551 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
552 return unpack_other(object, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
553
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
554 def unpack_sequence(seq, indent = 0):
26630
59dd9257bc03 and now the real fix...
Just van Rossum <just@letterror.com>
parents: 26629
diff changeset
555 return [(i, v, not isinstance(v, SIMPLE_TYPES), indent)
59dd9257bc03 and now the real fix...
Just van Rossum <just@letterror.com>
parents: 26629
diff changeset
556 for i, v in enumerate(seq)]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
557
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
558 def unpack_dict(dict, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
559 items = dict.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
560 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
561
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
562 def unpack_instance(inst, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
563 if hasattr(inst, '__pybrowse_unpack__'):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
564 return unpack_object(inst.__pybrowse_unpack__(), indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
565 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
566 items = [('__class__', inst.__class__)] + inst.__dict__.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
567 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
568
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
569 def unpack_class(clss, indent = 0):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
570 items = [('__bases__', clss.__bases__), ('__name__', clss.__name__)] + clss.__dict__.items()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
571 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
572
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
573 def unpack_other(object, indent = 0):
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
574 attrs = get_ivars(object)
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
575 items = []
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
576 for attr in attrs:
26484
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
577 try:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
578 value = getattr(object, attr)
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
579 except:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
580 pass
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
581 else:
0f848b06146f - reworked the object unpacking code, now supports new-style objects more
Just van Rossum <just@letterror.com>
parents: 26466
diff changeset
582 items.append((attr, value))
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
583 return pack_items(items, indent)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
584
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
585 def pack_items(items, indent = 0):
26639
0ff47362bb81 another wrong assumption fixed
Just van Rossum <just@letterror.com>
parents: 26630
diff changeset
586 items = [(k, v, not isinstance(v, SIMPLE_TYPES), indent)
0ff47362bb81 another wrong assumption fixed
Just van Rossum <just@letterror.com>
parents: 26630
diff changeset
587 for k, v in items]
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
588 return tuple_caselesssort(items)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
589
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
590 def caselesssort(alist):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
591 """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
592 it will not consider case"""
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
593
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
594 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
595 # 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
596 tupledlist = map(lambda item, lower = string.lower: (lower(item), item), alist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
597 except TypeError:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
598 # 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
599 alist = alist[:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
600 alist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
601 return alist
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
602 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
603 tupledlist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
604 # turn [('aabc', 'aaBc'), ('abcd', 'ABcD'), ('foo', 'FOO')] into ['aaBc', 'ABcD', 'FOO']
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
605 return map(lambda x: x[1], tupledlist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
606
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
607 def tuple_caselesssort(items):
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
608 try:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
609 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
610 except (AttributeError, TypeError):
10047
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
611 items = items[:]
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
612 items.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
613 return items
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
614 else:
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
615 tupledlist.sort()
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
616 return map(lambda (low, tuple): tuple, tupledlist)
a0b06891d286 First Checked In.
Just van Rossum <just@lettererror.com>
parents:
diff changeset
617