add foregroundcolor selected and backgroundcolor selected to local listbox
[enigma2.git] / lib / python / Components / ScrollLabel.py
1 import skin
2 from HTMLComponent import HTMLComponent
3 from GUIComponent import GUIComponent
4 from enigma import eLabel, eWidget, eSlider, fontRenderClass, ePoint, eSize
5
6 class ScrollLabel(HTMLComponent, GUIComponent):
7         def __init__(self, text=""):
8                 GUIComponent.__init__(self)
9                 self.message = text
10                 self.instance = None
11                 self.long_text = None
12                 self.scrollbar = None
13                 self.pages = None
14                 self.total = None
15
16         def applySkin(self, desktop):
17                 ret = False
18                 if self.skinAttributes is not None:
19                         skin.applyAllAttributes(self.long_text, desktop, self.skinAttributes)
20                         ret = True
21                 s = self.long_text.size()
22                 self.instance.move(self.long_text.position())
23                 lineheight=fontRenderClass.getInstance().getLineHeight( self.long_text.getFont() )
24                 lines = (int)(s.height() / lineheight)
25                 self.pageHeight = (int)(lines * lineheight)
26                 self.instance.resize(eSize(s.width(), self.pageHeight+(int)(lineheight/6)))
27                 self.scrollbar.move(ePoint(s.width()-20,0))
28                 self.scrollbar.resize(eSize(20,self.pageHeight+(int)(lineheight/6)))
29                 self.scrollbar.setOrientation(eSlider.orVertical);
30                 self.scrollbar.setRange(0,100)
31                 self.scrollbar.setBorderWidth(1)
32                 self.long_text.move(ePoint(0,0))
33                 self.long_text.resize(eSize(s.width()-30, self.pageHeight*16))
34                 self.setText(self.message)
35                 return ret
36
37         def setText(self, text):
38                 self.message = text
39                 if self.long_text is not None and self.pageHeight:
40                         self.long_text.move(ePoint(0,0))
41                         self.long_text.setText(self.message)
42                         text_height=self.long_text.calculateSize().height()
43                         total=self.pageHeight
44                         pages=1
45                         while total < text_height:
46                                 total=total+self.pageHeight
47                                 pages=pages+1
48                         if pages > 1:
49                                 self.scrollbar.show()
50                                 self.total = total
51                                 self.pages = pages
52                                 self.updateScrollbar()
53                         else:
54                                 self.scrollbar.hide()
55                                 self.total = None
56                                 self.pages = None
57
58         def appendText(self, text):
59                 old_text = self.getText()
60                 if len(str(old_text)) >0:
61                         self.message += text
62                 else:
63                         self.message = text
64                 if self.long_text is not None:
65                         self.long_text.setText(self.message)
66                         text_height=self.long_text.calculateSize().height()
67                         total=self.pageHeight
68                         pages=1
69                         while total < text_height:
70                                 total=total+self.pageHeight
71                                 pages=pages+1
72                         if pages > 1:
73                                 self.scrollbar.show()
74                                 self.total = total
75                                 self.pages = pages
76                                 self.updateScrollbar()
77                         else:
78                                 self.scrollbar.hide()
79                                 self.total = None
80                                 self.pages = None
81
82         def updateScrollbar(self):
83                 start = -self.long_text.position().y() * 100 / self.total
84                 vis = self.pageHeight * 100 / self.total;
85                 self.scrollbar.setStartEnd(start, start+vis)
86
87         def getText(self):
88                 return self.message
89
90         def GUIcreate(self, parent):
91                 self.instance = eWidget(parent)
92                 self.scrollbar = eSlider(self.instance)
93                 self.long_text = eLabel(self.instance)
94
95         def GUIdelete(self):
96                 self.long_text = None
97                 self.scrollbar = None
98                 self.instance = None
99
100         def pageUp(self):
101                 if self.total is not None:
102                         curPos = self.long_text.position()
103                         if curPos.y() < 0:
104                                 self.long_text.move( ePoint( curPos.x(), curPos.y() + self.pageHeight ) )
105                                 self.updateScrollbar()
106
107         def pageDown(self):
108                 if self.total is not None:
109                         curPos = self.long_text.position()
110                         if self.total-self.pageHeight >= abs( curPos.y() - self.pageHeight ):
111                                 self.long_text.move( ePoint( curPos.x(), curPos.y() - self.pageHeight ) )
112                                 self.updateScrollbar()
113
114         def lastPage(self):
115                 i=1
116                 while i < self.pages:
117                         self.pageDown()
118                         i += 1 
119                         self.updateScrollbar()
120
121         def produceHTML(self):
122                 return self.getText()