Add LICENSE
[pygdb.git] / MainControlWindow.py
old mode 100755 (executable)
new mode 100644 (file)
index 55bff28..54fbac9
@@ -10,20 +10,20 @@ import sys
 import vte
 
 
-import GdbTerminal
+import DbgTerminal
 import ClientIOTerminal
 
 
 class MainControlWindow (gtk.Window):
 
-       #Callbacks for new positions
-       newPosCbs = []
-
        def __init__(self, dbgterm):
 
                #Set up GTK stuff
                gtk.Window.__init__(self)
-               self.connect("destroy", lambda *w: gtk.main_quit())
+               self.connect("destroy", DbgTerminal.quitHandler )
+
+               dbgterm.gotActiveCallback += [self.enableButtons]
+               dbgterm.gotInactiveCallback += [self.disableButtons]
 
                #Set terminals
                self.dbgterm = dbgterm
@@ -32,48 +32,57 @@ class MainControlWindow (gtk.Window):
                #Set title and add terminal
                self.set_title("Main Control")
                self.set_border_width(5)
+                       
 
+               #Vertical box. Top: Buttons, Bottom: Terminal vpane
+               vbox = gtk.VBox(False,5)
+               self.add(vbox)
 
-               #The main horizontal pane left=buttons, right=terminals
-               hbox = gtk.HBox(False,0)
-               self.add(hbox)
-               hpaned = gtk.HPaned()
-               hbox.pack_start(hpaned, True, True)
-
-
-
-               #Plug together the buttons
-               vbox = gtk.VButtonBox()
-               vbox.set_layout(gtk.BUTTONBOX_START)
-               hpaned.add1(vbox)
+               #Button box
+               hbtnbox = gtk.HBox(False, spacing=5)
+               #hbtnbox.set_layout(gtk.BUTTONBOX_START)
+               vbox.pack_start(hbtnbox, expand=False)
 
                self.runBtn = gtk.Button("Run")
-               vbox.add(self.runBtn)
+               hbtnbox.add(self.runBtn)
                self.continueBtn = gtk.Button("Continue")
-               vbox.add(self.continueBtn)
+               hbtnbox.add(self.continueBtn)
                self.stepoverBtn = gtk.Button("Step Over")
-               vbox.add(self.stepoverBtn)
+               hbtnbox.add(self.stepoverBtn)
                self.stepinBtn = gtk.Button("Step In")
-               vbox.add(self.stepinBtn)
+               hbtnbox.add(self.stepinBtn)
+               self.stepoutBtn = gtk.Button("Step Out")
+               hbtnbox.add(self.stepoutBtn)
                self.quitBtn = gtk.Button("Quit")
-               vbox.add(self.quitBtn)
+               hbtnbox.add(self.quitBtn)
 
+               #Vertical pane for terminals
+               vpaned = gtk.VPaned()
+               vbox.pack_start(vpaned)
 
-               #Plug together the terminals
-               vbox = gtk.VBox()
-               hpaned.add2(vbox)
+               #Debugger terminal
+               hbox = gtk.HBox(False, 0)
+               vpaned.pack1(hbox, resize=True)
+               scrollbar = gtk.VScrollbar(dbgterm.get_adjustment())
+               hbox.pack_start(dbgterm)
+               hbox.pack_start(scrollbar, expand=False)
 
-               vpaned = gtk.VPaned()
-               vbox.pack_start(vpaned, True, True)
-               vpaned.add(self.dbgterm)
-               vpaned.add(self.clientioterm)
+               #Client I/O terminal
+               hbox = gtk.HBox(False, 0)
+               vpaned.pack2(hbox)
+               scrollbar = gtk.VScrollbar(self.clientioterm.get_adjustment())
+               hbox.pack_start(self.clientioterm)
+               hbox.pack_start(scrollbar, expand=False)
 
 
                #Install handlers
                self.runBtnHandler = self.runBtn.connect('clicked', self.runBtnClicked)
-               self.continueBtnHandler = self.continueBtn.connect('clicked', self.continueBtnClicked)
-               self.stepoverBtnHandler = self.stepoverBtn.connect('clicked', self.stepoverBtnClicked)
+               self.continueBtnHandler = self.continueBtn.connect('clicked', \
+                               self.continueBtnClicked)
+               self.stepoverBtnHandler = self.stepoverBtn.connect('clicked', \
+                               self.stepoverBtnClicked)
                self.stepinBtnHandler = self.stepinBtn.connect('clicked', self.stepinBtnClicked)
+               self.stepoutBtnHandler = self.stepoutBtn.connect('clicked', self.stepoutBtnClicked)
                self.quitBtnHandler = self.quitBtn.connect('clicked', self.quitBtnClicked)
 
                #Show the window
@@ -82,67 +91,36 @@ class MainControlWindow (gtk.Window):
 
 
        def runBtnClicked(self, btn):
-               self.disableButtons()
                pos = self.dbgterm.setRun()
-               self.newSourcePosition(pos)
-               self.enableButtons()
 
        def continueBtnClicked(self, btn):
-               self.disableButtons()
                pos = self.dbgterm.setContinue()
-               self.newSourcePosition(pos)
-               self.enableButtons()
 
        def stepoverBtnClicked(self, btn):
-               self.disableButtons()
                pos = self.dbgterm.setStepover()
-               self.newSourcePosition(pos)
-               self.enableButtons()
 
        def stepinBtnClicked(self, btn):
-               self.disableButtons()
                pos = self.dbgterm.setStepin()
-               self.newSourcePosition(pos)
-               self.enableButtons()
+
+       def stepoutBtnClicked(self, btn):
+               pos = self.dbgterm.setStepout()
 
        def quitBtnClicked(self, btn):
                self.dbgterm.setQuit()
 
-       def disableButtons(self):
+       def disableButtons(self, *w):
                self.runBtn.handler_block(self.runBtnHandler)
                self.continueBtn.handler_block(self.continueBtnHandler)
                self.stepoverBtn.handler_block(self.stepoverBtnHandler)
                self.stepinBtn.handler_block(self.stepinBtnHandler)
+               self.stepoutBtn.handler_block(self.stepoutBtnHandler)
                self.quitBtn.handler_block(self.quitBtnHandler)
 
-       def enableButtons(self):
+       def enableButtons(self, *w):
                self.runBtn.handler_unblock(self.runBtnHandler)
                self.continueBtn.handler_unblock(self.continueBtnHandler)
                self.stepoverBtn.handler_unblock(self.stepoverBtnHandler)
                self.stepinBtn.handler_unblock(self.stepinBtnHandler)
+               self.stepoutBtn.handler_unblock(self.stepoutBtnHandler)
                self.quitBtn.handler_unblock(self.quitBtnHandler)
 
-       def newSourcePosition(self, pos):
-               #Call the callbacks
-               for cb in self.newPosCbs:
-                       cb(pos)
-
-
-
-
-if __name__ == "__main__":
-
-
-       import StatusWindow
-
-
-       clientCmd = string.join(sys.argv[1:])
-       dbgterm = GdbTerminal.GdbTerminal(clientCmd)
-       mainCtrlWnd = MainControlWindow(dbgterm)
-
-       statusWnd = StatusWindow.StatusWindow(mainCtrlWnd, dbgterm)
-       mainCtrlWnd.newPosCbs += [statusWnd.updateValues]
-
-       gtk.main()
-
-