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 rx
= re
.compile("^[\w\._\-]+:\d+\s*(\sif\s+\S+.*)?$")
97 #Check if format is correct
98 if not rx
.search(bpspec
):
99 dialog
= gtk
.MessageDialog(None, \
100 gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
, \
101 gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
, \
108 ifsplit
= string
.split(bpspec
, "if")
111 cond
= ifsplit
[1].strip()
115 pos
= ifsplit
[0].strip()
116 [file,lineno
] = string
.split(pos
, ":")
118 pos
= self
.debugger
.setBreakpoint(file, lineno
, cond
)
121 iter = self
.model
.append()
122 self
.model
.set(iter, 0, pos
)
123 self
.model
.set(iter, 1, bpspec
)
125 dialog
= gtk
.MessageDialog(None, \
126 gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
, \
127 gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
, \
128 "Invalid specification!")
136 def delBtnClicked(self
, btn
):
138 if not self
.debugger
.isActive():
141 selection
= self
.tv
.get_selection()
142 model
, paths
= selection
.get_selected_rows()
145 iter = model
.get_iter(path
)
146 bpno
, = self
.model
.get(iter, 0)
147 self
.debugger
.delBreakpoint(bpno
)
151 def updBtnClicked(self
, btn
):
153 if not self
.debugger
.isActive():
159 def updateValues(self
):
161 bpnts
= self
.debugger
.getBreakpoints()
164 iter = self
.model
.get_iter_first()
166 newiter
= self
.model
.iter_next(iter)
167 self
.model
.remove(iter)
171 [no
, file, lineno
, cond
] = bp
172 iter = self
.model
.append()
173 self
.model
.set(iter, 0, no
)
176 self
.model
.set(iter, 1, "%s:%s" % (file, lineno
))
178 self
.model
.set(iter, 1, "%s:%s if %s" % (file, lineno
, cond
))