added missing main control window
[pygdb.git] / MainControlWindow.py
1 #!/usr/bin/python
2 #shuber, 2008-06-04
3
4 __author__ = "shuber"
5
6
7 import gtk
8 import string
9 import sys
10 import vte
11
12
13 import GdbTerminal
14 import ClientIOTerminal
15
16
17 class MainControlWindow (gtk.Window):
18
19 #Callbacks for new positions
20 newPosCbs = []
21
22 def __init__(self, dbgterm):
23
24 #Set up GTK stuff
25 gtk.Window.__init__(self)
26 self.connect("destroy", lambda *w: gtk.main_quit())
27
28 #Set terminals
29 self.dbgterm = dbgterm
30 self.clientioterm = ClientIOTerminal.ClientIOTerminal(self.dbgterm.client_ptymaster)
31
32 #Set title and add terminal
33 self.set_title("Main Control")
34 self.set_border_width(5)
35
36
37 #The main horizontal pane left=buttons, right=terminals
38 hbox = gtk.HBox(False,0)
39 self.add(hbox)
40 hpaned = gtk.HPaned()
41 hbox.pack_start(hpaned, True, True)
42
43
44
45 #Plug together the buttons
46 vbox = gtk.VButtonBox()
47 vbox.set_layout(gtk.BUTTONBOX_START)
48 hpaned.add1(vbox)
49
50 self.runBtn = gtk.Button("Run")
51 vbox.add(self.runBtn)
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)
60
61
62 #Plug together the terminals
63 vbox = gtk.VBox()
64 hpaned.add2(vbox)
65
66 vpaned = gtk.VPaned()
67 vbox.pack_start(vpaned, True, True)
68 vpaned.add(self.dbgterm)
69 vpaned.add(self.clientioterm)
70
71
72 #Install handlers
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)
78
79 #Show the window
80 self.show_all()
81
82
83
84 def runBtnClicked(self, btn):
85 self.disableButtons()
86 pos = self.dbgterm.setRun()
87 self.newSourcePosition(pos)
88 self.enableButtons()
89
90 def continueBtnClicked(self, btn):
91 self.disableButtons()
92 pos = self.dbgterm.setContinue()
93 self.newSourcePosition(pos)
94 self.enableButtons()
95
96 def stepoverBtnClicked(self, btn):
97 self.disableButtons()
98 pos = self.dbgterm.setStepover()
99 self.newSourcePosition(pos)
100 self.enableButtons()
101
102 def stepinBtnClicked(self, btn):
103 self.disableButtons()
104 pos = self.dbgterm.setStepin()
105 self.newSourcePosition(pos)
106 self.enableButtons()
107
108 def quitBtnClicked(self, btn):
109 self.dbgterm.setQuit()
110
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)
117
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)
124
125 def newSourcePosition(self, pos):
126 #Call the callbacks
127 for cb in self.newPosCbs:
128 cb(pos)
129
130
131
132
133 if __name__ == "__main__":
134
135 def newpos(pos):
136 print "new pos: ", pos
137
138
139 clientCmd = string.join(sys.argv[1:])
140 dbgterm = GdbTerminal.GdbTerminal(clientCmd)
141 mainCtrlWnd = MainControlWindow(dbgterm)
142
143 mainCtrlWnd.newPosCbs += [newpos]
144
145 gtk.main()
146
147