home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.4)
-
- import gobject
- import gtk.gdk as gtk
- import gtk
- import math
- import os
- from gtk import DrawingArea
- from math import cos, sin
- from weakref import ref
- from cairopiechart import CairoPieChart
- _CIRCLE = 360 * 64
-
- class GdkPieChart(DrawingArea):
-
- def __init__(self, values, getter):
- DrawingArea.__init__(self)
- self.gc = None
- self.width = 0
- self.height = 0
- self.selected = []
- self.total = 0
- self.offset = 1
- self.getter = getter
- self.values = values
- self.connect('size-allocate', self._GdkPieChart__on_size_allocate)
- self.connect('expose-event', self._GdkPieChart__on_expose_event)
- self.connect('realize', self._GdkPieChart__on_realize)
-
-
- def __on_realize(self, widget):
- style = self.get_style()
- self.border_gc = style.dark_gc[gtk.STATE_NORMAL]
- self.transparent_gc = style.bg_gc[gtk.STATE_NORMAL]
- self.background_gc = style.mid_gc[gtk.STATE_NORMAL]
- self.slice_gc = style.base_gc[gtk.STATE_NORMAL]
- self.selected_slice_gc = style.base_gc[gtk.STATE_SELECTED]
-
-
- def __on_size_allocate(self, widget, allocation):
- self.width = allocation.width
- self.height = allocation.height
-
-
- def draw_slice(self, gc, offset, aperture):
- self.window.draw_arc(gc, True, 0, 0, self.radius, self.radius, offset, aperture)
-
-
- def draw_circle(self, gc):
- self.draw_slice(gc, 0, _CIRCLE)
-
-
- def __on_expose_event(self, widget, event):
- offset = 0
- selected_slices = []
- index = 0
- total = 0
- for v in self.values:
- total += self.getter(v)
-
- filled = total >= self.total
- self.draw_circle(self.background_gc)
- ratio = _CIRCLE / float(self.total)
- for value in self.values:
- angle = int(self.getter(value) * ratio)
- if index in self.selected:
- selected_slices.append((offset, angle))
- elif not filled:
- self.draw_slice(self.slice_gc, offset, angle)
-
- offset += angle
- index += 1
-
- if filled:
- self.draw_circle(self.slice_gc)
-
- for offset, angle in selected_slices:
- self.draw_slice(self.selected_slice_gc, offset, angle)
-
- r = int(self.radius / 4)
- dx = self.radius / 2 - r / 2
- self.window.draw_arc(self.transparent_gc, True, dx, dx, r, r, 0, _CIRCLE)
- self.window.draw_arc(self.border_gc, False, dx, dx, r, r, 0, _CIRCLE)
- self.window.draw_arc(self.border_gc, False, 0, 0, self.radius, self.radius, 0, _CIRCLE)
-
-
- def get_radius(self):
- return min(self.width, self.height) - self.offset
-
- radius = property(get_radius)
-
- if hasattr(gtk.gdk.Drawable, 'cairo_create') or os.environ.get('SERP_USE_GDK', '') != 'yes':
- PieChart = CairoPieChart
- else:
- PieChart = GdkPieChart
-
- class SerpentineUsage(object):
-
- def __init__(self, parent):
- self._SerpentineUsage__parent = ref(parent)
- self._SerpentineUsage__overflow = False
- self.widget = PieChart(values = self.parent.source, getter = (lambda value: value['duration']))
- self.widget.total = self.parent.disc_size
- self.parent.source.listeners.append(self)
- self.parent.listeners.append(self)
-
-
- def get_parent(self):
- return self._SerpentineUsage__parent()
-
- parent = property(get_parent)
-
- def __set_overflow(self, is_overflow):
- self.widget.filled = is_overflow
- self._SerpentineUsage__is_overflow = is_overflow
-
-
- def __get_overflow(self):
- return self._SerpentineUsage__overflow
-
- overflow = property(__get_overflow, __set_overflow)
- del __set_overflow
- del __get_overflow
-
- def on_contents_changed(self, *args):
- self.widget.queue_draw()
- self._SerpentineUsage__update()
-
-
- def on_musics_added(self, e, rows):
- self.widget.queue_draw()
- self._SerpentineUsage__update()
-
- on_musics_removed = on_musics_added
-
- def __update(self):
- self.overflow = self.widget.total < self.parent.source.total_duration
-
-
- def on_selection_changed(self, e):
- if not self.overflow:
- self.widget.selected = self.parent.get_selected()
- self.widget.queue_draw()
-
-
-
- def on_disc_size_changed(self, e):
- self.widget.total = self.parent.disc_size
- self._SerpentineUsage__update()
- self.widget.queue_draw()
-
-
-