diff options
Diffstat (limited to 'viz/viewer.py')
-rw-r--r-- | viz/viewer.py | 68 |
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 | ||
27 | class GraphArea(gtk.DrawingArea): | 27 | class 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 | ||