Removed internal _new_page method
[findit] / src / files / out_diabar.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 from misc import size_hum_read
10
11 #==============================================================================
12
13 class Cli_Presentation(object):
14     pass
15
16 #==============================================================================
17
18 class Gtk_Presentation(object):
19     def __init__(self, filelist, maxdata=10):
20         import gtk
21         import cairo; global cairo
22         import pycha.bar; global pycha
23
24         drawing = gtk.DrawingArea()
25         drawing.connect('expose-event', self.expose_event)
26
27         # `maxdata` biggest files from list
28         filelist.sort(reverse=True)
29         filelist = filelist[:maxdata]
30
31         # maximum size
32         maximum = max([bsize for bsize, path, size in filelist])
33
34         # only byte sizes
35         self.data = (
36             ('sizes',
37                 [(i, d[0]) for i, d in enumerate(filelist)]),
38         )
39
40         # labels for bar chart
41         ticks = [dict(v=i, label=os.path.basename(d[1])) for i, d in enumerate(filelist)]
42
43         #yticks = [dict(v=i*1000, label=`i` + 'Kb') for i in range(maximum/1000)]
44         #interval = (maximum/1024)*100
45 #         print 'maximum:', maximum
46 #         print 'interval:', interval
47
48         self.options = {
49             'axis': {
50                 'tickSize' : 0,
51                 'tickFontSize' : 11,
52                 'x': {
53                     'ticks': ticks,
54                     'tickCount': 7,
55                     'rotate': 90,
56                 },
57                 'y': {
58                     #'ticks': yticks,
59                     #'tickCount': maximum/(1000*10),
60                     'tickCount': 10,
61                     #'tickPrecision' : 0,
62                     #'interval' : interval,
63                 },
64             },
65             'background': {
66                 'chartColor': '#d8e7ec',
67                 'baseColor': '#ffffff',
68                 'lineColor': '#444444',
69                 'lineWidth ' : 1,
70             },
71             'padding': {
72                 'left': 100,
73                 'right': 20,
74                 'top': 20,
75                 'bottom': 60,
76             },
77             'legend': {
78                 'hide': True,
79             },
80             'yvals' : {
81                 'show' : True,
82                 'inside' : True,
83                 'fontColor' : '#ffffff',
84             },
85         }
86
87         self.toplevel = drawing
88
89     def expose_event(self, widget, event):
90         x, y, w, h, _ = widget.window.get_geometry()
91         surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
92
93         chart = pycha.bar.HorizontalBarChart(surface, self.options)
94         chart.addDataset(self.data)
95         chart.render()
96
97         cr = widget.window.cairo_create()   # cairo context
98         cr.set_source_surface(surface, 0, 0)
99         cr.paint()
100
101         # outline rectangle
102         cr.set_source_rgb(0, 0, 0)
103         cr.rectangle(0, 0, w, h)
104         cr.stroke()