Oops -- Lib/Test should be Lib/test, of course!
[python/dscho.git] / Mac / Tools / twit / mactwit_stack.py
blobe38fec3e20f8fa384c05ef0318400b2a722cd416
1 # A stab at a python debugger
2 import Res
3 import Qd
4 import Dlg
5 import Win
6 import FrameWork
7 import EasyDialogs
8 import sys
9 import TwitCore
10 from mac_widgets import MT_AnyList, MT_IndexList, MT_IconTextWidget
12 # Our dialogs
13 ID_STACK=501
14 I_STACK_TITLE=1
15 I_STACK=2
16 I_VARS_TITLE=3
17 I_VARS=4
18 I_SOURCE_TITLE=5
19 I_SOURCE=6
20 I_EXC_TITLE=7
21 I_EXC=8
22 I_EXCVALUE_TITLE=9
23 I_EXCVALUE=10
24 I_BROWSE=11
25 I_RULER1=12
26 I_RULER2=13
27 I_STATE_TITLE=14
28 I_STATE=15
29 I_SHOW_COMPLEX=16
30 I_SHOW_SYSTEM=17
31 I_EDIT=18
33 class StackBrowser(FrameWork.DialogWindow, TwitCore.StackBrowser):
34 """The stack-browser dialog - mac-dependent part"""
35 def open(self):
36 FrameWork.DialogWindow.open(self, ID_STACK)
37 self.SetPort()
38 Qd.TextFont(3)
39 Qd.TextSize(9)
41 tp, h, rect = self.wid.GetDialogItem(I_STACK)
42 self.stack = MT_IndexList(self.wid, rect, 2)
43 tp, h, rect = self.wid.GetDialogItem(I_VARS)
44 self.vars = MT_AnyList(self.wid, rect, 2)
45 tp, h, rect = self.wid.GetDialogItem(I_SOURCE)
46 self.source = MT_IconTextWidget(self.wid, rect)
48 self.mi_open()
50 def setsource(self, msg):
51 tp, h, rect = self.wid.GetDialogItem(I_SOURCE_TITLE)
52 if self.cur_source:
53 Dlg.SetDialogItemText(h, self.cur_source)
54 else:
55 Dlg.SetDialogItemText(h, msg)
56 self.source.setcontent(self.cur_source)
58 def source_setbreaks(self, list):
59 self.source.setbreaks(list)
61 def source_setline(self, lineno, icon):
62 self.source.setcurline(lineno, icon)
64 def source_select(self, lineno):
65 self.source.select(lineno)
67 def stack_setcontent(self, names, locations):
68 self.stack.setcontent(names, locations)
70 def stack_select(self, number):
71 self.stack.select(number)
73 def setvars(self):
74 self.vars.setcontent(self.cont_varnames, self.cont_varvalues)
76 def setexception(self, name, value):
77 if name == None:
78 self.wid.HideDialogItem(I_EXC)
79 self.wid.HideDialogItem(I_EXC_TITLE)
80 value = None
81 else:
82 self.wid.ShowDialogItem(I_EXC)
83 self.wid.ShowDialogItem(I_EXC_TITLE)
84 tp, h, rect = self.wid.GetDialogItem(I_EXC)
85 Dlg.SetDialogItemText(h, name)
86 if value == None:
87 self.wid.HideDialogItem(I_EXCVALUE)
88 self.wid.HideDialogItem(I_EXCVALUE_TITLE)
89 else:
90 self.wid.ShowDialogItem(I_EXCVALUE)
91 self.wid.ShowDialogItem(I_EXCVALUE_TITLE)
92 tp, h, rect = self.wid.GetDialogItem(I_EXCVALUE)
93 Dlg.SetDialogItemText(h, value)
95 def setprogramstate(self, msg):
96 tp, h, rect = self.wid.GetDialogItem(I_STATE)
97 Dlg.SetDialogItemText(h, msg)
99 def do_itemhit(self, item, event):
100 (what, message, when, where, modifiers) = event
101 Qd.SetPort(self.wid)
102 where = Qd.GlobalToLocal(where)
104 if item == I_STACK:
105 new_stackitem, double = self.stack.click(where, 0)
106 self.click_stack(new_stackitem)
107 elif item == I_VARS:
108 new_var, double = self.vars.click(where, 0)
109 if double:
110 self.click_var(new_var)
111 elif item == I_SOURCE:
112 lineno, inborder = self.source.click(where, 0)
113 if lineno <> None and lineno >= 0:
114 self.click_source(lineno, inborder)
115 elif item == I_BROWSE:
116 self.click_browse()
117 elif item == I_SHOW_COMPLEX:
118 self.show_complex = not self.show_complex
119 self.setup_frame()
120 elif item == I_SHOW_SYSTEM:
121 self.show_system = not self.show_system
122 self.setup_frame()
123 elif item == I_EDIT:
124 self.click_edit()
126 def set_var_buttons(self):
127 tp, h, rect = self.wid.GetDialogItem(I_SHOW_COMPLEX)
128 h.as_Control().SetControlValue(self.show_complex)
129 tp, h, rect = self.wid.GetDialogItem(I_SHOW_SYSTEM)
130 h.as_Control().SetControlValue(self.show_system)
132 def do_rawupdate(self, window, event):
133 Qd.SetPort(self.wid)
134 rgn = self.wid.GetWindowPort().visRgn
135 tp, h, rect = self.wid.GetDialogItem(I_RULER1)
136 Qd.MoveTo(rect[0], rect[1])
137 Qd.LineTo(rect[2], rect[1])
138 tp, h, rect = self.wid.GetDialogItem(I_RULER2)
139 Qd.MoveTo(rect[0], rect[1])
140 Qd.LineTo(rect[2], rect[1])
141 self.stack.update(rgn)
142 self.vars.update(rgn)
143 self.source.update(rgn)
145 def force_redraw(self):
146 Qd.SetPort(self.wid)
147 Win.InvalRgn(self.wid.GetWindowPort().visRgn)
149 def do_activate(self, activate, event):
150 self.stack.activate(activate)
151 self.vars.activate(activate)
152 self.source.activate(activate)
154 def close(self):
155 self.source.close()
156 del self.stack
157 del self.vars
158 del self.source
159 self.do_postclose()