#==============================================================================
class Gtk_Presentation(object):
+
+ def _create_toolbar(self):
+ toolbar = gtk.Toolbar()
+ toolbar.set_property('icon-size', 'small-toolbar')
+
+ saveresults_tbtn = gtk.ToolButton('gtk-save')
+ saveresults_tbtn.connect('clicked', self.save_results)
+
+ toolbar.insert(saveresults_tbtn, -1)
+
+ return toolbar
+
def __init__(self, results, maxdata=10):
import gtk
- import cairo; global cairo
- import pycha.bar; global pycha
+ global gtk # for _create_toolbar()
+ import cairo
+ global cairo # for expose_event()
+ import pycha.bar
+ global pycha # for expose_event()
filelist, start_path = results
# maximum size
maximum = max([bsize for bsize, path, size in filelist])
+ #====================
+ # Diagram
+ #====================
+
# only byte sizes
self.data = (
('sizes',
drawing = gtk.DrawingArea()
drawing.connect('expose-event', self.expose_event)
- self.toplevel = drawing
+ #====================
+ # Packing
+ #====================
+
+ toolbar = self._create_toolbar()
+
+ vbox = gtk.VBox(False, 0)
+ vbox.pack_start(drawing, True, True, 0)
+ vbox.pack_start(toolbar, False, False, 0)
+
+ self.toplevel = vbox
def expose_event(self, widget, event):
x, y, w, h, _ = widget.window.get_geometry()
- surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
+ self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
- chart = pycha.bar.HorizontalBarChart(surface, self.options)
+ chart = pycha.bar.HorizontalBarChart(self.surface, self.options)
chart.addDataset(self.data)
chart.render()
cr = widget.window.cairo_create() # cairo context
- cr.set_source_surface(surface, 0, 0)
+ cr.set_source_surface(self.surface, 0, 0)
cr.paint()
# outline rectangle
cr.set_source_rgb(0, 0, 0)
cr.rectangle(0, 0, w, h)
cr.stroke()
+
+ def save_results(self, btn):
+ """Show 'Save to file' dialog."""
+ dialog = gtk.FileChooserDialog(title='Save to...',
+ action='save',
+ buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
+ gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ filepath = dialog.get_filename()
+ if not filepath.endswith('.png'):
+ filepath += '.png'
+ # Saving results in png file
+ self.surface.write_to_png(filepath)
+ dialog.destroy()
#==============================================================================
class Gtk_Presentation(object):
+
+ def _create_toolbar(self):
+ toolbar = gtk.Toolbar()
+ toolbar.set_property('icon-size', 'small-toolbar')
+
+ saveresults_tbtn = gtk.ToolButton('gtk-save')
+ saveresults_tbtn.connect('clicked', self.save_results)
+
+ toolbar.insert(saveresults_tbtn, -1)
+
+ return toolbar
+
def __init__(self, results, maxdata=10):
import gtk
- import cairo; global cairo
- import pycha.pie; global pycha
+ global gtk # for _create_toolbar()
+ import cairo
+ global cairo # for expose_event()
+ import pycha.pie
+ global pycha # for expose_event()
filelist, start_path = results
filelist.sort(reverse=True)
filelist = filelist[:maxdata]
+ #====================
+ # Diagram
+ #====================
+
# only byte sizes
self.data = [(path, [[0, bsize]]) for bsize, path, size in filelist]
drawing = gtk.DrawingArea()
drawing.connect('expose-event', self.expose_event)
- self.toplevel = drawing
+ #====================
+ # Packing
+ #====================
+
+ toolbar = self._create_toolbar()
+
+ vbox = gtk.VBox(False, 0)
+ vbox.pack_start(drawing, True, True, 0)
+ vbox.pack_start(toolbar, False, False, 0)
+
+ self.toplevel = vbox
def expose_event(self, widget, event):
x, y, w, h, _ = widget.window.get_geometry()
- surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
+ self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
- chart = pycha.pie.PieChart(surface, self.options)
+ chart = pycha.pie.PieChart(self.surface, self.options)
chart.addDataset(self.data)
chart.render()
cr = widget.window.cairo_create() # cairo context
- cr.set_source_surface(surface, 0, 0)
+ cr.set_source_surface(self.surface, 0, 0)
cr.paint()
# outline rectangle
cr.set_source_rgb(0, 0, 0)
cr.rectangle(0, 0, w, h)
cr.stroke()
+
+ def save_results(self, btn):
+ """Show 'Save to file' dialog."""
+ dialog = gtk.FileChooserDialog(title='Save to...',
+ action='save',
+ buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
+ gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ filepath = dialog.get_filename()
+ if not filepath.endswith('.png'):
+ filepath += '.png'
+ # Saving results in png file
+ self.surface.write_to_png(filepath)
+ dialog.destroy()