18 class PositionFrame (StatusFrame
.StatusFrame
):
21 def __init__(self
, debugger
, statuswnd
):
23 StatusFrame
.StatusFrame
.__init
__(self
, debugger
)
24 self
.set_label("Position")
26 self
.statuswnd
= statuswnd
27 debugger
.gotActiveCallback
+= [self
.updateValues
]
28 debugger
.gotInactiveCallback
+= [self
.updateValues
]
34 vbox
= gtk
.VBox(False, 5)
37 hbox
= gtk
.HBox(False, 10)
38 vbox
.pack_start(hbox
, False, False)
39 self
.openBtn
= gtk
.Button(":e")
40 hbox
.pack_start(self
.openBtn
, False, False)
41 self
.positionLabel
= gtk
.Label()
42 hbox
.pack_start(self
.positionLabel
, False, False)
44 sw
= gtk
.ScrolledWindow()
45 sw
.set_shadow_type(gtk
.SHADOW_ETCHED_IN
)
46 sw
.set_policy(gtk
.POLICY_AUTOMATIC
, gtk
.POLICY_AUTOMATIC
)
49 self
.model
= self
.__createModel
()
50 self
.tv
= gtk
.TreeView(self
.model
)
51 self
.tv
.set_rules_hint(True)
52 self
.tv
.get_selection().set_mode(gtk
.SELECTION_MULTIPLE
)
53 self
.tv
.connect("row-activated", self
.rowactivated
)
55 self
.__addColumns
(self
.tv
)
58 self
.openBtn
.connect("clicked", self
.openBtnClicked
)
61 def __createModel(self
):
62 model
= gtk
.ListStore(gobject
.TYPE_STRING
, gobject
.TYPE_STRING
, \
63 gobject
.TYPE_STRING
, gobject
.TYPE_STRING
)
68 def __addColumns(self
, tv
):
70 model
= tv
.get_model()
72 renderer
= gtk
.CellRendererText()
73 renderer
.set_data("column", 0)
74 col
= gtk
.TreeViewColumn("Addr", renderer
, text
=0)
75 col
.set_resizable(True)
78 renderer
= gtk
.CellRendererText()
79 renderer
.set_data("column", 1)
80 col
= gtk
.TreeViewColumn("Func", renderer
, text
=1)
81 col
.set_resizable(True)
84 renderer
= gtk
.CellRendererText()
85 renderer
.set_data("column", 2)
86 col
= gtk
.TreeViewColumn("File", renderer
, text
=2)
87 col
.set_resizable(True)
90 renderer
= gtk
.CellRendererText()
91 renderer
.set_data("column", 3)
92 col
= gtk
.TreeViewColumn("Lin", renderer
, text
=3)
93 col
.set_resizable(True)
97 def openBtnClicked(self
, btn
):
99 if not self
.debugger
.isActive():
104 cmd
= 'gvim --servername pygdb -c ":GDBLoadConfig" %s' % (self
.file)
107 dialog
= gtk
.MessageDialog(None, \
108 gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
, \
109 gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
, \
110 "Error calling editor with '%s'." % cmd
)
115 def rowactivated(self
, tv
, path
, col
, *w
):
119 self
.statuswnd
.gotoVim(entry
[2], entry
[3])
123 def updateValues(self
, status
, param
):
127 iter = self
.model
.get_iter_first()
129 newiter
= self
.model
.iter_next(iter)
130 self
.model
.remove(iter)
134 if status
== "break":
137 #Set current file position
138 self
.file, self
.lineno
= param
139 self
.positionLabel
.set_label("%s:%d" % (self
.file, self
.lineno
))
142 self
.bt
= self
.debugger
.getBacktrace()
143 for [addr
, func
, file, lineno
] in self
.bt
:
144 iter = self
.model
.append()
147 self
.model
.set(iter, 0, addr
)
149 self
.model
.set(iter, 1, func
)
150 self
.model
.set(iter, 2, file)
151 self
.model
.set(iter, 3, lineno
)
156 self
.file, self
.lineno
= None, None
160 if status
== "exited":
161 self
.positionLabel
.set_label("Exited with code %d." % param
)
162 elif status
== "started":
163 self
.positionLabel
.set_label("Started.")
164 elif status
== "continued":
165 self
.positionLabel
.set_label("Continued.")
167 self
.positionLabel
.set_label(status
)
172 def applyConfiguration(self
, conf
):
175 def fillConfiguration(self
, conf
):
176 conf
.setCurrpos(self
.file, self
.lineno
)