Fixed other files.out_*
[findit] / src / files / out_diapie.py
1 #!/usr/bin/env python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4
5 from random import random
6 from math import pi, cos, sin, sqrt
7 import os.path
8
9 #==============================================================================
10
11 class Cli_Presentation(object):
12     pass
13
14 #==============================================================================
15
16 class Gtk_Presentation(object):
17     def __init__(self, results, maxdata=10):
18         import gtk
19         import cairo; global cairo
20         import pycha.pie; global pycha
21
22         filelist, start_path = results
23
24         # `maxdata` biggest files from list
25         filelist.sort(reverse=True)
26         filelist = filelist[:maxdata]
27
28         # only byte sizes
29         self.data = [(path, [[0, bsize]]) for bsize, path, size in filelist]
30
31         # labels for pie chart
32         ticks = [dict(v=i, label=os.path.basename(d[0])) for i, d in enumerate(self.data)]
33
34         self.options = {
35             'axis': {
36                 'tickFontSize' : 11,
37                 'x': {
38                     'ticks': ticks,
39                 },
40             },
41             'background': {
42                 'baseColor': '#ffffff',
43             },
44             'padding': {
45                 'left': 10,
46                 'right': 10,
47                 'top': 10,
48                 'bottom': 10,
49             },
50             'legend': {
51                 'hide': True,
52             },
53         }
54
55         drawing = gtk.DrawingArea()
56         drawing.connect('expose-event', self.expose_event)
57
58         self.toplevel = drawing
59
60     def expose_event(self, widget, event):
61         x, y, w, h, _ = widget.window.get_geometry()
62         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
63
64         chart = pycha.pie.PieChart(surface, self.options)
65         chart.addDataset(self.data)
66         chart.render()
67
68         cr = widget.window.cairo_create()   # cairo context
69         cr.set_source_surface(surface, 0, 0)
70         cr.paint()
71
72         # outline rectangle
73         cr.set_source_rgb(0, 0, 0)
74         cr.rectangle(0, 0, w, h)
75         cr.stroke()