diff options
Diffstat (limited to 'scripts/pybootchartgui')
| -rwxr-xr-x | scripts/pybootchartgui/pybootchartgui.py | 2 | ||||
| -rw-r--r-- | scripts/pybootchartgui/pybootchartgui/draw.py | 14 | ||||
| -rw-r--r-- | scripts/pybootchartgui/pybootchartgui/gui.py | 208 | ||||
| -rw-r--r-- | scripts/pybootchartgui/pybootchartgui/parsing.py | 12 |
4 files changed, 118 insertions, 118 deletions
diff --git a/scripts/pybootchartgui/pybootchartgui.py b/scripts/pybootchartgui/pybootchartgui.py index 7ce1a5be40..1c4062b42c 100755 --- a/scripts/pybootchartgui/pybootchartgui.py +++ b/scripts/pybootchartgui/pybootchartgui.py | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | #!/usr/bin/env python | 1 | #!/usr/bin/env python3 |
| 2 | # | 2 | # |
| 3 | # This file is part of pybootchartgui. | 3 | # This file is part of pybootchartgui. |
| 4 | 4 | ||
diff --git a/scripts/pybootchartgui/pybootchartgui/draw.py b/scripts/pybootchartgui/pybootchartgui/draw.py index 019070a7db..99b3caacc7 100644 --- a/scripts/pybootchartgui/pybootchartgui/draw.py +++ b/scripts/pybootchartgui/pybootchartgui/draw.py | |||
| @@ -19,6 +19,7 @@ import math | |||
| 19 | import re | 19 | import re |
| 20 | import random | 20 | import random |
| 21 | import colorsys | 21 | import colorsys |
| 22 | import functools | ||
| 22 | from operator import itemgetter | 23 | from operator import itemgetter |
| 23 | 24 | ||
| 24 | class RenderOptions: | 25 | class RenderOptions: |
| @@ -449,7 +450,7 @@ def render_charts(ctx, options, clip, trace, curr_y, w, h, sec_w): | |||
| 449 | [(sample.time, | 450 | [(sample.time, |
| 450 | # Sum up used space of all volumes including the current one | 451 | # Sum up used space of all volumes including the current one |
| 451 | # so that the graphs appear as stacked on top of each other. | 452 | # so that the graphs appear as stacked on top of each other. |
| 452 | reduce(lambda x,y: x+y, | 453 | functools.reduce(lambda x,y: x+y, |
| 453 | [sample.records[volume] - min_used[volume] | 454 | [sample.records[volume] - min_used[volume] |
| 454 | for volume in volumes[0:i] | 455 | for volume in volumes[0:i] |
| 455 | if volume in sample.records], | 456 | if volume in sample.records], |
| @@ -501,7 +502,7 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w): | |||
| 501 | TASK_COLOR_SYSROOT, off_x+360, curr_y + 45, leg_s) | 502 | TASK_COLOR_SYSROOT, off_x+360, curr_y + 45, leg_s) |
| 502 | draw_legend_box (ctx, "Package", \ | 503 | draw_legend_box (ctx, "Package", \ |
| 503 | TASK_COLOR_PACKAGE, off_x+480, curr_y + 45, leg_s) | 504 | TASK_COLOR_PACKAGE, off_x+480, curr_y + 45, leg_s) |
| 504 | draw_legend_box (ctx, "Package Write", | 505 | draw_legend_box (ctx, "Package Write", \ |
| 505 | TASK_COLOR_PACKAGE_WRITE, off_x+600, curr_y + 45, leg_s) | 506 | TASK_COLOR_PACKAGE_WRITE, off_x+600, curr_y + 45, leg_s) |
| 506 | 507 | ||
| 507 | ctx.set_font_size(PROC_TEXT_FONT_SIZE) | 508 | ctx.set_font_size(PROC_TEXT_FONT_SIZE) |
| @@ -518,13 +519,14 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w): | |||
| 518 | trace.processes[val][1] - s < options.app_options.mintime: | 519 | trace.processes[val][1] - s < options.app_options.mintime: |
| 519 | continue | 520 | continue |
| 520 | task = val.split(":")[1] | 521 | task = val.split(":")[1] |
| 521 | #print val | 522 | #print(val) |
| 522 | #print trace.processes[val][1] | 523 | #print(trace.processes[val][1]) |
| 523 | #print s | 524 | #print(s) |
| 525 | |||
| 524 | x = chart_rect[0] + (s - offset) * sec_w | 526 | x = chart_rect[0] + (s - offset) * sec_w |
| 525 | w = ((trace.processes[val][1] - s) * sec_w) | 527 | w = ((trace.processes[val][1] - s) * sec_w) |
| 526 | 528 | ||
| 527 | #print "proc at %s %s %s %s" % (x, y, w, proc_h) | 529 | #print("proc at %s %s %s %s" % (x, y, w, proc_h)) |
| 528 | col = None | 530 | col = None |
| 529 | if task == "do_compile": | 531 | if task == "do_compile": |
| 530 | col = TASK_COLOR_COMPILE | 532 | col = TASK_COLOR_COMPILE |
diff --git a/scripts/pybootchartgui/pybootchartgui/gui.py b/scripts/pybootchartgui/pybootchartgui/gui.py index 7fedd232df..e1fe915563 100644 --- a/scripts/pybootchartgui/pybootchartgui/gui.py +++ b/scripts/pybootchartgui/pybootchartgui/gui.py | |||
| @@ -13,64 +13,83 @@ | |||
| 13 | # You should have received a copy of the GNU General Public License | 13 | # You should have received a copy of the GNU General Public License |
| 14 | # along with pybootchartgui. If not, see <http://www.gnu.org/licenses/>. | 14 | # along with pybootchartgui. If not, see <http://www.gnu.org/licenses/>. |
| 15 | 15 | ||
| 16 | import gobject | 16 | import gi |
| 17 | import gtk | 17 | gi.require_version('Gtk', '3.0') |
| 18 | import gtk.gdk | 18 | from gi.repository import Gtk as gtk |
| 19 | import gtk.keysyms | 19 | from gi.repository import Gtk |
| 20 | from gi.repository import Gdk | ||
| 21 | from gi.repository import GObject as gobject | ||
| 22 | from gi.repository import GObject | ||
| 23 | |||
| 20 | from . import draw | 24 | from . import draw |
| 21 | from .draw import RenderOptions | 25 | from .draw import RenderOptions |
| 22 | 26 | ||
| 23 | class PyBootchartWidget(gtk.DrawingArea): | 27 | class PyBootchartWidget(gtk.DrawingArea, gtk.Scrollable): |
| 24 | __gsignals__ = { | 28 | __gsignals__ = { |
| 25 | 'expose-event': 'override', | 29 | 'clicked' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, Gdk.Event)), |
| 26 | 'clicked' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gtk.gdk.Event)), | ||
| 27 | 'position-changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_INT)), | 30 | 'position-changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_INT)), |
| 28 | 'set-scroll-adjustments' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gtk.Adjustment, gtk.Adjustment)) | 31 | 'set-scroll-adjustments' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gtk.Adjustment, gtk.Adjustment)) |
| 29 | } | 32 | } |
| 30 | 33 | ||
| 34 | hadjustment = GObject.property(type=Gtk.Adjustment, | ||
| 35 | default=Gtk.Adjustment(), | ||
| 36 | flags=GObject.PARAM_READWRITE) | ||
| 37 | hscroll_policy = GObject.property(type=Gtk.ScrollablePolicy, | ||
| 38 | default=Gtk.ScrollablePolicy.MINIMUM, | ||
| 39 | flags=GObject.PARAM_READWRITE) | ||
| 40 | vadjustment = GObject.property(type=Gtk.Adjustment, | ||
| 41 | default=Gtk.Adjustment(), | ||
| 42 | flags=GObject.PARAM_READWRITE) | ||
| 43 | vscroll_policy = GObject.property(type=Gtk.ScrollablePolicy, | ||
| 44 | default=Gtk.ScrollablePolicy.MINIMUM, | ||
| 45 | flags=GObject.PARAM_READWRITE) | ||
| 46 | |||
| 31 | def __init__(self, trace, options, xscale): | 47 | def __init__(self, trace, options, xscale): |
| 32 | gtk.DrawingArea.__init__(self) | 48 | gtk.DrawingArea.__init__(self) |
| 33 | 49 | ||
| 34 | self.trace = trace | 50 | self.trace = trace |
| 35 | self.options = options | 51 | self.options = options |
| 36 | 52 | ||
| 37 | self.set_flags(gtk.CAN_FOCUS) | 53 | self.set_can_focus(True) |
| 38 | 54 | ||
| 39 | self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK) | 55 | self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) |
| 40 | self.connect("button-press-event", self.on_area_button_press) | 56 | self.connect("button-press-event", self.on_area_button_press) |
| 41 | self.connect("button-release-event", self.on_area_button_release) | 57 | self.connect("button-release-event", self.on_area_button_release) |
| 42 | self.add_events(gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_RELEASE_MASK) | 58 | self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_HINT_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) |
| 43 | self.connect("motion-notify-event", self.on_area_motion_notify) | 59 | self.connect("motion-notify-event", self.on_area_motion_notify) |
| 44 | self.connect("scroll-event", self.on_area_scroll_event) | 60 | self.connect("scroll-event", self.on_area_scroll_event) |
| 45 | self.connect('key-press-event', self.on_key_press_event) | 61 | self.connect('key-press-event', self.on_key_press_event) |
| 46 | 62 | ||
| 47 | self.connect('set-scroll-adjustments', self.on_set_scroll_adjustments) | ||
| 48 | self.connect("size-allocate", self.on_allocation_size_changed) | 63 | self.connect("size-allocate", self.on_allocation_size_changed) |
| 49 | self.connect("position-changed", self.on_position_changed) | 64 | self.connect("position-changed", self.on_position_changed) |
| 50 | 65 | ||
| 66 | self.connect("draw", self.on_draw) | ||
| 67 | |||
| 51 | self.zoom_ratio = 1.0 | 68 | self.zoom_ratio = 1.0 |
| 52 | self.xscale = xscale | 69 | self.xscale = xscale |
| 53 | self.x, self.y = 0.0, 0.0 | 70 | self.x, self.y = 0.0, 0.0 |
| 54 | 71 | ||
| 55 | self.chart_width, self.chart_height = draw.extents(self.options, self.xscale, self.trace) | 72 | self.chart_width, self.chart_height = draw.extents(self.options, self.xscale, self.trace) |
| 56 | self.hadj = None | 73 | self.our_width, self.our_height = self.chart_width, self.chart_height |
| 57 | self.vadj = None | 74 | |
| 58 | self.hadj_changed_signal_id = None | 75 | self.hadj = gtk.Adjustment(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) |
| 59 | self.vadj_changed_signal_id = None | 76 | self.vadj = gtk.Adjustment(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) |
| 60 | 77 | self.vadj.connect('value-changed', self.on_adjustments_changed) | |
| 61 | def do_expose_event(self, event): | 78 | self.hadj.connect('value-changed', self.on_adjustments_changed) |
| 62 | cr = self.window.cairo_create() | 79 | |
| 63 | 80 | def bound_vals(self): | |
| 64 | # set a clip region for the expose event | 81 | self.x = max(0, self.x) |
| 65 | cr.rectangle( | 82 | self.y = max(0, self.y) |
| 66 | event.area.x, event.area.y, | 83 | self.x = min(self.chart_width - self.our_width, self.x) |
| 67 | event.area.width, event.area.height | 84 | self.y = min(self.chart_height - self.our_height, self.y) |
| 68 | ) | 85 | |
| 69 | cr.clip() | 86 | def on_draw(self, darea, cr): |
| 70 | self.draw(cr, self.get_allocation()) | 87 | # set a clip region |
| 71 | return False | 88 | #cr.rectangle( |
| 72 | 89 | # self.x, self.y, | |
| 73 | def draw(self, cr, rect): | 90 | # self.chart_width, self.chart_height |
| 91 | #) | ||
| 92 | #cr.clip() | ||
| 74 | cr.set_source_rgba(1.0, 1.0, 1.0, 1.0) | 93 | cr.set_source_rgba(1.0, 1.0, 1.0, 1.0) |
| 75 | cr.paint() | 94 | cr.paint() |
| 76 | cr.scale(self.zoom_ratio, self.zoom_ratio) | 95 | cr.scale(self.zoom_ratio, self.zoom_ratio) |
| @@ -84,7 +103,7 @@ class PyBootchartWidget(gtk.DrawingArea): | |||
| 84 | 103 | ||
| 85 | def zoom_image (self, zoom_ratio): | 104 | def zoom_image (self, zoom_ratio): |
| 86 | self.zoom_ratio = zoom_ratio | 105 | self.zoom_ratio = zoom_ratio |
| 87 | self._set_scroll_adjustments (self.hadj, self.vadj) | 106 | self._set_scroll_adjustments() |
| 88 | self.queue_draw() | 107 | self.queue_draw() |
| 89 | 108 | ||
| 90 | def zoom_to_rect (self, rect): | 109 | def zoom_to_rect (self, rect): |
| @@ -122,126 +141,101 @@ class PyBootchartWidget(gtk.DrawingArea): | |||
| 122 | def show_toggled(self, button): | 141 | def show_toggled(self, button): |
| 123 | self.options.app_options.show_all = button.get_property ('active') | 142 | self.options.app_options.show_all = button.get_property ('active') |
| 124 | self.chart_width, self.chart_height = draw.extents(self.options, self.xscale, self.trace) | 143 | self.chart_width, self.chart_height = draw.extents(self.options, self.xscale, self.trace) |
| 125 | self._set_scroll_adjustments(self.hadj, self.vadj) | 144 | self._set_scroll_adjustments() |
| 126 | self.queue_draw() | 145 | self.queue_draw() |
| 127 | 146 | ||
| 128 | POS_INCREMENT = 100 | 147 | POS_INCREMENT = 100 |
| 129 | 148 | ||
| 130 | def on_key_press_event(self, widget, event): | 149 | def on_key_press_event(self, widget, event): |
| 131 | if event.keyval == gtk.keysyms.Left: | 150 | if event.keyval == Gdk.keyval_from_name("Left"): |
| 132 | self.x -= self.POS_INCREMENT/self.zoom_ratio | 151 | self.x -= self.POS_INCREMENT/self.zoom_ratio |
| 133 | elif event.keyval == gtk.keysyms.Right: | 152 | elif event.keyval == Gdk.keyval_from_name("Right"): |
| 134 | self.x += self.POS_INCREMENT/self.zoom_ratio | 153 | self.x += self.POS_INCREMENT/self.zoom_ratio |
| 135 | elif event.keyval == gtk.keysyms.Up: | 154 | elif event.keyval == Gdk.keyval_from_name("Up"): |
| 136 | self.y -= self.POS_INCREMENT/self.zoom_ratio | 155 | self.y -= self.POS_INCREMENT/self.zoom_ratio |
| 137 | elif event.keyval == gtk.keysyms.Down: | 156 | elif event.keyval == Gdk.keyval_from_name("Down"): |
| 138 | self.y += self.POS_INCREMENT/self.zoom_ratio | 157 | self.y += self.POS_INCREMENT/self.zoom_ratio |
| 139 | else: | 158 | else: |
| 140 | return False | 159 | return False |
| 160 | self.bound_vals() | ||
| 141 | self.queue_draw() | 161 | self.queue_draw() |
| 142 | self.position_changed() | 162 | self.position_changed() |
| 143 | return True | 163 | return True |
| 144 | 164 | ||
| 145 | def on_area_button_press(self, area, event): | 165 | def on_area_button_press(self, area, event): |
| 146 | if event.button == 2 or event.button == 1: | 166 | if event.button == 2 or event.button == 1: |
| 147 | area.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR)) | 167 | window = self.get_window() |
| 168 | window.set_cursor(Gdk.Cursor(Gdk.CursorType.FLEUR)) | ||
| 148 | self.prevmousex = event.x | 169 | self.prevmousex = event.x |
| 149 | self.prevmousey = event.y | 170 | self.prevmousey = event.y |
| 150 | if event.type not in (gtk.gdk.BUTTON_PRESS, gtk.gdk.BUTTON_RELEASE): | 171 | if event.type not in (Gdk.EventType.BUTTON_PRESS, Gdk.EventType.BUTTON_RELEASE): |
| 151 | return False | 172 | return False |
| 152 | return False | 173 | return False |
| 153 | 174 | ||
| 154 | def on_area_button_release(self, area, event): | 175 | def on_area_button_release(self, area, event): |
| 155 | if event.button == 2 or event.button == 1: | 176 | if event.button == 2 or event.button == 1: |
| 156 | area.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW)) | 177 | window = self.get_window() |
| 178 | window.set_cursor(Gdk.Cursor(Gdk.CursorType.ARROW)) | ||
| 157 | self.prevmousex = None | 179 | self.prevmousex = None |
| 158 | self.prevmousey = None | 180 | self.prevmousey = None |
| 159 | return True | 181 | return True |
| 160 | return False | 182 | return False |
| 161 | 183 | ||
| 162 | def on_area_scroll_event(self, area, event): | 184 | def on_area_scroll_event(self, area, event): |
| 163 | if event.state & gtk.gdk.CONTROL_MASK: | 185 | if event.state & Gdk.CONTROL_MASK: |
| 164 | if event.direction == gtk.gdk.SCROLL_UP: | 186 | if event.direction == Gdk.SCROLL_UP: |
| 165 | self.zoom_image(self.zoom_ratio * self.ZOOM_INCREMENT) | 187 | self.zoom_image(self.zoom_ratio * self.ZOOM_INCREMENT) |
| 166 | return True | 188 | return True |
| 167 | if event.direction == gtk.gdk.SCROLL_DOWN: | 189 | if event.direction == Gdk.SCROLL_DOWN: |
| 168 | self.zoom_image(self.zoom_ratio / self.ZOOM_INCREMENT) | 190 | self.zoom_image(self.zoom_ratio / self.ZOOM_INCREMENT) |
| 169 | return True | 191 | return True |
| 170 | return False | 192 | return False |
| 171 | 193 | ||
| 172 | def on_area_motion_notify(self, area, event): | 194 | def on_area_motion_notify(self, area, event): |
| 173 | state = event.state | 195 | state = event.state |
| 174 | if state & gtk.gdk.BUTTON2_MASK or state & gtk.gdk.BUTTON1_MASK: | 196 | if state & Gdk.ModifierType.BUTTON2_MASK or state & Gdk.ModifierType.BUTTON1_MASK: |
| 175 | x, y = int(event.x), int(event.y) | 197 | x, y = int(event.x), int(event.y) |
| 176 | # pan the image | 198 | # pan the image |
| 177 | self.x += (self.prevmousex - x)/self.zoom_ratio | 199 | self.x += (self.prevmousex - x)/self.zoom_ratio |
| 178 | self.y += (self.prevmousey - y)/self.zoom_ratio | 200 | self.y += (self.prevmousey - y)/self.zoom_ratio |
| 201 | self.bound_vals() | ||
| 179 | self.queue_draw() | 202 | self.queue_draw() |
| 180 | self.prevmousex = x | 203 | self.prevmousex = x |
| 181 | self.prevmousey = y | 204 | self.prevmousey = y |
| 182 | self.position_changed() | 205 | self.position_changed() |
| 183 | return True | 206 | return True |
| 184 | 207 | ||
| 185 | def on_set_scroll_adjustments(self, area, hadj, vadj): | ||
| 186 | self._set_scroll_adjustments (hadj, vadj) | ||
| 187 | |||
| 188 | def on_allocation_size_changed(self, widget, allocation): | 208 | def on_allocation_size_changed(self, widget, allocation): |
| 189 | self.hadj.page_size = allocation.width | 209 | self.hadj.page_size = allocation.width |
| 190 | self.hadj.page_increment = allocation.width * 0.9 | 210 | self.hadj.page_increment = allocation.width * 0.9 |
| 191 | self.vadj.page_size = allocation.height | 211 | self.vadj.page_size = allocation.height |
| 192 | self.vadj.page_increment = allocation.height * 0.9 | 212 | self.vadj.page_increment = allocation.height * 0.9 |
| 213 | self.our_width = allocation.width | ||
| 214 | if self.chart_width < self.our_width: | ||
| 215 | self.our_width = self.chart_width | ||
| 216 | self.our_height = allocation.height | ||
| 217 | if self.chart_height < self.our_height: | ||
| 218 | self.our_height = self.chart_height | ||
| 219 | self._set_scroll_adjustments() | ||
| 193 | 220 | ||
| 194 | def _set_adj_upper(self, adj, upper): | 221 | def _set_adj_upper(self, adj, upper): |
| 195 | changed = False | 222 | |
| 196 | value_changed = False | 223 | if adj.get_upper() != upper: |
| 197 | 224 | adj.set_upper(upper) | |
| 198 | if adj.upper != upper: | 225 | |
| 199 | adj.upper = upper | 226 | def _set_scroll_adjustments(self): |
| 200 | changed = True | 227 | self._set_adj_upper (self.hadj, self.zoom_ratio * (self.chart_width - self.our_width)) |
| 201 | 228 | self._set_adj_upper (self.vadj, self.zoom_ratio * (self.chart_height - self.our_height)) | |
| 202 | max_value = max(0.0, upper - adj.page_size) | ||
| 203 | if adj.value > max_value: | ||
| 204 | adj.value = max_value | ||
| 205 | value_changed = True | ||
| 206 | |||
| 207 | if changed: | ||
| 208 | adj.changed() | ||
| 209 | if value_changed: | ||
| 210 | adj.value_changed() | ||
| 211 | |||
| 212 | def _set_scroll_adjustments(self, hadj, vadj): | ||
| 213 | if hadj == None: | ||
| 214 | hadj = gtk.Adjustment(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) | ||
| 215 | if vadj == None: | ||
| 216 | vadj = gtk.Adjustment(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) | ||
| 217 | |||
| 218 | if self.hadj_changed_signal_id != None and \ | ||
| 219 | self.hadj != None and hadj != self.hadj: | ||
| 220 | self.hadj.disconnect (self.hadj_changed_signal_id) | ||
| 221 | if self.vadj_changed_signal_id != None and \ | ||
| 222 | self.vadj != None and vadj != self.vadj: | ||
| 223 | self.vadj.disconnect (self.vadj_changed_signal_id) | ||
| 224 | |||
| 225 | if hadj != None: | ||
| 226 | self.hadj = hadj | ||
| 227 | self._set_adj_upper (self.hadj, self.zoom_ratio * self.chart_width) | ||
| 228 | self.hadj_changed_signal_id = self.hadj.connect('value-changed', self.on_adjustments_changed) | ||
| 229 | |||
| 230 | if vadj != None: | ||
| 231 | self.vadj = vadj | ||
| 232 | self._set_adj_upper (self.vadj, self.zoom_ratio * self.chart_height) | ||
| 233 | self.vadj_changed_signal_id = self.vadj.connect('value-changed', self.on_adjustments_changed) | ||
| 234 | 229 | ||
| 235 | def on_adjustments_changed(self, adj): | 230 | def on_adjustments_changed(self, adj): |
| 236 | self.x = self.hadj.value / self.zoom_ratio | 231 | self.x = self.hadj.get_value() / self.zoom_ratio |
| 237 | self.y = self.vadj.value / self.zoom_ratio | 232 | self.y = self.vadj.get_value() / self.zoom_ratio |
| 238 | self.queue_draw() | 233 | self.queue_draw() |
| 239 | 234 | ||
| 240 | def on_position_changed(self, widget, x, y): | 235 | def on_position_changed(self, widget, x, y): |
| 241 | self.hadj.value = x * self.zoom_ratio | 236 | self.hadj.set_value(x * self.zoom_ratio) |
| 242 | self.vadj.value = y * self.zoom_ratio | 237 | #self.hadj.value_changed() |
| 243 | 238 | self.vadj.set_value(y * self.zoom_ratio) | |
| 244 | PyBootchartWidget.set_set_scroll_adjustments_signal('set-scroll-adjustments') | ||
| 245 | 239 | ||
| 246 | class PyBootchartShell(gtk.VBox): | 240 | class PyBootchartShell(gtk.VBox): |
| 247 | ui = ''' | 241 | ui = ''' |
| @@ -260,7 +254,7 @@ class PyBootchartShell(gtk.VBox): | |||
| 260 | def __init__(self, window, trace, options, xscale): | 254 | def __init__(self, window, trace, options, xscale): |
| 261 | gtk.VBox.__init__(self) | 255 | gtk.VBox.__init__(self) |
| 262 | 256 | ||
| 263 | self.widget = PyBootchartWidget(trace, options, xscale) | 257 | self.widget2 = PyBootchartWidget(trace, options, xscale) |
| 264 | 258 | ||
| 265 | # Create a UIManager instance | 259 | # Create a UIManager instance |
| 266 | uimanager = self.uimanager = gtk.UIManager() | 260 | uimanager = self.uimanager = gtk.UIManager() |
| @@ -275,12 +269,12 @@ class PyBootchartShell(gtk.VBox): | |||
| 275 | 269 | ||
| 276 | # Create actions | 270 | # Create actions |
| 277 | actiongroup.add_actions(( | 271 | actiongroup.add_actions(( |
| 278 | ('Expand', gtk.STOCK_ADD, None, None, None, self.widget.on_expand), | 272 | ('Expand', gtk.STOCK_ADD, None, None, None, self.widget2.on_expand), |
| 279 | ('Contract', gtk.STOCK_REMOVE, None, None, None, self.widget.on_contract), | 273 | ('Contract', gtk.STOCK_REMOVE, None, None, None, self.widget2.on_contract), |
| 280 | ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, None, self.widget.on_zoom_in), | 274 | ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, None, self.widget2.on_zoom_in), |
| 281 | ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, None, self.widget.on_zoom_out), | 275 | ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, None, self.widget2.on_zoom_out), |
| 282 | ('ZoomFit', gtk.STOCK_ZOOM_FIT, 'Fit Width', None, None, self.widget.on_zoom_fit), | 276 | ('ZoomFit', gtk.STOCK_ZOOM_FIT, 'Fit Width', None, None, self.widget2.on_zoom_fit), |
| 283 | ('Zoom100', gtk.STOCK_ZOOM_100, None, None, None, self.widget.on_zoom_100), | 277 | ('Zoom100', gtk.STOCK_ZOOM_100, None, None, None, self.widget2.on_zoom_100), |
| 284 | )) | 278 | )) |
| 285 | 279 | ||
| 286 | # Add the actiongroup to the uimanager | 280 | # Add the actiongroup to the uimanager |
| @@ -290,29 +284,33 @@ class PyBootchartShell(gtk.VBox): | |||
| 290 | uimanager.add_ui_from_string(self.ui) | 284 | uimanager.add_ui_from_string(self.ui) |
| 291 | 285 | ||
| 292 | # Scrolled window | 286 | # Scrolled window |
| 293 | scrolled = gtk.ScrolledWindow() | 287 | scrolled = gtk.ScrolledWindow(self.widget2.hadj, self.widget2.vadj) |
| 294 | scrolled.add(self.widget) | 288 | scrolled.add(self.widget2) |
| 289 | |||
| 290 | #scrolled.set_hadjustment() | ||
| 291 | #scrolled.set_vadjustment(self.widget2.vadj) | ||
| 292 | scrolled.set_policy(gtk.PolicyType.ALWAYS, gtk.PolicyType.ALWAYS) | ||
| 295 | 293 | ||
| 296 | # toolbar / h-box | 294 | # toolbar / h-box |
| 297 | hbox = gtk.HBox(False, 8) | 295 | hbox = gtk.HBox(False, 8) |
| 298 | 296 | ||
| 299 | # Create a Toolbar | 297 | # Create a Toolbar |
| 300 | toolbar = uimanager.get_widget('/ToolBar') | 298 | toolbar = uimanager.get_widget('/ToolBar') |
| 301 | hbox.pack_start(toolbar, True, True) | 299 | hbox.pack_start(toolbar, True, True, 0) |
| 302 | 300 | ||
| 303 | if not options.kernel_only: | 301 | if not options.kernel_only: |
| 304 | # Misc. options | 302 | # Misc. options |
| 305 | button = gtk.CheckButton("Show more") | 303 | button = gtk.CheckButton("Show more") |
| 306 | button.connect ('toggled', self.widget.show_toggled) | 304 | button.connect ('toggled', self.widget2.show_toggled) |
| 307 | button.set_active(options.app_options.show_all) | 305 | button.set_active(options.app_options.show_all) |
| 308 | hbox.pack_start (button, False, True) | 306 | hbox.pack_start (button, False, True, 0) |
| 309 | 307 | ||
| 310 | self.pack_start(hbox, False) | 308 | self.pack_start(hbox, False, True, 0) |
| 311 | self.pack_start(scrolled) | 309 | self.pack_start(scrolled, True, True, 0) |
| 312 | self.show_all() | 310 | self.show_all() |
| 313 | 311 | ||
| 314 | def grab_focus(self, window): | 312 | def grab_focus(self, window): |
| 315 | window.set_focus(self.widget) | 313 | window.set_focus(self.widget2) |
| 316 | 314 | ||
| 317 | 315 | ||
| 318 | class PyBootchartWindow(gtk.Window): | 316 | class PyBootchartWindow(gtk.Window): |
diff --git a/scripts/pybootchartgui/pybootchartgui/parsing.py b/scripts/pybootchartgui/pybootchartgui/parsing.py index bcfb2da569..ef2d3d309c 100644 --- a/scripts/pybootchartgui/pybootchartgui/parsing.py +++ b/scripts/pybootchartgui/pybootchartgui/parsing.py | |||
| @@ -267,7 +267,7 @@ def _parse_headers(file): | |||
| 267 | value = line.strip() | 267 | value = line.strip() |
| 268 | headers[last] += value | 268 | headers[last] += value |
| 269 | return headers, last | 269 | return headers, last |
| 270 | return reduce(parse, file.read().decode('utf-8').split('\n'), (defaultdict(str),''))[0] | 270 | return reduce(parse, file.read().split('\n'), (defaultdict(str),''))[0] |
| 271 | 271 | ||
| 272 | def _parse_timed_blocks(file): | 272 | def _parse_timed_blocks(file): |
| 273 | """Parses (ie., splits) a file into so-called timed-blocks. A | 273 | """Parses (ie., splits) a file into so-called timed-blocks. A |
| @@ -281,7 +281,7 @@ def _parse_timed_blocks(file): | |||
| 281 | return (int(lines[0]), lines[1:]) | 281 | return (int(lines[0]), lines[1:]) |
| 282 | except ValueError: | 282 | except ValueError: |
| 283 | raise ParseError("expected a timed-block, but timestamp '%s' is not an integer" % lines[0]) | 283 | raise ParseError("expected a timed-block, but timestamp '%s' is not an integer" % lines[0]) |
| 284 | blocks = file.read().decode('utf-8').split('\n\n') | 284 | blocks = file.read().split('\n\n') |
| 285 | return [parse(block) for block in blocks if block.strip() and not block.endswith(' not running\n')] | 285 | return [parse(block) for block in blocks if block.strip() and not block.endswith(' not running\n')] |
| 286 | 286 | ||
| 287 | def _parse_proc_ps_log(writer, file): | 287 | def _parse_proc_ps_log(writer, file): |
| @@ -577,7 +577,7 @@ def _parse_dmesg(writer, file): | |||
| 577 | processMap['k-boot'] = kernel | 577 | processMap['k-boot'] = kernel |
| 578 | base_ts = False | 578 | base_ts = False |
| 579 | max_ts = 0 | 579 | max_ts = 0 |
| 580 | for line in file.read().decode('utf-8').split('\n'): | 580 | for line in file.read().split('\n'): |
| 581 | t = timestamp_re.match (line) | 581 | t = timestamp_re.match (line) |
| 582 | if t is None: | 582 | if t is None: |
| 583 | # print "duff timestamp " + line | 583 | # print "duff timestamp " + line |
| @@ -665,7 +665,7 @@ def _parse_pacct(writer, file): | |||
| 665 | def _parse_paternity_log(writer, file): | 665 | def _parse_paternity_log(writer, file): |
| 666 | parent_map = {} | 666 | parent_map = {} |
| 667 | parent_map[0] = 0 | 667 | parent_map[0] = 0 |
| 668 | for line in file.read().decode('utf-8').split('\n'): | 668 | for line in file.read().split('\n'): |
| 669 | if not line: | 669 | if not line: |
| 670 | continue | 670 | continue |
| 671 | elems = line.split(' ') # <Child> <Parent> | 671 | elems = line.split(' ') # <Child> <Parent> |
| @@ -678,7 +678,7 @@ def _parse_paternity_log(writer, file): | |||
| 678 | 678 | ||
| 679 | def _parse_cmdline_log(writer, file): | 679 | def _parse_cmdline_log(writer, file): |
| 680 | cmdLines = {} | 680 | cmdLines = {} |
| 681 | for block in file.read().decode('utf-8').split('\n\n'): | 681 | for block in file.read().split('\n\n'): |
| 682 | lines = block.split('\n') | 682 | lines = block.split('\n') |
| 683 | if len (lines) >= 3: | 683 | if len (lines) >= 3: |
| 684 | # print "Lines '%s'" % (lines[0]) | 684 | # print "Lines '%s'" % (lines[0]) |
| @@ -751,7 +751,7 @@ def parse_file(writer, state, filename): | |||
| 751 | if state.filename is None: | 751 | if state.filename is None: |
| 752 | state.filename = filename | 752 | state.filename = filename |
| 753 | basename = os.path.basename(filename) | 753 | basename = os.path.basename(filename) |
| 754 | with open(filename, "rb") as file: | 754 | with open(filename, "r") as file: |
| 755 | return _do_parse(writer, state, filename, file) | 755 | return _do_parse(writer, state, filename, file) |
| 756 | 756 | ||
| 757 | def parse_paths(writer, state, paths): | 757 | def parse_paths(writer, state, paths): |
