source: ipk/source/swapinfos_streetinfo/var/swap/extensions/StreetInfo/Scroll.py@ 8578

Last change on this file since 8578 was 7451, checked in by BPanther, 15 years ago

[ipk] - copy source->source.sh4

File size: 4.3 KB
Line 
1import skin
2from Components.HTMLComponent import HTMLComponent
3from Components.GUIComponent import GUIComponent
4from enigma import eLabel, eWidget, eSlider, fontRenderClass, ePoint, eSize
5
6class Scroll(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, parent):
17 ret = False
18 if self.skinAttributes is not None:
19 skin.applyAllAttributes(self.long_text, desktop, self.skinAttributes, parent.scale)
20 widget_attribs = [ ]
21 scrollbar_attribs = [ ]
22 for (attrib, value) in self.skinAttributes:
23 if attrib.find("borderColor") != -1 or attrib.find("borderWidth") != -1:
24 scrollbar_attribs.append((attrib,value))
25 if attrib.find("transparent") != -1 or attrib.find("backgroundColor") != -1:
26 widget_attribs.append((attrib,value))
27 skin.applyAllAttributes(self.instance, desktop, widget_attribs, parent.scale)
28 skin.applyAllAttributes(self.scrollbar, desktop, scrollbar_attribs+widget_attribs, parent.scale)
29 ret = True
30 s = self.long_text.size()
31 self.instance.move(self.long_text.position())
32 lineheight=fontRenderClass.getInstance().getLineHeight( self.long_text.getFont() )
33 if not lineheight:
34 lineheight = 30 # assume a random lineheight if nothing is visible
35 lines = (int)(s.height() / lineheight)
36 self.pageHeight = (int)(lines * lineheight)
37 self.instance.resize(eSize(s.width(), self.pageHeight+(int)(lineheight/6)))
38 self.scrollbar.move(ePoint(s.width()-20,0))
39 self.scrollbar.resize(eSize(20,self.pageHeight+(int)(lineheight/6)))
40 self.scrollbar.setOrientation(eSlider.orVertical);
41 self.scrollbar.setRange(0,100)
42 self.scrollbar.setBorderWidth(1)
43 self.long_text.move(ePoint(0,0))
44 self.long_text.resize(eSize(s.width()-30, self.pageHeight*16))
45 self.setText(self.message)
46 return ret
47
48 def setText(self, text):
49 self.message = text
50 if self.long_text is not None and self.pageHeight:
51 self.long_text.move(ePoint(0,0))
52 self.long_text.setText(self.message)
53 text_height=self.long_text.calculateSize().height()
54 total=self.pageHeight
55 pages=1
56 while total < text_height:
57 total=total+self.pageHeight
58 pages=pages+1
59 if pages > 1:
60 self.scrollbar.show()
61 self.total = total
62 self.pages = pages
63 self.updateScrollbar()
64 else:
65 self.scrollbar.hide()
66 self.total = None
67 self.pages = None
68
69 def appendText(self, text):
70 old_text = self.getText()
71 if len(str(old_text)) >0:
72 self.message += text
73 else:
74 self.message = text
75 if self.long_text is not None:
76 self.long_text.setText(self.message)
77 text_height=self.long_text.calculateSize().height()
78 total=self.pageHeight
79 pages=1
80 while total < text_height:
81 total=total+self.pageHeight
82 pages=pages+1
83 if pages > 1:
84 self.scrollbar.show()
85 self.total = total
86 self.pages = pages
87 self.updateScrollbar()
88 else:
89 self.scrollbar.hide()
90 self.total = None
91 self.pages = None
92
93 def updateScrollbar(self):
94 start = -self.long_text.position().y() * 100 / self.total
95 vis = self.pageHeight * 100 / self.total;
96 self.scrollbar.setStartEnd(start, start+vis)
97
98 def getText(self):
99 return self.message
100
101 def GUIcreate(self, parent):
102 self.instance = eWidget(parent)
103 self.scrollbar = eSlider(self.instance)
104 self.long_text = eLabel(self.instance)
105
106 def GUIdelete(self):
107 self.long_text = None
108 self.scrollbar = None
109 self.instance = None
110
111 def pageUp(self):
112 if self.total is not None:
113 curPos = self.long_text.position()
114 if curPos.y() < 0:
115 self.long_text.move( ePoint( curPos.x(), curPos.y() + self.pageHeight ) )
116 self.updateScrollbar()
117
118 def firstPage(self):
119 if self.total is not None:
120 curPos = self.long_text.position()
121 if curPos.y() < 0:
122 self.long_text.move( ePoint( curPos.x(), 0 ) )
123 self.updateScrollbar()
124
125 def pageDown(self):
126 if self.total is not None:
127 curPos = self.long_text.position()
128 if self.total-self.pageHeight >= abs( curPos.y() - self.pageHeight ):
129 self.long_text.move( ePoint( curPos.x(), curPos.y() - self.pageHeight ) )
130 self.updateScrollbar()
131
132 def lastPage(self):
133 i=1
134 while i < self.pages:
135 self.pageDown()
136 i += 1
137 self.updateScrollbar()
138
139 def produceHTML(self):
140 return self.getText()
Note: See TracBrowser for help on using the repository browser.