add view file button
[pygdb.git] / StatusWindow.py
1 #!/usr/bin/python
2 #shuber, 2008-06-04
3
4 __author__ = "shuber"
5
6
7 import gtk
8 import re
9 import string
10 import os
11 import vte
12
13 import BreakpointsFrame
14 import WatchesFrame
15
16
17
18 class StatusWindow (gtk.Window):
19
20 def __init__(self, mainctrlwnd, debugger):
21
22 gtk.Window.__init__(self)
23 self.debugger = debugger
24
25 self.set_border_width(5)
26 self.set_title("Status")
27 self.set_default_size(400,600)
28 self.connect("destroy", lambda *w: gtk.main_quit())
29
30 vbox = gtk.VBox(False, 5)
31 self.add(vbox)
32
33 hbox = gtk.HBox(False, 5)
34 vbox.pack_start(hbox, False, False)
35
36 self.viewBtn = gtk.Button("View")
37 self.viewBtn.connect("clicked", self.viewBtnClicked)
38 hbox.pack_start(self.viewBtn, False, False)
39 self.status = gtk.Label("Not Running")
40 hbox.pack_start(self.status, False, False)
41
42 self.paned1 = gtk.VPaned()
43 vbox.add(self.paned1)
44
45 #Adding the frames
46 self.frames = []
47 self.frames += [WatchesFrame.WatchesFrame(debugger)]
48 self.frames += [BreakpointsFrame.BreakpointsFrame(debugger)]
49 self.paned1.add1(self.frames[0])
50 self.paned1.add2(self.frames[1])
51
52 #Register callback function for new positions
53 #and update the values
54 mainctrlwnd.newPosCbs += [self.updateValues]
55
56 self.show_all()
57
58
59 def applyConfiguration(self, conf):
60
61 w = conf.findInt("statuswnd-width")
62 h = conf.findInt("statuswnd-height")
63 paned1 = conf.findInt("statuswnd-paned1")
64
65 if w!=None and h!=None:
66 self.resize(w,h)
67 if paned1!=None:
68 self.paned1.set_position(paned1)
69
70
71 while not self.debugger.isActive():
72 gtk.main_iteration()
73
74 for f in self.frames:
75 f.applyConfiguration(conf)
76
77
78 def fillConfiguration(self, conf):
79
80 conf.addInt("statuswnd-width", self.get_size()[0])
81 conf.addInt("statuswnd-height", self.get_size()[1])
82 conf.addInt("statuswnd-paned1", self.paned1.get_position())
83
84 for f in self.frames:
85 f.fillConfiguration(conf)
86
87
88 def updateValues(self, pos):
89
90 if pos == None:
91 self.status.set_text("Exited")
92 else:
93 file, lineno = pos
94 self.status.set_text("%s:%s" % (file, lineno))
95
96 for f in self.frames:
97 f.updateValues(pos)
98
99
100 def viewBtnClicked(self, btn):
101
102 status = self.status.get_label().strip()
103 rx = re.compile("\S+:\d+")
104
105 #It is a path
106 if rx.search(status):
107 try:
108 [file,lineno] = string.split(status,":")
109 lineno = int(lineno)
110
111 os.system('gvim -R -c ":%d" %s' % (lineno,file))
112
113 except OSError:
114 pass
115
116
117