aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Components/GUIComponent.py
blob: 7e1bafb977bac95fefebb197c7063faeab6d41c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import skin

from enigma import ePoint, eSize

class GUIComponent(object):
	""" GUI component """
	
	def __init__(self):
		self.instance = None
		self.onVisibilityChange = [ ]
		self.__visible = 0
		self.visible = 1
		self.skinAttributes = None
		self.deprecationInfo = None
	
	def execBegin(self):
		pass
	
	def execEnd(self):
		pass
	
	def onShow(self):
		pass

	def onHide(self):
		pass
	
	def destroy(self):
		self.__dict__.clear()
	
	# this works only with normal widgets - if you don't have self.instance, override this.
	def applySkin(self, desktop, parent):
		if not self.visible:
			self.instance.hide()
		
		if self.skinAttributes is None:
			return False

		skin.applyAllAttributes(self.instance, desktop, self.skinAttributes, parent.scale)
		return True

	def move(self, x, y = None):
		# we assume, that x is already an ePoint
		if y is None:
			self.instance.move(x)
		else:
			self.instance.move(ePoint(int(x), int(y)))

	def resize(self, x, y = None):
		self.width = x
		self.height = y
		if y is None:
			self.instance.resize(x)
		else:
			self.instance.resize(eSize(int(x), int(y)))

	def setZPosition(self, z):
		self.instance.setZPosition(z)

	def show(self):
		old = self.__visible
		self.__visible = 1
		if self.instance is not None:
			self.instance.show()
		if old != self.__visible:
			for fnc in self.onVisibilityChange:
				fnc(True)

	def hide(self):
		old = self.__visible
		self.__visible = 0
		if self.instance is not None:
			self.instance.hide()
		if old != self.__visible:
			for fnc in self.onVisibilityChange:
				fnc(False)

	def getVisible(self):
		return self.__visible
	
	def setVisible(self, visible):
		if visible:
			self.show()
		else:
			self.hide()

	visible = property(getVisible, setVisible)

	def setPosition(self, x, y):
		self.instance.move(ePoint(int(x), int(y)))

	def getPosition(self):
		p = self.instance.position()
		return (p.x(), p.y())
	
	def getWidth(self):
		return self.width
	
	def getHeight(self):
		return self.height

	position = property(getPosition, setPosition)

	# default implementation for only one widget per component
	# feel free to override!
	def GUIcreate(self, parent):
		self.instance = self.createWidget(parent)
		self.postWidgetCreate(self.instance)
	
	def GUIdelete(self):
		self.preWidgetRemove(self.instance)
		self.instance = None

	# default for argumentless widget constructor
	def createWidget(self, parent):
		return self.GUI_WIDGET(parent)

	def postWidgetCreate(self, instance):
		pass
	
	def preWidgetRemove(self, instance):
		pass