initial import of ussd-pad
[ussd-widget] / ussd-pad / src / opt / ussd-pad / ui / ImageButton.py
1 from Widget import Widget
2 from Pixmap import Pixmap, TEMPORARY_PIXMAP
3 from utils import logging
4
5
6 class ImageButton(Widget):
7
8     def __init__(self, img1, img2, manual = False):
9     
10         self.__bg = None
11         self.__buffer = None
12         self.__state = 0
13         
14         self.__img1 = img1
15         self.__img2 = img2
16     
17         Widget.__init__(self)
18         #self.set_size(img1.get_width(), img1.get_height())
19         self.set_size(64, 64)
20         
21         if (not manual):
22             self.connect_button_pressed(self.__on_click, True)
23             self.connect_button_released(self.__on_click, False)               
24     
25     
26     def _reload(self):
27     
28         #self.__bg = None
29         self.set_images(self.__img1, self.__img2)
30     
31     
32     def set_size(self, w, h):
33     
34         Widget.set_size(self, w ,h)
35         self.__bg = Pixmap(None, w, h)
36         self.__buffer = TEMPORARY_PIXMAP #Pixmap(None, w, h)
37     
38         
39     def render_this(self):
40         
41         if (not self.may_render()): return
42         
43         x, y = self.get_screen_pos()
44         w, h = self.get_size()
45         screen = self.get_screen()
46         
47         # save background
48         #if (not self.__bg):
49         #    self.__bg = Pixmap(None, w, h)
50         self.__bg.copy_buffer(screen, x, y, 0, 0, w, h)
51
52         self.__render_button()
53                      
54         
55     def __on_click(self, px, py, clicked):
56     
57         if (clicked):
58             self.__state = 1
59             #self.__render_button(1)
60         else:
61             self.__state = 0
62             #self.__render_button(0)
63         self.__render_button()
64             
65         
66         
67     def _render_content(self, cnv):
68         
69         pass
70     
71
72
73     def __render_button(self):
74
75         #self.__state = state
76         if (not self.may_render()): return
77
78         x, y = self.get_screen_pos()
79         w, h = self.get_size()    
80         screen = self.get_screen()
81
82         if (self.__state == 0):
83             img = self.__img1
84         else:
85             img = self.__img2
86
87         self.__buffer.copy_pixmap(self.__bg, 0, 0, 0, 0, w, h)
88         #self.__buffer.draw_pixbuf(img,
89         #                          (w - img.get_width()) / 2,
90         #                          (h - img.get_height()) / 2)
91         logging.debug("size of button image: %d x %d",
92                       img.get_width(), img.get_height())
93         if ((w, h) != (img.get_width(), img.get_height())):
94             self.__buffer.draw_frame(img, 0, 0, w, h, True)
95         else:
96             self.__buffer.draw_pixbuf(img, 0, 0)
97         
98         self._render_content(self.__buffer)
99         
100         screen.copy_pixmap(self.__buffer, 0, 0, x, y, w, h)
101
102        
103         
104     def set_images(self, img1, img2):
105     
106         self.__img1 = img1
107         self.__img2 = img2
108         
109         #self.set_size(img1.get_width(), img1.get_height())
110         #self.__render_button(self.__state)
111         self.__render_button()
112
113
114     def set_active(self, active):
115     
116         if (active):
117             self.__state = 1
118             #self.__render_button(1)
119         else:
120             self.__state = 0
121             #self.__render_button(0)
122         self.__render_button()
123