Try to use PyCha chart library
authorEugene Gagarin <mosfet07@ya.ru>
Mon, 4 May 2009 14:03:26 +0000 (18:03 +0400)
committerEugene Gagarin <mosfet07@ya.ru>
Mon, 4 May 2009 14:03:26 +0000 (18:03 +0400)
src/config.py
src/files/out_diabar.py [new file with mode: 0755]
src/files/out_diaold.py [new file with mode: 0755]
src/files/out_diapie.py [new file with mode: 0755]
src/files/out_table.py [new file with mode: 0755]
src/files/outdiagram.py [deleted file]
src/files/outtable.py [deleted file]
src/files/search.py

index ffd81c3..9e78a33 100755 (executable)
@@ -9,7 +9,7 @@
 Config = {}
 
 Config['search'] = 'files'
-Config['outtype'] = 'outtable'
+Config['outtype'] = 'out_table'
 
 # files
 Config['ignore_dirs'] = ['/dev', '/proc', '/sys', '/mnt']
diff --git a/src/files/out_diabar.py b/src/files/out_diabar.py
new file mode 100755 (executable)
index 0000000..e83d3ed
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# -*-coding: utf-8 -*-
+# vim: sw=4 ts=4 expandtab ai
+
+from random import random
+from math import pi, cos, sin, sqrt
+import os.path
+
+#==============================================================================
+
+class Cli_Presentation(object):
+    pass
+
+#==============================================================================
+
+class Gtk_Presentation(object):
+    def __init__(self, filelist, maxdata=10):
+        import gtk
+        import cairo; global cairo
+        import pycha.bar; global pycha
+
+        drawing = gtk.DrawingArea()
+        drawing.connect('expose-event', self.expose_event)
+
+        # `maxdata` biggest files from list
+        filelist.sort(reverse=True)
+        filelist = filelist[:maxdata]
+
+        # only byte sizes
+        self.data = (
+            ('sizes',
+                [(i, d[0]) for i, d in enumerate(filelist)]),
+        )
+
+        # labels for bar chart
+        ticks = [dict(v=i, label=os.path.basename(d[1])) for i, d in enumerate(filelist)]
+
+        self.options = {
+            'axis': {
+                'x': {
+                    'ticks': ticks,
+                    'tickCount': 7,
+                    'rotate': 90,
+                },
+                'y': {
+                    'tickCount': 5,
+                    'tickPrecision' : 0,
+                },
+            },
+            'background': {
+                'chartColor': '#d8e7ec',
+                'baseColor': '#efebe7',
+                'lineColor': '#444444'
+#                'hide': True,
+            },
+            'padding': {
+                'left': 40,
+                'right': 10,
+                'top': 20,
+                'bottom': 60,
+            },
+            'legend': {
+                'hide': True,
+            },
+        }
+
+        self.toplevel = drawing
+
+    def expose_event(self, widget, event):
+        x, y, w, h, _ = widget.window.get_geometry()
+        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
+
+        cr = widget.window.cairo_create()   # cairo context
+        cr.set_source_surface(surface, 0, 0)
+
+        chart = pycha.bar.VerticalBarChart(surface, self.options)
+        chart.addDataset(self.data)
+        chart.render()
+
+        cr.paint()
diff --git a/src/files/out_diaold.py b/src/files/out_diaold.py
new file mode 100755 (executable)
index 0000000..2356bbd
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+# -*-coding: utf-8 -*-
+# vim: sw=4 ts=4 expandtab ai
+
+from random import random
+from math import pi, cos, sin, sqrt
+import os.path
+
+#==============================================================================
+
+class Cli_Presentation(object):
+    pass
+
+#==============================================================================
+
+class Gtk_Presentation(object):
+    def __init__(self, filelist, maxdata=10):
+        import gtk
+        import cairo
+
+        drawing = gtk.DrawingArea()
+
+        # `maxdata` biggest files from list
+        filelist.sort(reverse=True)
+        del filelist[maxdata:]
+        self.filelist = filelist
+
+        # sum of sizes
+        fullsize = sum((f[0] for f in filelist))
+
+        # sectors list
+        sectors = []
+        start_angle = 0
+        for bsize, name, size in filelist:
+            delta_angle = (float(bsize)/fullsize)*2*pi
+            end_angle = start_angle + delta_angle
+            color = self.rand_color()
+            sectors.append((start_angle, end_angle, color))
+            start_angle += delta_angle
+
+        drawing.connect('expose-event', self.expose_event, sectors)
+
+        self.toplevel = drawing
+
+    def expose_event(self, widget, event, sectors):
+        x, y, w, h, _ = widget.window.get_geometry()
+        R = min(w-w/3, h)/2 - 10
+
+        cr = widget.window.cairo_create()   # cairo context
+        cr.rectangle(0, 0, w, h)
+        cr.set_source_rgb(1, 1, 1)
+        cr.fill()
+        cr.set_source_rgb(0, 0, 0)
+        cr.rectangle(0, 0, w, h)
+        cr.stroke()
+
+        cr.translate(w/2-w/6, h/2)          # moving coordinates
+
+        # drawing pie chart
+        for i, (start_angle, end_angle, color) in enumerate(sectors):
+            # drawing sector
+            cr.move_to(0, 0)
+            cr.set_source_rgb(*color)
+            cr.arc(0, 0, R, start_angle, end_angle)
+            cr.fill()
+
+            # to cartesian coordinates
+            delta_angle = end_angle - start_angle
+            x = R/1.7 * cos(start_angle+delta_angle/2)
+            y = R/1.7 * sin(start_angle+delta_angle/2)
+            area = 0.5*(delta_angle*R**2)   # sector area
+
+            # drawing text
+            cr.set_font_size(sqrt(area)/2)  # text size
+            text = str(i+1)                 # text string
+            xbearing, ybearing, textw, texth = cr.text_extents(text)[:4]
+            cr.move_to(x-(xbearing+textw/2), y-(ybearing+texth/2))  # text center
+            cr.set_source_rgb(.3, .3, .3)   # text color
+            cr.show_text(text)
+
+        cr.set_font_size(14)
+        cr.translate(R+40, -h/2+40)  # moving coordinates
+        cr.move_to(0, 0)
+
+        # drawing files list
+        for i, (bsize, name, size) in enumerate(self.filelist):
+            color = sectors[i][2]
+            cr.set_source_rgb(*color)
+            cr.rectangle(-20, 20*i+3, 14, -14)
+            cr.fill()
+
+            text = str(i+1) + '. ' + os.path.basename(name) + ' (' + str(size) + ')'
+            cr.move_to(0, 20*i)
+            cr.set_source_rgb(0, 0, 0)
+            cr.show_text(text)
+
+    def rand_color(self):
+        return random(), random(), random()
diff --git a/src/files/out_diapie.py b/src/files/out_diapie.py
new file mode 100755 (executable)
index 0000000..5ca8666
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+# -*-coding: utf-8 -*-
+# vim: sw=4 ts=4 expandtab ai
+
+from random import random
+from math import pi, cos, sin, sqrt
+import os.path
+
+#==============================================================================
+
+class Cli_Presentation(object):
+    pass
+
+#==============================================================================
+
+class Gtk_Presentation(object):
+    def __init__(self, filelist, maxdata=10):
+        import gtk
+        import cairo; global cairo
+        import pycha.pie; global pycha
+
+        drawing = gtk.DrawingArea()
+        drawing.connect('expose-event', self.expose_event)
+
+        # `maxdata` biggest files from list
+        filelist.sort(reverse=True)
+        filelist = filelist[:maxdata]
+
+        # only byte sizes
+        self.data = [(path, [[0, bsize]]) for bsize, path, size in filelist]
+
+        # labels for pie chart
+        ticks = [dict(v=i, label=os.path.basename(d[0])) for i, d in enumerate(self.data)]
+
+        self.options = {
+            'axis': {
+                'x': {
+                    'ticks': ticks,
+                }
+            },
+            'background': {
+                'hide': True,
+            },
+            'padding': {
+                'left': 10,
+                'right': 10,
+                'top': 10,
+                'bottom': 10,
+            },
+            'legend': {
+                'hide': True,
+            }
+        }
+
+        self.toplevel = drawing
+
+    def expose_event(self, widget, event):
+        x, y, w, h, _ = widget.window.get_geometry()
+        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
+
+        cr = widget.window.cairo_create()   # cairo context
+
+        cr.rectangle(0, 0, w, h)
+        cr.set_source_rgb(1, 1, 1)
+        cr.fill()
+        cr.set_source_rgb(0, 0, 0)
+        cr.rectangle(0, 0, w, h)
+        cr.stroke()
+
+        cr.set_source_surface(surface, 0, 0)
+
+        chart = pycha.pie.PieChart(surface, self.options)
+        chart.addDataset(self.data)
+        chart.render()
+
+        cr.paint()
diff --git a/src/files/out_table.py b/src/files/out_table.py
new file mode 100755 (executable)
index 0000000..b7219dc
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+# -*-coding: utf-8 -*-
+# vim: sw=4 ts=4 expandtab ai
+
+from misc import _
+
+#==============================================================================
+
+# class OutTable_Control(object):
+#     def __init__(self):
+#         self.table_present = Gtk_Presentation()
+# 
+#     def show(self, filelist, flsize):
+#         self.table_present.show_result(filelist, flsize)
+# 
+#     def get_ui(self):
+#         return self.table_present.get_toplevel()
+# 
+# 
+# #==============================================================================
+# 
+# class OutTable_Abstraction(object):
+#     pass
+
+#==============================================================================
+
+class Cli_Presentation(object):
+    def __init__(self, filelist):   ###
+        self.toplevel = self.print_results(filelist)
+
+    def print_results(self, filelist):
+        for bsize, path, size in filelist:
+            print '%10d' % bsize, path
+
+#==============================================================================
+
+class Gtk_Presentation(object):
+    def __init__(self, filelist):   ###
+        import gtk
+        import gobject
+
+        # Определяем переменную в которой будет храниться выводимый список
+        self.liststore = gtk.ListStore(str, str, gobject.TYPE_INT64)
+
+        for bsize, path, size in filelist:
+            self.liststore.append([path, size, bsize])
+
+        treeview = gtk.TreeView(self.liststore)
+
+        # Создаем и настраиваем колонку с размером файла
+        size_col = gtk.TreeViewColumn(_('Size'))
+        cell1 = gtk.CellRendererText()
+        cell1.set_property('width', 90)
+        size_col.pack_start(cell1, True)
+        size_col.add_attribute(cell1, 'text', 1)
+        treeview.append_column(size_col)
+        # Создаем и настраиваем колонку с именем файла
+        path_col = gtk.TreeViewColumn(_('Path'))
+        cell2 = gtk.CellRendererText()
+        path_col.pack_start(cell2, True)
+        path_col.add_attribute(cell2, 'text', 0)
+        treeview.append_column(path_col)
+
+        # Добавляем сортировку для колонок
+        treeview.set_search_column(1)
+        path_col.set_sort_column_id(0)
+        size_col.set_sort_column_id(2)
+
+        self.swin = gtk.ScrolledWindow()
+        self.swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+        self.swin.add(treeview)
+###        self.swin.show_all()
+        self.toplevel = self.swin
+
+#     #=== Functions ============================================================
+#     def show_results(self, filelist):
+#         self.liststore.clear()
+#         for path, size, bsize in filelist:
+#             print path, size, bsize
+#             self.liststore.append([path, size, bsize])
+
+#==============================================================================
+
+class Hildon_Presentation(object):
+    def __init__(self, filelist):   ###
+        import gtk
+        import gobject
+        import hildon
+
+        # На таблетке не отображаються заголовки столбцов по умолчанию -
+        # след строка заставляет их отображаться принудительно
+        treeview.set_headers_visible(1)
diff --git a/src/files/outdiagram.py b/src/files/outdiagram.py
deleted file mode 100755 (executable)
index 2356bbd..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-# -*-coding: utf-8 -*-
-# vim: sw=4 ts=4 expandtab ai
-
-from random import random
-from math import pi, cos, sin, sqrt
-import os.path
-
-#==============================================================================
-
-class Cli_Presentation(object):
-    pass
-
-#==============================================================================
-
-class Gtk_Presentation(object):
-    def __init__(self, filelist, maxdata=10):
-        import gtk
-        import cairo
-
-        drawing = gtk.DrawingArea()
-
-        # `maxdata` biggest files from list
-        filelist.sort(reverse=True)
-        del filelist[maxdata:]
-        self.filelist = filelist
-
-        # sum of sizes
-        fullsize = sum((f[0] for f in filelist))
-
-        # sectors list
-        sectors = []
-        start_angle = 0
-        for bsize, name, size in filelist:
-            delta_angle = (float(bsize)/fullsize)*2*pi
-            end_angle = start_angle + delta_angle
-            color = self.rand_color()
-            sectors.append((start_angle, end_angle, color))
-            start_angle += delta_angle
-
-        drawing.connect('expose-event', self.expose_event, sectors)
-
-        self.toplevel = drawing
-
-    def expose_event(self, widget, event, sectors):
-        x, y, w, h, _ = widget.window.get_geometry()
-        R = min(w-w/3, h)/2 - 10
-
-        cr = widget.window.cairo_create()   # cairo context
-        cr.rectangle(0, 0, w, h)
-        cr.set_source_rgb(1, 1, 1)
-        cr.fill()
-        cr.set_source_rgb(0, 0, 0)
-        cr.rectangle(0, 0, w, h)
-        cr.stroke()
-
-        cr.translate(w/2-w/6, h/2)          # moving coordinates
-
-        # drawing pie chart
-        for i, (start_angle, end_angle, color) in enumerate(sectors):
-            # drawing sector
-            cr.move_to(0, 0)
-            cr.set_source_rgb(*color)
-            cr.arc(0, 0, R, start_angle, end_angle)
-            cr.fill()
-
-            # to cartesian coordinates
-            delta_angle = end_angle - start_angle
-            x = R/1.7 * cos(start_angle+delta_angle/2)
-            y = R/1.7 * sin(start_angle+delta_angle/2)
-            area = 0.5*(delta_angle*R**2)   # sector area
-
-            # drawing text
-            cr.set_font_size(sqrt(area)/2)  # text size
-            text = str(i+1)                 # text string
-            xbearing, ybearing, textw, texth = cr.text_extents(text)[:4]
-            cr.move_to(x-(xbearing+textw/2), y-(ybearing+texth/2))  # text center
-            cr.set_source_rgb(.3, .3, .3)   # text color
-            cr.show_text(text)
-
-        cr.set_font_size(14)
-        cr.translate(R+40, -h/2+40)  # moving coordinates
-        cr.move_to(0, 0)
-
-        # drawing files list
-        for i, (bsize, name, size) in enumerate(self.filelist):
-            color = sectors[i][2]
-            cr.set_source_rgb(*color)
-            cr.rectangle(-20, 20*i+3, 14, -14)
-            cr.fill()
-
-            text = str(i+1) + '. ' + os.path.basename(name) + ' (' + str(size) + ')'
-            cr.move_to(0, 20*i)
-            cr.set_source_rgb(0, 0, 0)
-            cr.show_text(text)
-
-    def rand_color(self):
-        return random(), random(), random()
diff --git a/src/files/outtable.py b/src/files/outtable.py
deleted file mode 100755 (executable)
index b7219dc..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env python
-# -*-coding: utf-8 -*-
-# vim: sw=4 ts=4 expandtab ai
-
-from misc import _
-
-#==============================================================================
-
-# class OutTable_Control(object):
-#     def __init__(self):
-#         self.table_present = Gtk_Presentation()
-# 
-#     def show(self, filelist, flsize):
-#         self.table_present.show_result(filelist, flsize)
-# 
-#     def get_ui(self):
-#         return self.table_present.get_toplevel()
-# 
-# 
-# #==============================================================================
-# 
-# class OutTable_Abstraction(object):
-#     pass
-
-#==============================================================================
-
-class Cli_Presentation(object):
-    def __init__(self, filelist):   ###
-        self.toplevel = self.print_results(filelist)
-
-    def print_results(self, filelist):
-        for bsize, path, size in filelist:
-            print '%10d' % bsize, path
-
-#==============================================================================
-
-class Gtk_Presentation(object):
-    def __init__(self, filelist):   ###
-        import gtk
-        import gobject
-
-        # Определяем переменную в которой будет храниться выводимый список
-        self.liststore = gtk.ListStore(str, str, gobject.TYPE_INT64)
-
-        for bsize, path, size in filelist:
-            self.liststore.append([path, size, bsize])
-
-        treeview = gtk.TreeView(self.liststore)
-
-        # Создаем и настраиваем колонку с размером файла
-        size_col = gtk.TreeViewColumn(_('Size'))
-        cell1 = gtk.CellRendererText()
-        cell1.set_property('width', 90)
-        size_col.pack_start(cell1, True)
-        size_col.add_attribute(cell1, 'text', 1)
-        treeview.append_column(size_col)
-        # Создаем и настраиваем колонку с именем файла
-        path_col = gtk.TreeViewColumn(_('Path'))
-        cell2 = gtk.CellRendererText()
-        path_col.pack_start(cell2, True)
-        path_col.add_attribute(cell2, 'text', 0)
-        treeview.append_column(path_col)
-
-        # Добавляем сортировку для колонок
-        treeview.set_search_column(1)
-        path_col.set_sort_column_id(0)
-        size_col.set_sort_column_id(2)
-
-        self.swin = gtk.ScrolledWindow()
-        self.swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-        self.swin.add(treeview)
-###        self.swin.show_all()
-        self.toplevel = self.swin
-
-#     #=== Functions ============================================================
-#     def show_results(self, filelist):
-#         self.liststore.clear()
-#         for path, size, bsize in filelist:
-#             print path, size, bsize
-#             self.liststore.append([path, size, bsize])
-
-#==============================================================================
-
-class Hildon_Presentation(object):
-    def __init__(self, filelist):   ###
-        import gtk
-        import gobject
-        import hildon
-
-        # На таблетке не отображаються заголовки столбцов по умолчанию -
-        # след строка заставляет их отображаться принудительно
-        treeview.set_headers_visible(1)
index 0df7faf..6c3af66 100755 (executable)
@@ -136,13 +136,17 @@ class Gtk_Presentation(object):
         self.stop_btn.connect('clicked', self.stop_btn_clicked)
 
         # Output selection
-        outtable_rbtn = gtk.RadioButton(None, _('Table'))
-        outtable_rbtn.set_name('outtable')
-        outdiagram_rbtn = gtk.RadioButton(outtable_rbtn, _('Diagram'))
-        outdiagram_rbtn.set_name('outdiagram')
-        out1_rbtn = gtk.RadioButton(outtable_rbtn, 'Another 1')
-        out1_rbtn.set_name('outanother1')
-        self.out_rbtns = [outtable_rbtn, outdiagram_rbtn, out1_rbtn]
+        out_table_rbtn = gtk.RadioButton(None, _('Table'))
+        out_table_rbtn.set_name('out_table')
+        out_diabar_rbtn = gtk.RadioButton(out_table_rbtn, _('Bar chart'))
+        out_diabar_rbtn.set_name('out_diabar')
+        out_diapie_rbtn = gtk.RadioButton(out_table_rbtn, _('Pie chart'))
+        out_diapie_rbtn.set_name('out_diapie')
+        out_diaold_rbtn = gtk.RadioButton(out_table_rbtn, _('Old chart'))
+        out_diaold_rbtn.set_name('out_diaold')
+        self.out_rbtns = [
+            out_table_rbtn, out_diabar_rbtn, out_diapie_rbtn, out_diaold_rbtn
+        ]
 
         hbox = gtk.HBox(False, 4)
         hbox.pack_start(qty_label, False, False, 0)