summaryrefslogtreecommitdiff
path: root/cesar/common
diff options
context:
space:
mode:
authorNicolas Schodet2011-12-06 17:34:26 +0100
committerNicolas Schodet2011-12-20 16:04:31 +0100
commitacb46f62b792f9b6c3a71a581a952dbff97e3874 (patch)
treefd89594bb04dcf6c9c01be4e11c712e5220f6897 /cesar/common
parent66b61139c457070923732d5e415e44adfe138db5 (diff)
cesar/common/tools/traceviewer: add scroll wheel zoom
Diffstat (limited to 'cesar/common')
-rw-r--r--cesar/common/tools/traceviewer/gui.py35
1 files changed, 28 insertions, 7 deletions
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: