X-Git-Url: http://git.sthu.org/?a=blobdiff_plain;f=MainControlWindow.py;fp=MainControlWindow.py;h=d82baaf760ebe069695b14c5b5833fb5cd7c2dd0;hb=0024f43ac5834f611179587a6fc25385ee5bf4a5;hp=0000000000000000000000000000000000000000;hpb=0baefa6d07dd6f0891dc5541e8c79721c4340109;p=pygdb.git diff --git a/MainControlWindow.py b/MainControlWindow.py new file mode 100755 index 0000000..d82baaf --- /dev/null +++ b/MainControlWindow.py @@ -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() + +