mirror of https://github.com/python/cpython
160 lines
4.1 KiB
Python
160 lines
4.1 KiB
Python
# 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()
|