From 100a2b6f1acd81b959ce1f75dc21c157de930e9f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E2=80=9CAlexandr?= <“popov2al@gmail.com”> Date: Sat, 4 Apr 2009 23:49:52 +0400 Subject: [PATCH] add simple diagramm view(src/outdiag.py) - creating from src/outtable.py --- src/outdiag.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/outdiag.py diff --git a/src/outdiag.py b/src/outdiag.py new file mode 100644 index 0000000..1b235a4 --- /dev/null +++ b/src/outdiag.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +# -*-coding: utf-8 -*- +# vim: sw=4 ts=4 expandtab ai + +import gtk +import gobject +from random import randint + +class Out_Diag_Control(object): + def __init__(self, config): + win_width = config.get('window_width') + win_height = config.get('window_height') + self.out_ui = Out_Diag_Presentation(win_width, win_height) + + def show(self, filelist, fullsize): + self.out_ui.get_data(filelist, fullsize) + + def run(self): + self.out_ui.run() + + +class Out_Diag_Abstraction(object): + pass + + +class Out_Diag_Presentation(gtk.Window): + + def __init__(self, win_width, win_height): + gtk.Window.__init__(self) + self.width = win_width + self.height = win_height + self.set_default_size(self.width, self.height) + self.set_border_width(4) + self.connect('delete_event', gtk.main_quit) + + scrollwind = gtk.ScrolledWindow() + scrollwind.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + + self.area = gtk.DrawingArea() + self.area.set_size_request(win_width, win_height) + self.area.set_events(gtk.gdk.POINTER_MOTION_MASK | + gtk.gdk.POINTER_MOTION_HINT_MASK ) + self.area.connect("expose-event", self.expose_event) + self.pixmap = None + + scrollwind.add_with_viewport(self.area) + self.add(scrollwind) + + + def expose_event(self, widget, event): + if not self.pixmap: + self.build_pixmap() + x , y, width, height = event.area + widget.window.draw_drawable(widget.get_style().fg_gc[gtk.STATE_NORMAL], \ + self.pixmap, x, y, x, y, width, height) + return False + + def build_pixmap(self): + self.pixmap=gtk.gdk.Pixmap(self.window, self.width, self.height) + cm=self.pixmap.get_colormap() + self.color={} + self.color['black']=cm.alloc_color("black") + self.color['white']=cm.alloc_color("white") + self.gc=self.pixmap.new_gc() + self.gc.set_foreground(self.color['white']) + self.pixmap.draw_rectangle(self.gc, True, 0, 0, self.width, self.height) + + def draw_diag(self): + start_angle = 0 + for path, size, bsize in self.filelist: + end_angle = (bsize*360*64)/self.fullsize + print start_angle, end_angle + gc=self.pixmap.new_gc() + cm=self.pixmap.get_colormap() + col1 = cm.alloc_color(self.rand_color()) + gc.set_foreground(col1) + gc.set_line_attributes(1,gtk.gdk.LINE_SOLID,gtk.gdk.CAP_NOT_LAST,gtk.gdk.JOIN_MITER) + self.pixmap.draw_arc(gc, True, 0, 0, self.width, self.height, start_angle, end_angle) + start_angle = start_angle + end_angle + self.area.queue_draw() + + def rand_color(self): + r = randint(0, 65535) + g = randint(0, 65535) + b = randint(0, 65535) + return gtk.gdk.Color(r, g, b, 0) + + def run(self): + self.show_all() + gobject.timeout_add(1000, self.draw_diag) + gtk.main() + + def get_data(self, filelist, fullsize): + self.filelist = filelist + self.fullsize = fullsize -- 1.7.9.5