16 class BreakpointsFrame (gtk
.Frame
):
19 def __init__(self
, debugger
):
21 gtk
.Frame
.__init
__(self
, "Breakpoints")
22 self
.debugger
= debugger
24 vbox
= gtk
.VBox(False, 5)
28 vbox
.pack_start(hbox
, False, False)
29 self
.bpEntry
= gtk
.Entry()
30 hbox
.add(self
.bpEntry
)
34 vbox
.pack_start(hbox
, False, False)
35 self
.addBtn
= gtk
.Button(stock
=gtk
.STOCK_ADD
)
36 self
.delBtn
= gtk
.Button(stock
=gtk
.STOCK_REMOVE
)
37 self
.updBtn
= gtk
.Button("Update")
42 sw
= gtk
.ScrolledWindow()
43 sw
.set_shadow_type(gtk
.SHADOW_ETCHED_IN
)
44 sw
.set_policy(gtk
.POLICY_AUTOMATIC
, gtk
.POLICY_AUTOMATIC
)
47 self
.model
= self
.__createModel
()
48 self
.tv
= gtk
.TreeView(self
.model
)
49 self
.tv
.set_rules_hint(True)
50 self
.tv
.get_selection().set_mode(gtk
.SELECTION_MULTIPLE
)
52 self
.__addColumns
(self
.tv
)
55 self
.addBtn
.connect("clicked", self
.addBtnClicked
)
56 self
.delBtn
.connect("clicked", self
.delBtnClicked
)
57 self
.updBtn
.connect("clicked", self
.updBtnClicked
)
61 def __createModel(self
):
62 #Breakpoint number, position and a boolean flag indicating whether BP has been set
64 model
= gtk
.ListStore(gobject
.TYPE_STRING
, gobject
.TYPE_STRING
)
69 def __addColumns(self
, tv
):
71 model
= tv
.get_model()
73 renderer
= gtk
.CellRendererText()
74 renderer
.set_data("column", 0)
75 col
= gtk
.TreeViewColumn("No", renderer
, text
=0)
76 col
.set_resizable(True)
80 renderer
= gtk
.CellRendererText()
81 renderer
.set_data("column", 1)
82 col
= gtk
.TreeViewColumn("Specification", renderer
, text
=1)
83 col
.set_resizable(True)
88 def addBtnClicked(self
, btn
):
90 if not self
.debugger
.isActive():
94 bpspec
= self
.bpEntry
.get_text()
95 bpspec
= bpspec
.strip()
96 rx
= re
.compile("^[\w\._\-]+:\d+(\s+if\s+\S+.*)?$")
98 #Check if format is correct
99 if not rx
.search(bpspec
):
100 dialog
= gtk
.MessageDialog(None, \
101 gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
, \
102 gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
, \
109 ifsplit
= string
.split(bpspec
, "if")
112 cond
= ifsplit
[1].strip()
116 pos
= ifsplit
[0].strip()
117 [file,lineno
] = string
.split(pos
, ":")
119 self
.addBreakpoint(file, lineno
, cond
)
123 def addBreakpoint(self
, file, lineno
, cond
=None):
125 no
= self
.debugger
.setBreakpoint(file, lineno
, cond
)
128 self
.addBreakpointToList(no
, file, lineno
, cond
)
130 dialog
= gtk
.MessageDialog(None, \
131 gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
, \
132 gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
, \
133 "Invalid specification!")
139 def addBreakpointToList(self
, no
, file, lineno
, cond
=None):
140 iter = self
.model
.append()
141 self
.model
.set(iter, 0, no
)
144 self
.model
.set(iter, 1, "%s:%s" % (str(file), str(lineno
)))
146 self
.model
.set(iter, 1, "%s:%s if %s" % (str(file), str(lineno
), str(cond
)))
150 def delBtnClicked(self
, btn
):
152 if not self
.debugger
.isActive():
155 selection
= self
.tv
.get_selection()
156 model
, paths
= selection
.get_selected_rows()
159 iter = model
.get_iter(path
)
160 bpno
, = self
.model
.get(iter, 0)
161 self
.debugger
.delBreakpoint(bpno
)
165 def updBtnClicked(self
, btn
):
167 if not self
.debugger
.isActive():
173 def updateValues(self
):
175 bpnts
= self
.debugger
.getBreakpoints()
178 iter = self
.model
.get_iter_first()
180 newiter
= self
.model
.iter_next(iter)
181 self
.model
.remove(iter)
185 [no
, file, lineno
, cond
] = bp
186 self
.addBreakpointToList(no
, file, lineno
, cond
)