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