3 # vim: sw=4 ts=4 expandtab ai
5 from random import random
6 from math import pi, cos, sin, sqrt, ceil
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 # Calculate sizes axis range
64 multiplier = 10**(len(`maximum`) - 2)
65 interval_2 = 2*multiplier
66 interval_5 = 5*multiplier
68 ticks_2 = range(0, maximum + interval_2, interval_2)
69 ticks_5 = range(0, maximum + interval_5, interval_5)
71 ticks_count2 = len(ticks_2) - 1
72 if ticks_count2 > max_ticks:
74 ticks_range = [0, max(ticks_5)]
77 ticks_range = [0, max(ticks_2)]
79 #print multiplier, interval, ticks_range
80 #yticks = [dict(v=i*1000, label=`i` + 'Kb') for i in range(maximum/1000)]
94 'interval' : interval,
95 'range' : ticks_range,
99 'chartColor': '#d8e7ec',
100 'baseColor': '#ffffff',
101 'lineColor': '#444444',
116 'fontColor' : '#ffffff',
120 drawing = gtk.DrawingArea()
121 drawing.connect('expose-event', self.expose_event)
123 #====================
125 #====================
127 toolbar = self._create_toolbar()
129 vbox = gtk.VBox(False, 0)
130 vbox.pack_start(drawing, True, True, 0)
131 vbox.pack_start(toolbar, False, False, 0)
135 def expose_event(self, widget, event):
136 x, y, w, h, _ = widget.window.get_geometry()
137 self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
139 chart = pycha.bar.HorizontalBarChart(self.surface, self.options)
140 chart.addDataset(self.data)
143 cr = widget.window.cairo_create() # cairo context
144 cr.set_source_surface(self.surface, 0, 0)
148 cr.set_source_rgb(0, 0, 0)
149 cr.rectangle(0, 0, w, h)
152 def save_results(self, btn):
153 """Show 'Save to file' dialog."""
154 dialog = gtk.FileChooserDialog(title='Save to...',
156 buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
157 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
159 response = dialog.run()
160 if response == gtk.RESPONSE_OK:
161 filepath = dialog.get_filename()
162 if not filepath.endswith('.png'):
164 # Saving results in png file
165 self.surface.write_to_png(filepath)