2
# -*- coding: utf-8 -*-
6
__authors__ = ["Jan Jokela <janjokela@gmail.com>"]
7
__licenses__ = ["LICENSE.LGPL"]
8
__description__ = "Button widget"
13
from container import Container
15
from label import Label
16
from image import Image
18
class Button(Container):
20
A button widget features icon and label, signals for press and release.
25
'clicked': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN,
26
(gobject.TYPE_PYOBJECT,))
29
def __init__(self, icon=None, label=None):
30
""" Initialize button widget """
32
super(Button, self).__init__()
37
self.set_reactive(True)
38
self.connect('motion-event', self.on_motion_event)
39
self.connect('leave-event', self.on_leave_event)
40
self.connect('button-press-event', self.on_press_event)
41
self.connect('button-release-event', self.on_release_event)
45
self._update_style(self.style)
47
def _init_elements(self):
48
""" Initializes graphical elements """
50
self._background_image = Image()
51
self.add(self._background_image)
57
self._icon = Image(self.icon)
58
self._icon.size_ratio = 1.0
59
self._hbox.pack(self._icon)
61
self._label = Label(self.label)
62
self._hbox.pack(self._label)
64
def _update_style(self, props=None):
67
super(Button, self)._update_style(props)
69
for key, value in props:
70
if key == 'background-image':
71
self.background_image = value
72
self._background_image.hide()
73
self._background_image.set_source(self.background_image)
74
self._background_image._update_layout()
75
self._background_image.show()
77
def _update_layout(self):
78
""" Updates layout """
80
super(Button, self)._update_layout()
82
self._background_image._update_layout()
83
self._hbox._update_layout()
85
def on_motion_event(self, widget, event):
86
""" Cursor motion over widget """
88
if not self.state == STATE_SELECTED:
89
self.state = STATE_HIGHLIGHT
91
def on_leave_event(self, widget, event):
92
""" Cursor leave from widget """
94
self.state = STATE_NORMAL
96
def on_press_event(self, widget, event):
98
self.state = STATE_SELECTED
99
self.emit("clicked", self)
101
def on_release_event(self, widget, event):
103
self.state = STATE_HIGHLIGHT