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