3 # vim: sw=4 ts=4 expandtab ai
5 from random import random
6 from math import pi, cos, sin, sqrt
9 from misc import size_hum_read
11 #==============================================================================
13 class Cli_Presentation(object):
16 #==============================================================================
18 class Gtk_Presentation(object):
20 def _create_toolbar(self):
21 toolbar = gtk.Toolbar()
22 toolbar.set_property('icon-size', 'small-toolbar')
24 saveresults_tbtn = gtk.ToolButton('gtk-save')
25 saveresults_tbtn.connect('clicked', self.save_results)
27 toolbar.insert(saveresults_tbtn, -1)
31 def __init__(self, results, maxdata=10):
33 global gtk # for _create_toolbar()
35 global cairo # for expose_event()
37 global pycha # for expose_event()
39 filelist, start_path = results
41 # `maxdata` biggest files from list
42 filelist.sort(reverse=True)
43 filelist = filelist[:maxdata]
46 maximum = max([bsize for bsize, path, size in filelist])
55 [(i, d[0]) for i, d in enumerate(filelist)]),
58 # labels for bar chart
59 ticks = [dict(v=i, label=os.path.basename(d[1])) for i, d in enumerate(filelist)]
61 #yticks = [dict(v=i*1000, label=`i` + 'Kb') for i in range(maximum/1000)]
62 #interval = (maximum/1024)*100
63 # print 'maximum:', maximum
64 # print 'interval:', interval
77 #'tickCount': maximum/(1000*10),
80 #'interval' : interval,
84 'chartColor': '#d8e7ec',
85 'baseColor': '#ffffff',
86 'lineColor': '#444444',
101 'fontColor' : '#ffffff',
105 drawing = gtk.DrawingArea()
106 drawing.connect('expose-event', self.expose_event)
108 #====================
110 #====================
112 toolbar = self._create_toolbar()
114 vbox = gtk.VBox(False, 0)
115 vbox.pack_start(drawing, True, True, 0)
116 vbox.pack_start(toolbar, False, False, 0)
120 def expose_event(self, widget, event):
121 x, y, w, h, _ = widget.window.get_geometry()
122 self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
124 chart = pycha.bar.HorizontalBarChart(self.surface, self.options)
125 chart.addDataset(self.data)
128 cr = widget.window.cairo_create() # cairo context
129 cr.set_source_surface(self.surface, 0, 0)
133 cr.set_source_rgb(0, 0, 0)
134 cr.rectangle(0, 0, w, h)
137 def save_results(self, btn):
138 """Show 'Save to file' dialog."""
139 dialog = gtk.FileChooserDialog(title='Save to...',
141 buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
142 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
144 response = dialog.run()
145 if response == gtk.RESPONSE_OK:
146 filepath = dialog.get_filename()
147 if not filepath.endswith('.png'):
149 # Saving results in png file
150 self.surface.write_to_png(filepath)