fix non working rotor turning pixmap
[enigma2.git] / lib / python / Components / GUIComponent.py
1 import skin
2
3 from enigma import ePoint
4
5 class GUIComponent(object):
6         """ GUI component """
7         
8         def __init__(self):
9                 self.instance = None
10                 self.onVisibilityChange = [ ]
11                 self.__visible = 0
12                 self.visible = 1
13                 self.skinAttributes = None
14         
15         def execBegin(self):
16                 pass
17         
18         def execEnd(self):
19                 pass
20         
21         def onShow(self):
22                 pass
23
24         def onHide(self):
25                 pass
26         
27         def destroy(self):
28                 self.__dict__.clear()
29         
30         # this works only with normal widgets - if you don't have self.instance, override this.
31         def applySkin(self, desktop):
32                 if not self.visible:
33                         self.instance.hide()
34                 
35                 if self.skinAttributes is None:
36                         return False
37
38                 skin.applyAllAttributes(self.instance, desktop, self.skinAttributes)
39                 return True
40
41         def move(self, x, y = None):
42                 # we assume, that x is already an ePoint
43                 if y is None:
44                         self.instance.move(x)
45                 else:
46                         self.instance.move(ePoint(int(x), int(y)))
47                 
48         def resize(self, size):
49                 self.instance.resize(size)
50                 
51         def setZPosition(self, z):
52                 self.instance.setZPosition(z)
53
54         def show(self):
55                 old = self.__visible
56                 self.__visible = 1
57                 if self.instance is not None:
58                         self.instance.show()
59                 if old != self.__visible:
60                         for fnc in self.onVisibilityChange:
61                                 fnc(True)
62
63         def hide(self):
64                 old = self.__visible
65                 self.__visible = 0
66                 if self.instance is not None:
67                         self.instance.hide()
68                 if old != self.__visible:
69                         for fnc in self.onVisibilityChange:
70                                 fnc(False)
71
72         def getVisible(self):
73                 return self.__visible
74         
75         def setVisible(self, visible):
76                 if visible:
77                         self.show()
78                 else:
79                         self.hide()
80
81         visible = property(getVisible, setVisible)
82
83         def setPosition(self, x, y):
84                 self.instance.move(ePoint(int(x), int(y)))
85
86         def getPosition(self):
87                 p = self.instance.position()
88                 return (p.x(), p.y())
89
90         position = property(getPosition, setPosition)
91
92         # default implementation for only one widget per component
93         # feel free to override!
94         def GUIcreate(self, parent):
95                 self.instance = self.createWidget(parent)
96                 self.postWidgetCreate(self.instance)
97         
98         def GUIdelete(self):
99                 self.preWidgetRemove(self.instance)
100                 self.instance = None
101
102         # default for argumentless widget constructor
103         def createWidget(self, parent):
104                 return self.GUI_WIDGET(parent)
105
106         def postWidgetCreate(self, instance):
107                 pass
108         
109         def preWidgetRemove(self, instance):
110                 pass