added a vim load-config feature
[pygdb.git] / StatusWindow.py
index 8614788666d65b5adb2d71b02cb77720aed0d24d..e021fed1a18b2f4c1b26d901ffbca4ac5e1786d2 100644 (file)
@@ -5,10 +5,15 @@ __author__ = "shuber"
 
 
 import gtk
+import re
+import string
+import os
 import vte
 
-import WatchesFrame
+import DbgTerminal
 import BreakpointsFrame
+import WatchesFrame
+
 
 
 class StatusWindow (gtk.Window):
@@ -16,34 +21,69 @@ class StatusWindow (gtk.Window):
        def __init__(self, mainctrlwnd, debugger):
 
                gtk.Window.__init__(self)
-               self.set_screen(mainctrlwnd.get_screen())
-
+               self.debugger = debugger
+               
                self.set_border_width(5)
                self.set_title("Status")
                self.set_default_size(400,600)
-               self.connect("destroy", lambda *w: gtk.main_quit())
+               self.connect("destroy", DbgTerminal.quitHandler)
+
+               vbox = gtk.VBox(False, 5)
+               self.add(vbox)
 
+               hbox = gtk.HBox(False, 5)
+               vbox.pack_start(hbox, False, False)
+
+               self.viewBtn = gtk.Button("View")
+               self.viewBtn.connect("clicked", self.viewBtnClicked)
+               hbox.pack_start(self.viewBtn, False, False)
+               self.status = gtk.Label("Not Running")
+               hbox.pack_start(self.status, False, False)
+
+               self.paned1 = gtk.VPaned()
+               vbox.add(self.paned1)
+
+               #Adding the frames
+               self.frames = []
+               self.frames += [WatchesFrame.WatchesFrame(debugger)]
+               self.frames += [BreakpointsFrame.BreakpointsFrame(debugger)]
+               self.paned1.add1(self.frames[0])
+               self.paned1.add2(self.frames[1])
 
                #Register callback function for new positions
-               self.mainctrlwnd = mainctrlwnd
+               #and update the values
                mainctrlwnd.newPosCbs += [self.updateValues]
 
+               self.show_all()
 
-               vbox = gtk.VBox(False, 5)
-               self.add(vbox)
 
-               self.status = gtk.Label("Not Running")
-               vbox.pack_start(self.status, False, False)
-               vpaned = gtk.VPaned()
-               vbox.add(vpaned)
+       def applyConfiguration(self, conf):
 
-               self.watchesFrame = WatchesFrame.WatchesFrame(debugger)
-               vpaned.add1(self.watchesFrame)
+               w = conf.findInt("statuswnd-width")
+               h = conf.findInt("statuswnd-height")
+               paned1 = conf.findInt("statuswnd-paned1")
 
-               self.breakpointsFrame = BreakpointsFrame.BreakpointsFrame(debugger)
-               vpaned.add2(self.breakpointsFrame)
+               if w!=None and h!=None:
+                       self.resize(w,h)
+               if paned1!=None:
+                       self.paned1.set_position(paned1)
 
-               self.show_all()
+
+               while not self.debugger.isActive():
+                       gtk.main_iteration()
+
+               for f in self.frames:
+                       f.applyConfiguration(conf)
+
+
+       def fillConfiguration(self, conf):
+
+               conf.addInt("statuswnd-width", self.get_size()[0])
+               conf.addInt("statuswnd-height", self.get_size()[1])
+               conf.addInt("statuswnd-paned1", self.paned1.get_position())
+
+               for f in self.frames:
+                       f.fillConfiguration(conf)
 
 
        def updateValues(self, pos):
@@ -54,7 +94,25 @@ class StatusWindow (gtk.Window):
                        file, lineno = pos
                        self.status.set_text("%s:%s" % (file, lineno))
 
-               self.watchesFrame.updateValues()
-               self.breakpointsFrame.updateValues()
+               for f in self.frames:
+                       f.updateValues(pos)
+
+
+       def viewBtnClicked(self, btn):
+
+               status = self.status.get_label().strip()
+               rx = re.compile("\S+:\d+")
+
+               #It is a path
+               if rx.search(status):
+                       try:
+                               [file,lineno] = string.split(status,":")
+                               lineno = int(lineno)
+                               
+                               os.system('gvim -R -c ":%d" %s' % (lineno,file))
+
+                       except OSError:
+                               pass
+