Package vwidget :: Module windows
[hide private]
[frames] | no frames]

Source Code for Module vwidget.windows

  1   
  2  import gtk 
  3  import gtk.glade 
  4   
  5  import envi.cli as e_cli 
  6   
  7  import vwidget.layout as vw_layout 
  8  import vwidget.menubuilder as vw_menu 
  9  import vwidget.memview as vw_memview 
 10   
 11  from envi.threads import firethread 
 12  from vwidget.main import idlethread 
13 14 -class MainWindow(vw_layout.LayoutWindow):
15 """ 16 A nice main text window with a CLI input and history etc... 17 """
18 - def __init__(self, cli, memobj, syms=None):
19 vw_layout.LayoutWindow.__init__(self) 20 self.cli = cli 21 self.connect("key-press-event", self.keypressed) 22 23 self.vbox = gtk.VBox() 24 self.menubar = vw_menu.MenuBar() 25 26 self.add(self.vbox) 27 self.vbox.pack_start(self.menubar, expand=False) 28 toolbar = self.getMainToolbar() 29 if toolbar != None: 30 self.vbox.pack_start(toolbar, expand=False) 31 32 self.canvas = vw_memview.ScrolledMemoryView(memobj, syms=syms) 33 self.canvas.textview.set_property("wrap_mode", gtk.WRAP_WORD) 34 self.vbox.pack_start(self.canvas, expand=True) 35 36 # If it's an EnviCli, let's over-ride the canvas right away. 37 if isinstance(cli, e_cli.EnviCli): 38 cli.setCanvas(self.canvas) 39 40 entry = gtk.Entry() 41 entry.connect("activate", self.cli_activate) 42 entry.connect("key-press-event", self.entrykeypressed) 43 self.vbox.pack_start(entry, expand=False) 44 self.entry = entry 45 46 self.history = [] 47 self.histidx = 0 48 entry.grab_focus()
49 50 @idlethread
51 - def _sensitive_entry(self, sensitive):
52 # For the fired thread 53 self.entry.set_sensitive(sensitive) 54 if sensitive: 55 self.entry.grab_focus()
56
57 - def getMainToolbar(self):
58 return None
59
60 - def useHistory(self, entry, delta):
61 if delta < 0 and self.histidx == 0: 62 return 63 64 if delta > 0 and len(self.history) <= self.histidx+delta: 65 self.histidx = len(self.history) 66 entry.set_text("") 67 return 68 69 self.histidx += delta 70 htext = self.history[self.histidx] 71 entry.set_text(htext) 72 entry.set_position(-1)
73
74 - def entrykeypressed(self, entry, event):
75 if event.keyval == 65362: 76 self.useHistory(entry, -1) 77 return True 78 elif event.keyval == 65364: 79 self.useHistory(entry, 1) 80 return True 81 return False
82 83 @firethread
84 - def onecmd(self, cmd):
85 ''' 86 Issue a single command with proper history tracking etc... 87 (fires a thread to do it...) 88 ''' 89 self._sensitive_entry(False) 90 try: 91 cmd = self.cli.precmd(cmd) 92 self.canvas.write("%s %s\n" % (self.cli.prompt,cmd)) 93 self.cli.onecmd(cmd) 94 self.addHistory(cmd) 95 finally: 96 self._sensitive_entry(True)
97
98 - def keypressed(self, window, event):
99 fkbase = 65469 100 fkey = event.keyval - fkbase 101 if fkey >= 1 and fkey < 13: 102 self.onecmd("<f%d>" % fkey) 103 104 elif event.keyval == 65299: 105 self.onecmd("break")
106
107 - def addHistory(self, histcmd):
108 self.history.append(histcmd) 109 self.histidx = len(self.history)
110
111 - def cli_activate(self, entry):
112 cmd = entry.get_text() 113 entry.set_text("") 114 self.onecmd(cmd)
115
116 #FIXME is anything even using this one still? 117 -class VWindow:
118 """ 119 A class for all vdb/vivisect windows to inherit from. Full of 120 little utilities that make GUI writing slightly less painful. 121 122 When inheriting from this class, you *must* make your classname 123 the same as the top level window object in your glade project. 124 """ 125
126 - def __init__(self, fname, layout):
127 self.glade = gtk.glade.XML(fname) 128 self.glade.signal_autoconnect(self) 129 self.getWidget(self.__class__.__name__).connect("delete_event", self.delete) 130 self.notebook_groups = {} 131 self.vwlayout = layout
132
133 - def delete(self, window, event):
134 print "ENDING GEOM:",repr(self.getGeometry()) 135 return False
136
137 - def getGeometry(self):
138 """ 139 Returns a tuple of (x, y, xsize, ysize) for later use in setGeometry() 140 """ 141 win = self.getWidget(self.__class__.__name__) 142 x, y = win.get_position() 143 xsize, ysize = win.get_size() 144 return (x, y, xsize, ysize)
145
146 - def setGeometry(self, geom):
147 win = self.getWidget(self.__class__.__name__) 148 win.move(geom[0], geom[1]) 149 win.resize(geom[2], geom[3])
150
151 - def setTitle(self, title):
152 widget = self.getWidget(self.__class__.__name__) 153 if widget: 154 widget.set_title(title)
155
156 - def setSensitive(self, widgetname, sensitive):
157 wid = self.getWidget(widgetname) 158 wid.set_sensitive(sensitive)
159
160 - def textFromWidget(self, wName):
161 wid = self.glade.get_widget(wName) 162 if not wid: 163 raise Exception("ERROR - Can't find widget %s" % wName) 164 return wid.get_text()
165
166 - def getWidget(self, name):
167 return self.glade.get_widget(name)
168
169 - def show(self):
170 self.getWidget(self.__class__.__name__).show()
171
172 - def hide(self):
173 self.getWidget(self.__class__.__name__).hide()
174