From b241defcb270569bf65908b7ea10216483d5f79a Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 30 Oct 2006 17:40:33 +0000 Subject: Make the Hippo-fied menu much prettier --- diff --git a/services/nm/bubble.py b/services/nm/bubble.py index ca900db..52710a6 100644 --- a/services/nm/bubble.py +++ b/services/nm/bubble.py @@ -25,36 +25,55 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'NetworkBubble' __gproperties__ = { - 'color' : (object, None, None, + 'fill-color': (object, None, None, gobject.PARAM_READWRITE), - 'percent' : (object, None, None, + 'stroke-color': (object, None, None, + gobject.PARAM_READWRITE), + 'progress-color': (object, None, None, + gobject.PARAM_READWRITE), + 'percent' : (object, None, None, gobject.PARAM_READWRITE), } def __init__(self, **kwargs): - self._color = None + self._stroke_color = 0xFFFFFFFF + self._fill_color = 0xFFFFFFFF + self._progress_color = 0x000000FF self._percent = 0 self._radius = 8 hippo.CanvasBox.__init__(self, **kwargs) def do_set_property(self, pspec, value): - if pspec.name == 'color': - self._color = value + if pspec.name == 'fill-color': + self._fill_color = value + self.emit_paint_needed(0, 0, -1, -1) + elif pspec.name == 'stroke-color': + self._stroke_color = value + self.emit_paint_needed(0, 0, -1, -1) + elif pspec.name == 'progress-color': + self._progress_color = value self.emit_paint_needed(0, 0, -1, -1) elif pspec.name == 'percent': self._percent = value self.emit_paint_needed(0, 0, -1, -1) def do_get_property(self, pspec): - if pspec.name == 'color': - return self._color + if pspec.name == 'fill-color': + return self._fill_color + elif pspec.name == 'stroke-color': + return self._stroke_color + elif pspec.name == 'progress-color': + return self._progress_color elif pspec.name == 'percent': return self._percent - def _string_to_rgb(self, color_string): - col = gtk.gdk.color_parse(color_string) - return (col.red / 65535.0, col.green / 65535.0, col.blue / 65535.0) + def _int_to_rgb(self, int_color): + red = (int_color >> 24) & 0x000000FF + green = (int_color >> 16) & 0x000000FF + blue = (int_color >> 8) & 0x000000FF + alpha = int_color & 0x000000FF + return (red / 255.0, green / 255.0, blue / 255.0) def do_paint_below_children(self, cr, damaged_box): [width, height] = self.get_allocation() @@ -75,11 +94,38 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem): cr.arc(x + self._radius, y + self._radius, self._radius, math.pi, math.pi * 1.5); - color = self._string_to_rgb(self._color.get_fill_color()) + color = self._int_to_rgb(self._fill_color) cr.set_source_rgb(*color) cr.fill_preserve(); - color = self._string_to_rgb(self._color.get_stroke_color()) + color = self._int_to_rgb(self._stroke_color) cr.set_source_rgb(*color) cr.set_line_width(line_width) cr.stroke(); + + self._paint_progress_bar(cr, x, y, width, height, line_width) + + def _paint_progress_bar(self, cr, x, y, width, height, line_width): + prog_x = x + line_width + prog_y = y + line_width + prog_width = (width - (line_width * 2)) * (self._percent / 100.0) + prog_height = (height - (line_width * 2)) + + x = prog_x + y = prog_y + width = prog_width + height = prog_height + + cr.move_to(x + self._radius, y); + cr.arc(x + width - self._radius, y + self._radius, + self._radius, math.pi * 1.5, math.pi * 2); + cr.arc(x + width - self._radius, x + height - self._radius, + self._radius, 0, math.pi * 0.5); + cr.arc(x + self._radius, y + height - self._radius, + self._radius, math.pi * 0.5, math.pi); + cr.arc(x + self._radius, y + self._radius, self._radius, + math.pi, math.pi * 1.5); + + color = self._int_to_rgb(self._progress_color) + cr.set_source_rgb(*color) + cr.fill_preserve(); diff --git a/services/nm/nmclient.py b/services/nm/nmclient.py index fcc5638..6328b43 100644 --- a/services/nm/nmclient.py +++ b/services/nm/nmclient.py @@ -189,7 +189,7 @@ class Device(gobject.GObject): del self._networks[net_op] def _add_to_menu_wired(self, menu): - item = NetworkMenuItem(_("Wired Network")) + item = NetworkMenuItem(_("Wired Network"), stylesheet="nm.Bubble.Wired") menu.add_item(item) def _add_to_menu_wireless(self, menu): @@ -265,17 +265,43 @@ class Device(gobject.GObject): def set_carrier(self, on): self._link = on +nm_bubble_wireless = { + 'fill-color' : 0x646464FF, + 'stroke-color' : 0x646464FF, + 'progress-color': 0x333333FF, + 'spacing' : style.space_unit, + 'padding' : style.space_unit +} + +nm_bubble_wired = { + 'fill-color' : 0x000000FF, + 'stroke-color' : 0x000000FF, + 'progress-color': 0x000000FF, + 'spacing' : style.space_unit, + 'padding' : style.space_unit +} + +nm_menu_item_title = { + 'xalign': hippo.ALIGNMENT_START, + 'padding-left': 5, + 'color' : 0xFFFFFFFF, + 'font' : style.get_font_description('Bold', 1.2) +} + + +style.register_stylesheet("nm.Bubble.Wireless", nm_bubble_wireless) +style.register_stylesheet("nm.Bubble.Wired", nm_bubble_wired) +style.register_stylesheet("nm.MenuItem.Title", nm_menu_item_title) class NetworkMenuItem(Bubble): - def __init__(self, text, percent=0): - color = IconColor("#646464,#646464") - Bubble.__init__(self, color=color, percent=percent) + def __init__(self, text, percent=0, stylesheet="nm.Bubble.Wireless"): + Bubble.__init__(self, percent=percent) + style.apply_stylesheet(self, stylesheet) text_item = hippo.CanvasText(text=text) - style.apply_stylesheet(text_item, 'menu.Text') + style.apply_stylesheet(text_item, 'nm.MenuItem.Title') self.append(text_item) - class NetworkMenu(gtk.Window): __gsignals__ = { 'action': (gobject.SIGNAL_RUN_FIRST, @@ -446,7 +472,6 @@ class NMClientApp: def do_popup(self, current, n_frames): if self._menu: - self._popdown() return self._menu = self._create_menu() -- cgit v0.9.1