Log In
New Account
  
Home My Page Project Cloud Code Snippets Project Openings MussOrgsky: Music Organizer for Maemo
Summary Forums Tracker Lists Tasks Docs News SCM Files
1 import gtk
2 import gobject
4 BUTTON_HILIGHT_FILE_NAME = "/etc/hildon/theme/mediaplayer/Button.png"
6 fancy_button_highlight_pb = None
8 class FancyButton (gtk.EventBox):
10     __gsignals__ = {
11         'clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())
12     }
14     def __init__ (self, image, text):
15         gtk.EventBox.__init__ (self)
17         self.pressed = False
19         vbox = gtk.VBox ()
20         self.image = image
21         self.label = gtk.Label (text)
23         align = gtk.Alignment (xalign=0.5, yalign=0.5)
24         align.add (self.image)
26         vbox.pack_start (align, expand=False, fill=False)
27         vbox.pack_start (self.label, expand=False, fill=False)
29         self.add (vbox)
30         self.set_visible_window (False)
31         self.set_above_child (True)
33         self.connect ("button-press-event", self.custom_button_press_event)
34         self.connect ("button-release-event", self.custom_button_release_event)
35         self.connect ("enter-notify-event", self.custom_enter_notify_event)
36         self.connect ("leave-notify-event", self.custom_leave_notify_event)
37         self.image.connect ("expose-event", self.image_expose_event)
38         
39         
40     def custom_button_press_event (self, p, q):
41         self.image.set_state (gtk.STATE_ACTIVE)
42         self.pressed = True
43         print "OK"
45     def custom_button_release_event (self, p, q):
47         if (self.pressed and self.image.state  == gtk.STATE_ACTIVE):
48             self.emit ("clicked")
50         self.image.set_state (gtk.STATE_NORMAL)
51         self.pressed = False
53     def custom_enter_notify_event (self, p, q):
54         if (self.pressed):
55             self.image.set_state (gtk.STATE_ACTIVE)
57     def custom_leave_notify_event (self, p, q):
58         self.image.set_state (gtk.STATE_NORMAL)
60     def image_expose_event (self, widget, event):
61         global fancy_button_highlight_pb
62         
63         if (widget.state == gtk.STATE_ACTIVE):
64             if (fancy_button_highlight_pb):
65                 print "Painting highlight image"
66                 widget.window.draw_pixbuf (None,
67                                            fancy_button_highlight_pb,
68                                            0, 0,
69                                            widget.allocation.x,
70                                            widget.allocation.y)
71             else:
72                 gtk.Style.paint_flat_box (widget.style,
73                                           event.window,
74                                           gtk.STATE_ACTIVE,
75                                           gtk.SHADOW_NONE,
76                                           event.area,
77                                           widget,
78                                           "eventbox",
79                                           event.area.x,
80                                           event.area.y,
81                                           event.area.width,
82                                           event.area.height)
85 def settings_changed (obj, spec):
86     global fancy_button_highlight_pb
87     try:
88         fancy_button_highlight_pb = gtk.gdk.pixbuf_new_from_file (BUTTON_HILIGHT_FILE_NAME)
89     except Exception, e:
90         print str(e)
91         fancy_button_highlight_pb = None
93 if __name__ == "__main__":
95     w = gtk.Window ()
97     settings = gtk.settings_get_default ()
98     settings.connect ("notify", settings_changed)
99     settings_changed (None, None)
102     frame = gtk.Frame ()
103     frame.add (FancyButton ())
105     align = gtk.Alignment (xalign=0.5, yalign=0.5)
106     align.add (frame)
107     
108     
109     w.add (align)
110     w.show_all ()
111     w.connect ("delete-event", gtk.main_quit)
112     gtk.main ()
114     

Terms of Use    Privacy Policy    Contribution Guidelines    Feedback

Powered By GForge Collaborative Development Environment