added missing main control window
[pygdb.git] / MainControlWindow.py
diff --git a/MainControlWindow.py b/MainControlWindow.py
new file mode 100755 (executable)
index 0000000..d82baaf
--- /dev/null
@@ -0,0 +1,147 @@
+#!/usr/bin/python
+#shuber, 2008-06-04
+
+__author__ = "shuber"
+
+
+import gtk
+import string
+import sys
+import vte
+
+
+import GdbTerminal
+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())
+
+               #Set terminals
+               self.dbgterm = dbgterm
+               self.clientioterm = ClientIOTerminal.ClientIOTerminal(self.dbgterm.client_ptymaster)
+
+               #Set title and add terminal
+               self.set_title("Main Control")
+               self.set_border_width(5)
+
+
+               #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)
+
+               self.runBtn = gtk.Button("Run")
+               vbox.add(self.runBtn)
+               self.continueBtn = gtk.Button("Continue")
+               vbox.add(self.continueBtn)
+               self.stepoverBtn = gtk.Button("Step Over")
+               vbox.add(self.stepoverBtn)
+               self.stepinBtn = gtk.Button("Step In")
+               vbox.add(self.stepinBtn)
+               self.quitBtn = gtk.Button("Quit")
+               vbox.add(self.quitBtn)
+
+
+               #Plug together the terminals
+               vbox = gtk.VBox()
+               hpaned.add2(vbox)
+
+               vpaned = gtk.VPaned()
+               vbox.pack_start(vpaned, True, True)
+               vpaned.add(self.dbgterm)
+               vpaned.add(self.clientioterm)
+
+
+               #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.stepinBtnHandler = self.stepinBtn.connect('clicked', self.stepinBtnClicked)
+               self.quitBtnHandler = self.quitBtn.connect('clicked', self.quitBtnClicked)
+
+               #Show the window
+               self.show_all()
+
+
+
+       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 quitBtnClicked(self, btn):
+               self.dbgterm.setQuit()
+
+       def disableButtons(self):
+               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.quitBtn.handler_block(self.quitBtnHandler)
+
+       def enableButtons(self):
+               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.quitBtn.handler_unblock(self.quitBtnHandler)
+
+       def newSourcePosition(self, pos):
+               #Call the callbacks
+               for cb in self.newPosCbs:
+                       cb(pos)
+
+
+
+
+if __name__ == "__main__":
+
+       def newpos(pos):
+               print "new pos: ", pos
+
+
+       clientCmd = string.join(sys.argv[1:])
+       dbgterm = GdbTerminal.GdbTerminal(clientCmd)
+       mainCtrlWnd = MainControlWindow(dbgterm)
+
+       mainCtrlWnd.newPosCbs += [newpos]
+
+       gtk.main()
+
+