Make the Hippo-fied menu much prettier
This commit is contained in:
parent
72832e0174
commit
b241defcb2
@ -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),
|
||||
'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();
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user