# A stab at a python debugger import Res import Qd import Dlg import Win import FrameWork import EasyDialogs import sys import TwitCore from mac_widgets import MT_AnyList, MT_IndexList, MT_IconTextWidget # Our dialogs ID_STACK=501 I_STACK_TITLE=1 I_STACK=2 I_VARS_TITLE=3 I_VARS=4 I_SOURCE_TITLE=5 I_SOURCE=6 I_EXC_TITLE=7 I_EXC=8 I_EXCVALUE_TITLE=9 I_EXCVALUE=10 I_BROWSE=11 I_RULER1=12 I_RULER2=13 I_STATE_TITLE=14 I_STATE=15 I_SHOW_COMPLEX=16 I_SHOW_SYSTEM=17 I_EDIT=18 class StackBrowser(FrameWork.DialogWindow, TwitCore.StackBrowser): """The stack-browser dialog - mac-dependent part""" def open(self): FrameWork.DialogWindow.open(self, ID_STACK) self.SetPort() Qd.TextFont(3) Qd.TextSize(9) tp, h, rect = self.wid.GetDialogItem(I_STACK) self.stack = MT_IndexList(self.wid, rect, 2) tp, h, rect = self.wid.GetDialogItem(I_VARS) self.vars = MT_AnyList(self.wid, rect, 2) tp, h, rect = self.wid.GetDialogItem(I_SOURCE) self.source = MT_IconTextWidget(self.wid, rect) self.mi_open() def setsource(self, msg): tp, h, rect = self.wid.GetDialogItem(I_SOURCE_TITLE) if self.cur_source: Dlg.SetDialogItemText(h, self.cur_source) else: Dlg.SetDialogItemText(h, msg) self.source.setcontent(self.cur_source) def source_setbreaks(self, list): self.source.setbreaks(list) def source_setline(self, lineno, icon): self.source.setcurline(lineno, icon) def source_select(self, lineno): self.source.select(lineno) def stack_setcontent(self, names, locations): self.stack.setcontent(names, locations) def stack_select(self, number): self.stack.select(number) def setvars(self): self.vars.setcontent(self.cont_varnames, self.cont_varvalues) def setexception(self, name, value): if name == None: self.wid.HideDialogItem(I_EXC) self.wid.HideDialogItem(I_EXC_TITLE) value = None else: self.wid.ShowDialogItem(I_EXC) self.wid.ShowDialogItem(I_EXC_TITLE) tp, h, rect = self.wid.GetDialogItem(I_EXC) Dlg.SetDialogItemText(h, name) if value == None: self.wid.HideDialogItem(I_EXCVALUE) self.wid.HideDialogItem(I_EXCVALUE_TITLE) else: self.wid.ShowDialogItem(I_EXCVALUE) self.wid.ShowDialogItem(I_EXCVALUE_TITLE) tp, h, rect = self.wid.GetDialogItem(I_EXCVALUE) Dlg.SetDialogItemText(h, value) def setprogramstate(self, msg): tp, h, rect = self.wid.GetDialogItem(I_STATE) Dlg.SetDialogItemText(h, msg) def do_itemhit(self, item, event): (what, message, when, where, modifiers) = event Qd.SetPort(self.wid) where = Qd.GlobalToLocal(where) if item == I_STACK: new_stackitem, double = self.stack.click(where, 0) self.click_stack(new_stackitem) elif item == I_VARS: new_var, double = self.vars.click(where, 0) if double: self.click_var(new_var) elif item == I_SOURCE: lineno, inborder = self.source.click(where, 0) if lineno <> None and lineno >= 0: self.click_source(lineno, inborder) elif item == I_BROWSE: self.click_browse() elif item == I_SHOW_COMPLEX: self.show_complex = not self.show_complex self.setup_frame() elif item == I_SHOW_SYSTEM: self.show_system = not self.show_system self.setup_frame() elif item == I_EDIT: self.click_edit() def set_var_buttons(self): tp, h, rect = self.wid.GetDialogItem(I_SHOW_COMPLEX) h.as_Control().SetControlValue(self.show_complex) tp, h, rect = self.wid.GetDialogItem(I_SHOW_SYSTEM) h.as_Control().SetControlValue(self.show_system) def do_rawupdate(self, window, event): Qd.SetPort(self.wid) rgn = self.wid.GetWindowPort().visRgn tp, h, rect = self.wid.GetDialogItem(I_RULER1) Qd.MoveTo(rect[0], rect[1]) Qd.LineTo(rect[2], rect[1]) tp, h, rect = self.wid.GetDialogItem(I_RULER2) Qd.MoveTo(rect[0], rect[1]) Qd.LineTo(rect[2], rect[1]) self.stack.update(rgn) self.vars.update(rgn) self.source.update(rgn) def force_redraw(self): Qd.SetPort(self.wid) Win.InvalRgn(self.wid.GetWindowPort().visRgn) def do_activate(self, activate, event): self.stack.activate(activate) self.vars.activate(activate) self.source.activate(activate) def close(self): self.source.close() del self.stack del self.vars del self.source self.do_postclose()