4866134766793687c48d1df1fcc6483c88990d01
[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, quitonclose=True):
23
24 #Set up GTK stuff
25 gtk.Window.__init__(self)
26 if quitonclose:
27 self.connect("destroy", lambda *w: gtk.main_quit() )
28
29 #Set terminals
30 self.dbgterm = dbgterm
31 self.clientioterm = ClientIOTerminal.ClientIOTerminal(self.dbgterm.client_ptymaster)
32
33 #Set title and add terminal
34 self.set_title("Main Control")
35 self.set_border_width(5)
36
37
38 #Vertical box. Top: Buttons, Bottom: Terminal vpane
39 vbox = gtk.VBox(False,5)
40 self.add(vbox)
41
42 #Button box
43 hbtnbox = gtk.HButtonBox()
44 hbtnbox.set_layout(gtk.BUTTONBOX_START)
45 vbox.pack_start(hbtnbox)
46
47 self.runBtn = gtk.Button("Run")
48 hbtnbox.add(self.runBtn)
49 self.continueBtn = gtk.Button("Continue")
50 hbtnbox.add(self.continueBtn)
51 self.stepoverBtn = gtk.Button("Step Over")
52 hbtnbox.add(self.stepoverBtn)
53 self.stepinBtn = gtk.Button("Step In")
54 hbtnbox.add(self.stepinBtn)
55 self.quitBtn = gtk.Button("Quit")
56 hbtnbox.add(self.quitBtn)
57
58 #Vertical pane for terminals
59 vpaned = gtk.VPaned()
60 vbox.pack_start(vpaned, True, True)
61 vpaned.add(self.dbgterm)
62 vpaned.add(self.clientioterm)
63
64
65 #Install handlers
66 self.runBtnHandler = self.runBtn.connect('clicked', self.runBtnClicked)
67 self.continueBtnHandler = self.continueBtn.connect('clicked', self.continueBtnClicked)
68 self.stepoverBtnHandler = self.stepoverBtn.connect('clicked', self.stepoverBtnClicked)
69 self.stepinBtnHandler = self.stepinBtn.connect('clicked', self.stepinBtnClicked)
70 self.quitBtnHandler = self.quitBtn.connect('clicked', self.quitBtnClicked)
71
72 #Show the window
73 self.show_all()
74
75
76
77 def runBtnClicked(self, btn):
78 self.disableButtons()
79 pos = self.dbgterm.setRun()
80 self.newSourcePosition(pos)
81 self.enableButtons()
82
83 def continueBtnClicked(self, btn):
84 self.disableButtons()
85 pos = self.dbgterm.setContinue()
86 self.newSourcePosition(pos)
87 self.enableButtons()
88
89 def stepoverBtnClicked(self, btn):
90 self.disableButtons()
91 pos = self.dbgterm.setStepover()
92 self.newSourcePosition(pos)
93 self.enableButtons()
94
95 def stepinBtnClicked(self, btn):
96 self.disableButtons()
97 pos = self.dbgterm.setStepin()
98 self.newSourcePosition(pos)
99 self.enableButtons()
100
101 def quitBtnClicked(self, btn):
102 self.dbgterm.setQuit()
103
104 def disableButtons(self):
105 self.runBtn.handler_block(self.runBtnHandler)
106 self.continueBtn.handler_block(self.continueBtnHandler)
107 self.stepoverBtn.handler_block(self.stepoverBtnHandler)
108 self.stepinBtn.handler_block(self.stepinBtnHandler)
109 self.quitBtn.handler_block(self.quitBtnHandler)
110
111 def enableButtons(self):
112 self.runBtn.handler_unblock(self.runBtnHandler)
113 self.continueBtn.handler_unblock(self.continueBtnHandler)
114 self.stepoverBtn.handler_unblock(self.stepoverBtnHandler)
115 self.stepinBtn.handler_unblock(self.stepinBtnHandler)
116 self.quitBtn.handler_unblock(self.quitBtnHandler)
117
118 def newSourcePosition(self, pos):
119 #Call the callbacks
120 for cb in self.newPosCbs:
121 cb(pos)
122
123