diff options
Diffstat (limited to 'services/console/interface/xo/cpu.py')
-rw-r--r-- | services/console/interface/xo/cpu.py | 151 |
1 files changed, 6 insertions, 145 deletions
diff --git a/services/console/interface/xo/cpu.py b/services/console/interface/xo/cpu.py index c64764b..520725c 100644 --- a/services/console/interface/xo/cpu.py +++ b/services/console/interface/xo/cpu.py @@ -21,9 +21,11 @@ import sys import gtk import string import gobject - +import cairo import procmem +from graphics.frequency import HorizontalGraphic + class CPU_Usage: _CPU_HZ = 0 @@ -54,7 +56,7 @@ class CPU_Usage: cpu_info = self._get_CPU_data() used_jiffies = (int(cpu_info[2]) + int(cpu_info[3]) + int(cpu_info[4])) - + if self._times ==0: self._last_jiffies = used_jiffies self._times +=1 @@ -87,6 +89,7 @@ class XO_CPU(gtk.Frame): width = (gtk.gdk.screen_width() * 99 / 100) - 50 height = (gtk.gdk.screen_height() * 15 / 100) - 20 + # Create graphic self._graphic = HorizontalGraphic() self._graphic.set_size_request(width, height) @@ -105,149 +108,7 @@ class XO_CPU(gtk.Frame): self._cpu = self._DRW_CPU._get_CPU_usage() self._updated = True - #print "Sending: " + str(self._cpu) self.set_label('System CPU Usage: ' + str(self._cpu) + '%') + # Draw the value into the graphic self._graphic.draw_value(self._cpu) return True - -class HorizontalGraphic(gtk.DrawingArea): - _MARGIN = 5 - _LINE_WIDTH = 2 - _GRAPH_OFFSET = 7 - _range_x = [] - _range_y = [] - _frequency_timer = 0 - - def __init__(self): - gtk.DrawingArea.__init__(self) - self.connect('expose-event', self.do_expose) - self.connect('size-allocate', self._change_size_cb) - - self._buffer = [0] - - def do_expose(self, widget, event): - context = widget.window.cairo_create() - context.rectangle(0, 0, self._width - 1, self._height - 1) - context.set_source_rgb (0,0,0) - context.fill_preserve() - context.set_line_width(self._LINE_WIDTH) - - if event.area.x == 0: - draw_all = True - - self._draw_border_lines(context) - context.stroke() - else: - draw_all = False - context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) - context.clip() - - context.set_source_rgb(1, 1, 1) - self._draw_buffer(event, widget, context, draw_all) - context.stroke() - - self._updated = False - return False - - def draw_value(self, percent): - redraw_all = False - - if (len(self._buffer) + 1) *self._GRAPH_OFFSET >= self._width: - redraw_all = True - self._buffer = [self._buffer[-1]] - length = 1 - else: - length = len(self._buffer) - 1 - - self._buffer.append(percent) - self._updated = True - - if redraw_all: - area_x = 0 - area_y = 0 - height = self._height - width = self._width - else: - area_x = (length*self._GRAPH_OFFSET) - area_y = self._graph_y - width = self._GRAPH_OFFSET * 2 - height = self._graph_height - - self.queue_draw_area(area_x, area_y, width, height) - self._frequency_timer += 1 - - return True - - def _draw_border_lines(self, context): - context.set_source_rgb(1, 1, 1) - self._draw_line(context, self._MARGIN, self._MARGIN, self._MARGIN, self._height - self._MARGIN) - self._draw_line(context, self._MARGIN, self._height - self._MARGIN - 1, self._width - self._MARGIN, self._height - self._MARGIN - 1) - - def _draw_line(self, context, from_x, from_y, to_x, to_y): - #print "" - #print "DRAWING LINE" - #print "from: " + str(from_x) + "," + str(from_y) + "," + str(to_x) + "," + str(to_y) - - context.move_to(from_x, from_y) - context.line_to(to_x, to_y) - - def _draw_buffer(self, event, drwarea, context, draw_all=True): - buffer_offset = 0 - freq = 1 # Frequency timer - - length = len(self._buffer) - - if length == 0: - return - - # Context properties - context.set_line_width(self._LINE_WIDTH) - context.set_source_rgb(0,1,0) - - if draw_all == True: - buffer_offset = 0 - freq = 0 - else: - freq = buffer_offset = (event.area.x/self._GRAPH_OFFSET) - - for percent in self._buffer[buffer_offset:length]: - if buffer_offset == 0: - from_y = self._height - self._GRAPH_OFFSET - from_x = self._GRAPH_OFFSET - else: - from_y = self._get_y(self._buffer[buffer_offset-1]) - from_x = (freq * self._GRAPH_OFFSET) - - to_x = (freq+1) * self._GRAPH_OFFSET - to_y = self._get_y(percent) - - self._draw_line(context, from_x, from_y, to_x, to_y) - buffer_offset+=1 - freq+=1 - - context.stroke() - - def _get_y(self, percent): - y_value = self._GRAPH_OFFSET + (self._graph_height - ((percent*self._graph_height)/100)) - return int(y_value) - - def _change_size_cb(self, widget, allocation): - self._width = allocation.width - self._height = allocation.height - - self._graph_x = self._MARGIN + self._LINE_WIDTH - self._graph_y = self._MARGIN + self._LINE_WIDTH - self._graph_width = self._width - (self._MARGIN + self._LINE_WIDTH) - self._graph_height = self._height - ((self._MARGIN + self._LINE_WIDTH)*2) - - -# Just for test >:) -#graph = HorizontalGraphic() -#graph.set_size_request(400,200) -""" -window = gtk.Window() -window.set_size_request(500, 250) -window.add(XO_CPU()) -window.show_all() -gtk.main() -""" |