Add LICENSE
[pygdb.git] / StatusWindow.py
index e021fed1a18b2f4c1b26d901ffbca4ac5e1786d2..ae9903637ed48b4edd96a66bd2db775e5224c346 100644 (file)
@@ -10,49 +10,53 @@ import string
 import os
 import vte
 
+import Configuration
 import DbgTerminal
 import BreakpointsFrame
+import PositionFrame
 import WatchesFrame
 
 
 
 class StatusWindow (gtk.Window):
 
-       def __init__(self, mainctrlwnd, debugger):
-
+       def __init__(self, debugger, vimservername):
                gtk.Window.__init__(self)
+
+               self.vimservername = vimservername
                self.debugger = debugger
+               self.debugger.gotActiveCallback += [self.updateValues]
                
                self.set_border_width(5)
                self.set_title("Status")
                self.set_default_size(400,600)
                self.connect("destroy", DbgTerminal.quitHandler)
 
+
+               #Vbox container of frames
                vbox = gtk.VBox(False, 5)
                self.add(vbox)
 
-               hbox = gtk.HBox(False, 5)
-               vbox.pack_start(hbox, False, False)
+       
+               #Adding the frames
+               self.frames = []
+               self.frames += [PositionFrame.PositionFrame(debugger,self), \
+                               WatchesFrame.WatchesFrame(debugger), \
+                               BreakpointsFrame.BreakpointsFrame(debugger) ]
 
-               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)
+               #Register callback after frames!
+               self.debugger.gotActiveCallback += [self.updateValues]
 
+               #First paned window
                self.paned1 = gtk.VPaned()
                vbox.add(self.paned1)
+               #Second one
+               self.paned2 = gtk.VPaned()
+               self.paned1.add2(self.paned2)
 
-               #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
-               #and update the values
-               mainctrlwnd.newPosCbs += [self.updateValues]
+               self.paned1.add1(self.frames[1])
+               self.paned2.add1(self.frames[2])
+               self.paned2.add2(self.frames[0])
 
                self.show_all()
 
@@ -62,11 +66,14 @@ class StatusWindow (gtk.Window):
                w = conf.findInt("statuswnd-width")
                h = conf.findInt("statuswnd-height")
                paned1 = conf.findInt("statuswnd-paned1")
+               paned2 = conf.findInt("statuswnd-paned2")
 
                if w!=None and h!=None:
                        self.resize(w,h)
                if paned1!=None:
                        self.paned1.set_position(paned1)
+               if paned2!=None:
+                       self.paned2.set_position(paned2)
 
 
                while not self.debugger.isActive():
@@ -81,38 +88,30 @@ class StatusWindow (gtk.Window):
                conf.addInt("statuswnd-width", self.get_size()[0])
                conf.addInt("statuswnd-height", self.get_size()[1])
                conf.addInt("statuswnd-paned1", self.paned1.get_position())
+               conf.addInt("statuswnd-paned2", self.paned2.get_position())
+
+               conf.setCommand( self.debugger.clientCmd )
 
                for f in self.frames:
                        f.fillConfiguration(conf)
 
 
-       def updateValues(self, pos):
-
-               if pos == None:
-                       self.status.set_text("Exited")
-               else:
-                       file, lineno = pos
-                       self.status.set_text("%s:%s" % (file, lineno))
-
-               for f in self.frames:
-                       f.updateValues(pos)
-
+       def updateValues(self, status, param):
 
-       def viewBtnClicked(self, btn):
+               conf = Configuration.Configuration()
+               self.fillConfiguration(conf)
+               conf.store(".pygdb.conf")
 
-               status = self.status.get_label().strip()
-               rx = re.compile("\S+:\d+")
+               self.updateVim()
 
-               #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
+       def updateVim(self):
+               os.system('gvim --servername %s --remote-send "<ESC> :GDBLoadConfig<CR>"' % \
+                       self.vimservername)
 
+       def gotoVim(self, file, lineno):
+               file = self.debugger.toAbsPath(file)            
+               os.system('gvim --servername %s --remote-send "<ESC>:e %s<CR>:%s<CR>"' % \
+                       (self.vimservername, file, lineno))