diff options
-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): |