From acb46f62b792f9b6c3a71a581a952dbff97e3874 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 6 Dec 2011 17:34:26 +0100 Subject: cesar/common/tools/traceviewer: add scroll wheel zoom --- cesar/common/tools/traceviewer/gui.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'cesar/common') diff --git a/cesar/common/tools/traceviewer/gui.py b/cesar/common/tools/traceviewer/gui.py index 658c2ab0d4..e782de376c 100644 --- a/cesar/common/tools/traceviewer/gui.py +++ b/cesar/common/tools/traceviewer/gui.py @@ -126,7 +126,7 @@ class TracesListView (gtk.TreeView): class Gui: - def __init__ (self, zoom = 1): + def __init__ (self, zoom = 1.0): traceviewerdir = os.path.dirname (__file__) xml = gtk.glade.XML (os.path.join (traceviewerdir, 'traceviewer.glade')) @@ -138,6 +138,7 @@ class Gui: self.trace_sw = xml.get_widget ('trace_sw') self.trace_sw.add_with_viewport (self.trace_view) self.trace_view.connect ('cursor-tck', self.on_cursor_tck) + self.trace_sw.connect ('scroll-event', self.on_zoom_scroll_event) self.trace_tree_box = xml.get_widget ('trace_tree_box') self.traces_list_view = TracesListView (self.on_trace_visible_toggle) control_box = xml.get_widget ('control_box') @@ -193,24 +194,44 @@ class Gui: def show_all (self): self.window.show_all () + def zoom (self, zoom, x = None): + zoom_change = zoom / self.trace_view.zoom + adj = self.trace_sw.get_hadjustment () + if x is None: + offset = adj.page_size * 0.5 + else: + offset = x - adj.value + old_pos = adj.value + offset + self.trace_view.zoom_set (zoom) + self.update_zoom () + new_value = zoom_change * old_pos - offset + new_value = min (new_value, self.trace_view.get_size_request ()[0] + - adj.page_size) + new_value = max (0, new_value) + adj.value = new_value + + def on_zoom_scroll_event (self, button, event): + if event.direction == gtk.gdk.SCROLL_UP: + self.zoom (self.trace_view.zoom * 2, event.x) + else: + self.zoom (self.trace_view.zoom * 0.5, event.x) + return True + def on_zoom_fit_clicked (self, button): self.trace_view.zoom_fit (self.trace_sw.get_allocation ().width - 40) self.update_zoom () def on_zoom_in_clicked (self, button): - self.trace_view.zoom_set (self.trace_view.zoom * 2) - self.update_zoom () + self.zoom (self.trace_view.zoom * 2) def on_zoom_out_clicked (self, button): - self.trace_view.zoom_set (self.trace_view.zoom / 2.0) - self.update_zoom () + self.zoom (self.trace_view.zoom * 0.5) def on_center_clicked (self, button): self.center () def on_zoom_entry_activate (self, entry): - self.trace_view.zoom_set (float (self.zoom_entry.get_text ())) - self.update_zoom () + self.zoom (float (self.zoom_entry.get_text ())) def on_user_cursor_entry_change (self, entry): try: -- cgit v1.2.3