adding updating of breakpoint list
[pygdb.git] / WatchesFrame.py
1 #!/usr/bin/python
2 #shuber, 2008-06-04
3
4 __author__ = "shuber"
5
6
7 import gobject
8 import gtk
9 import vte
10
11 import DbgTerminal
12
13
14 class WatchesFrame (gtk.Frame):
15
16
17 def __init__(self, debugger):
18
19 gtk.Frame.__init__(self, "Watches")
20 self.debugger = debugger
21
22 vbox = gtk.VBox(False, 5)
23 self.add(vbox)
24
25 hbox = gtk.HBox()
26 vbox.pack_start(hbox, False, False)
27
28 self.addBtn = gtk.Button(stock=gtk.STOCK_ADD)
29 self.delBtn = gtk.Button(stock=gtk.STOCK_REMOVE)
30 hbox.add(self.addBtn)
31 hbox.add(self.delBtn)
32
33 sw = gtk.ScrolledWindow()
34 sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
35 sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
36 vbox.add(sw)
37
38 self.model = self.__createModel()
39 self.tv = gtk.TreeView(self.model)
40 self.tv.set_rules_hint(True)
41 self.tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
42
43 self.__addColumns(self.tv)
44 sw.add(self.tv)
45
46 self.addBtn.connect("clicked", self.addBtnClicked)
47 self.delBtn.connect("clicked", self.delBtnClicked)
48
49
50
51 def __createModel(self):
52
53 model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, \
54 gobject.TYPE_BOOLEAN)
55
56 return model
57
58
59 def __addColumns(self, tv):
60
61 model = tv.get_model()
62
63 renderer = gtk.CellRendererText()
64 renderer.connect("edited", self.onExprEdited, model)
65 renderer.set_data("column", 0)
66 col = gtk.TreeViewColumn("Expr", renderer, text=0, editable=2)
67 col.set_resizable(True)
68 tv.append_column(col)
69
70
71 renderer = gtk.CellRendererText()
72 renderer.set_data("column", 1)
73 col = gtk.TreeViewColumn("Result", renderer, text=1)
74 col.set_resizable(True)
75 tv.append_column(col)
76
77
78 def onExprEdited(self, cell, pathStr, expr, model):
79 iter = model.get_iter_from_string(pathStr)
80 path = model.get_path(iter)[0]
81 col = cell.get_data("column")
82
83 model.set(iter, 0, expr)
84
85 if self.debugger.isActive():
86 res = self.debugger.getExpression(expr)
87 model.set(iter, 1, res)
88
89
90
91
92 def addBtnClicked(self, btn):
93 iter = self.model.append()
94 self.model.set(iter, 0, "0", 1, "0", 2, True)
95
96
97 def delBtnClicked(self, btn):
98 selection = self.tv.get_selection()
99 model, paths = selection.get_selected_rows()
100
101 for path in paths:
102 iter = model.get_iter(path)
103 model.remove(iter)
104
105
106 def updateValues(self):
107
108 iter = self.model.get_iter_first()
109
110 while iter != None:
111
112 expr, = self.model.get(iter, 0)
113 res = self.debugger.getExpression(expr)
114 self.model.set(iter, 1, res)
115
116 iter = self.model.iter_next(iter)
117