15 class WatchesFrame (StatusFrame
.StatusFrame
):
18 def __init__(self
, debugger
):
20 StatusFrame
.StatusFrame
.__init
__(self
, debugger
)
21 self
.set_label("Watches")
23 vbox
= gtk
.VBox(False, 5)
27 vbox
.pack_start(hbox
, False, False)
29 self
.addBtn
= gtk
.Button(stock
=gtk
.STOCK_ADD
)
30 self
.delBtn
= gtk
.Button(stock
=gtk
.STOCK_REMOVE
)
34 sw
= gtk
.ScrolledWindow()
35 sw
.set_shadow_type(gtk
.SHADOW_ETCHED_IN
)
36 sw
.set_policy(gtk
.POLICY_AUTOMATIC
, gtk
.POLICY_AUTOMATIC
)
39 self
.model
= self
.__createModel
()
40 self
.tv
= gtk
.TreeView(self
.model
)
41 self
.tv
.set_rules_hint(True)
42 self
.tv
.get_selection().set_mode(gtk
.SELECTION_MULTIPLE
)
44 self
.__addColumns
(self
.tv
)
47 self
.addBtn
.connect("clicked", self
.addBtnClicked
)
48 self
.delBtn
.connect("clicked", self
.delBtnClicked
)
52 def __createModel(self
):
54 model
= gtk
.ListStore(gobject
.TYPE_STRING
, gobject
.TYPE_STRING
, \
60 def __addColumns(self
, tv
):
62 model
= tv
.get_model()
64 renderer
= gtk
.CellRendererText()
65 renderer
.connect("edited", self
.onExprEdited
, model
)
66 renderer
.set_data("column", 0)
67 col
= gtk
.TreeViewColumn("Expr", renderer
, text
=0, editable
=2)
68 col
.set_resizable(True)
72 renderer
= gtk
.CellRendererText()
73 renderer
.set_data("column", 1)
74 col
= gtk
.TreeViewColumn("Result", renderer
, text
=1)
75 col
.set_resizable(True)
79 def onExprEdited(self
, cell
, pathStr
, expr
, model
):
80 iter = model
.get_iter_from_string(pathStr
)
81 path
= model
.get_path(iter)[0]
82 col
= cell
.get_data("column")
84 model
.set(iter, 0, expr
)
86 if self
.debugger
.isActive():
87 res
= self
.debugger
.getExpression(expr
)
88 model
.set(iter, 1, res
)
91 def applyConfiguration(self
, conf
):
92 for w
in conf
.watches
:
93 iter = self
.model
.append()
94 self
.model
.set(iter, 0, w
["expr"], 1, "<unkown>", 2, True)
95 self
.updateValues(None)
98 def fillConfiguration(self
, conf
):
100 iter = self
.model
.get_iter_first()
102 expr
, = self
.model
.get(iter, 0)
103 conf
.parseWatch(expr
)
104 iter = self
.model
.iter_next(iter)
107 def addBtnClicked(self
, btn
):
108 iter = self
.model
.append()
109 self
.model
.set(iter, 0, "0", 1, "0", 2, True)
111 def delBtnClicked(self
, btn
):
112 selection
= self
.tv
.get_selection()
113 model
, paths
= selection
.get_selected_rows()
115 for path
in reversed(paths
):
116 iter = model
.get_iter(path
)
119 def updateValues(self
, pos
):
120 iter = self
.model
.get_iter_first()
122 expr
, = self
.model
.get(iter, 0)
123 res
= self
.debugger
.getExpression(expr
)
124 self
.model
.set(iter, 1, res
)
126 iter = self
.model
.iter_next(iter)