summaryrefslogtreecommitdiffstats
path: root/viz/viewer.py
diff options
context:
space:
mode:
Diffstat (limited to 'viz/viewer.py')
-rw-r--r--viz/viewer.py68
1 files changed, 64 insertions, 4 deletions
diff --git a/viz/viewer.py b/viz/viewer.py
index a7871a7..ee5c230 100644
--- a/viz/viewer.py
+++ b/viz/viewer.py
@@ -25,7 +25,7 @@ class GraphContextMenu(gtk.Menu):
25 item.show() 25 item.show()
26 26
27class GraphArea(gtk.DrawingArea): 27class GraphArea(gtk.DrawingArea):
28 HORIZ_PAGE_SCROLL_FACTOR = 4.8 28 HORIZ_PAGE_SCROLL_FACTOR = 10.8
29 HORIZ_STEP_SCROLL_FACTOR = 0.8 29 HORIZ_STEP_SCROLL_FACTOR = 0.8
30 VERT_PAGE_SCROLL_FACTOR = 3.0 30 VERT_PAGE_SCROLL_FACTOR = 3.0
31 VERT_STEP_SCROLL_FACTOR = 0.5 31 VERT_STEP_SCROLL_FACTOR = 0.5
@@ -75,7 +75,13 @@ class GraphArea(gtk.DrawingArea):
75 ctx.set_line_width(thickness) 75 ctx.set_line_width(thickness)
76 ctx.set_source_rgb(color[0], color[1], color[2]) 76 ctx.set_source_rgb(color[0], color[1], color[2])
77 ctx.stroke() 77 ctx.stroke()
78
79 def get_renderer(self):
80 return self.renderer
78 81
82 def get_graph(self):
83 return self.renderer.get_graph()
84
79 def set_scroll_adjustments(self, widget, horizontal, vertical, data=None): 85 def set_scroll_adjustments(self, widget, horizontal, vertical, data=None):
80 graph = self.renderer.get_graph() 86 graph = self.renderer.get_graph()
81 width = graph.get_width() 87 width = graph.get_width()
@@ -243,10 +249,60 @@ class GraphWindow(gtk.ScrolledWindow):
243 def __init__(self, renderer): 249 def __init__(self, renderer):
244 super(GraphWindow, self).__init__(None, None) 250 super(GraphWindow, self).__init__(None, None)
245 251
252 self.add_events(gtk.gdk.KEY_PRESS_MASK)
253
254 self.ctr = 0
255 self.connect('key-press-event', self.key_press)
256
246 self.garea = GraphArea(renderer) 257 self.garea = GraphArea(renderer)
247 self.add(self.garea) 258 self.add(self.garea)
248 self.garea.show() 259 self.garea.show()
249 260
261 def key_press(self, widget, key_event):
262 hadj = self.get_hadjustment()
263 vadj = self.get_vadjustment()
264 if hadj is None or vadj is None:
265 return
266
267 hupper = hadj.get_upper()
268 hlower = hadj.get_lower()
269 hpincr = hadj.get_page_increment()
270 hsincr = hadj.get_step_increment()
271 hpsize = hadj.get_page_size()
272 hval = hadj.get_value()
273 vupper = vadj.get_upper()
274 vlower = vadj.get_lower()
275 vval = vadj.get_value()
276 vpincr = vadj.get_page_increment()
277 vsincr = vadj.get_step_increment()
278 vpsize = vadj.get_page_size()
279
280 ctrl_clicked = key_event.state & gtk.gdk.CONTROL_MASK
281
282 adj_tuple = {'up' : (vadj, -vsincr, 0, vval, max),
283 'ctrl-up' : (vadj, -vpincr, 0, vval, max),
284 'down' : (vadj, vsincr, vupper - vpsize, vval, min),
285 'ctrl-down' : (vadj, vpincr, vupper - vpsize, vval, min),
286 'left' : (hadj, -hsincr, 0, hval, max),
287 'ctrl-left' : (hadj, -hpincr, 0, hval, max),
288 'right' : (hadj, hsincr, hupper - hpsize, hval, min),
289 'ctrl-right' : (hadj, hpincr, hupper - hpsize, hval, min)}
290
291 keystr = None
292 keymap = {gtk.keysyms.Up : 'up', gtk.keysyms.Down : 'down',
293 gtk.keysyms.Left : 'left', gtk.keysyms.Right : 'right'}
294 if key_event.keyval in keymap:
295 keystr = keymap[key_event.keyval]
296
297 if ctrl_clicked:
298 keystr = 'ctrl-' + keystr
299
300 if keystr is not None:
301 adj, inc, lim, val, extr = adj_tuple[keystr]
302 adj.set_value(extr(val + inc, lim))
303
304 return True
305
250 def get_graph_area(self): 306 def get_graph_area(self):
251 return self.garea 307 return self.garea
252 308
@@ -320,9 +376,13 @@ class MainWindow(gtk.Window):
320 self.notebook.append_page(gwindow, gtk.Label(title)) 376 self.notebook.append_page(gwindow, gtk.Label(title))
321 377
322 def switch_page(self, widget, page, page_num): 378 def switch_page(self, widget, page, page_num):
323 if self.notebook.last_page >= 0: 379 if self.notebook.get_nth_page(self.notebook.last_page) is not None:
324 hvalue = self.notebook.get_nth_page(self.notebook.last_page).get_hadjustment().get_value() 380 hadj = self.notebook.get_nth_page(self.notebook.last_page).get_hadjustment()
325 self.notebook.get_nth_page(page_num).get_hadjustment().set_value(hvalue) 381 old_value = hadj.get_value()
382 old_ofs = self.notebook.get_nth_page(self.notebook.last_page).get_graph_area().get_graph().get_origin()[0]
383 new_ofs = self.notebook.get_nth_page(page_num).get_graph_area().get_graph().get_origin()[0]
384 new_value = old_value - old_ofs + new_ofs
385 hadj.set_value(new_value)
326 386
327 self.notebook.last_page = page_num 387 self.notebook.last_page = page_num
328 388