--- /dev/null
+#!/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()
+
+