14 import ClientIOTerminal
17 class MainControlWindow (gtk
.Window
):
19 #Callbacks for new positions
22 def __init__(self
, dbgterm
):
25 gtk
.Window
.__init
__(self
)
26 self
.connect("destroy", lambda *w
: gtk
.main_quit())
29 self
.dbgterm
= dbgterm
30 self
.clientioterm
= ClientIOTerminal
.ClientIOTerminal(self
.dbgterm
.client_ptymaster
)
32 #Set title and add terminal
33 self
.set_title("Main Control")
34 self
.set_border_width(5)
37 #The main horizontal pane left=buttons, right=terminals
38 hbox
= gtk
.HBox(False,0)
41 hbox
.pack_start(hpaned
, True, True)
45 #Plug together the buttons
46 vbox
= gtk
.VButtonBox()
47 vbox
.set_layout(gtk
.BUTTONBOX_START
)
50 self
.runBtn
= gtk
.Button("Run")
52 self
.continueBtn
= gtk
.Button("Continue")
53 vbox
.add(self
.continueBtn
)
54 self
.stepoverBtn
= gtk
.Button("Step Over")
55 vbox
.add(self
.stepoverBtn
)
56 self
.stepinBtn
= gtk
.Button("Step In")
57 vbox
.add(self
.stepinBtn
)
58 self
.quitBtn
= gtk
.Button("Quit")
59 vbox
.add(self
.quitBtn
)
62 #Plug together the terminals
67 vbox
.pack_start(vpaned
, True, True)
68 vpaned
.add(self
.dbgterm
)
69 vpaned
.add(self
.clientioterm
)
73 self
.runBtnHandler
= self
.runBtn
.connect('clicked', self
.runBtnClicked
)
74 self
.continueBtnHandler
= self
.continueBtn
.connect('clicked', self
.continueBtnClicked
)
75 self
.stepoverBtnHandler
= self
.stepoverBtn
.connect('clicked', self
.stepoverBtnClicked
)
76 self
.stepinBtnHandler
= self
.stepinBtn
.connect('clicked', self
.stepinBtnClicked
)
77 self
.quitBtnHandler
= self
.quitBtn
.connect('clicked', self
.quitBtnClicked
)
84 def runBtnClicked(self
, btn
):
86 pos
= self
.dbgterm
.setRun()
87 self
.newSourcePosition(pos
)
90 def continueBtnClicked(self
, btn
):
92 pos
= self
.dbgterm
.setContinue()
93 self
.newSourcePosition(pos
)
96 def stepoverBtnClicked(self
, btn
):
98 pos
= self
.dbgterm
.setStepover()
99 self
.newSourcePosition(pos
)
102 def stepinBtnClicked(self
, btn
):
103 self
.disableButtons()
104 pos
= self
.dbgterm
.setStepin()
105 self
.newSourcePosition(pos
)
108 def quitBtnClicked(self
, btn
):
109 self
.dbgterm
.setQuit()
111 def disableButtons(self
):
112 self
.runBtn
.handler_block(self
.runBtnHandler
)
113 self
.continueBtn
.handler_block(self
.continueBtnHandler
)
114 self
.stepoverBtn
.handler_block(self
.stepoverBtnHandler
)
115 self
.stepinBtn
.handler_block(self
.stepinBtnHandler
)
116 self
.quitBtn
.handler_block(self
.quitBtnHandler
)
118 def enableButtons(self
):
119 self
.runBtn
.handler_unblock(self
.runBtnHandler
)
120 self
.continueBtn
.handler_unblock(self
.continueBtnHandler
)
121 self
.stepoverBtn
.handler_unblock(self
.stepoverBtnHandler
)
122 self
.stepinBtn
.handler_unblock(self
.stepinBtnHandler
)
123 self
.quitBtn
.handler_unblock(self
.quitBtnHandler
)
125 def newSourcePosition(self
, pos
):
127 for cb
in self
.newPosCbs
:
133 if __name__
== "__main__":
136 print "new pos: ", pos
139 clientCmd
= string
.join(sys
.argv
[1:])
140 dbgterm
= GdbTerminal
.GdbTerminal(clientCmd
)
141 mainCtrlWnd
= MainControlWindow(dbgterm
)
143 mainCtrlWnd
.newPosCbs
+= [newpos
]