X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8607541e1bf8913140a3960206e07a3240cc421a..7f8d4d2a7d36008888785e61481ccd41fe489f12:/lib/python/Components/ScrollLabel.py diff --git a/lib/python/Components/ScrollLabel.py b/lib/python/Components/ScrollLabel.py new file mode 100644 index 00000000..4a5caf6a --- /dev/null +++ b/lib/python/Components/ScrollLabel.py @@ -0,0 +1,85 @@ +import skin +from HTMLComponent import * +from GUIComponent import * +from enigma import eLabel, eWidget, eSlider, fontRenderClass, ePoint, eSize + +class ScrollLabel(HTMLComponent, GUIComponent): + def __init__(self, text=""): + self.message = text + self.instance = None + self.long_text = None + self.scrollbar = None + self.pages = None + self.total = None + + def applySkin(self, desktop): + skin.applyAllAttributes(self.long_text, desktop, self.skinAttributes) + s = self.long_text.size() + self.instance.move(self.long_text.position()) + self.scrollbar.move(ePoint(s.width()-20,0)) + self.scrollbar.resize(eSize(20,s.height())) + self.scrollbar.setOrientation(eSlider.orVertical); + self.scrollbar.setRange(0,100) + lineheight=fontRenderClass.getInstance().getLineHeight( self.long_text.getFont() ) + lines = (int)(s.height() / lineheight) + self.pageHeight = (int)(lines * lineheight) + self.instance.resize(eSize(s.width(), self.pageHeight+(int)(lineheight/6))) + self.long_text.move(ePoint(0,0)) + self.long_text.resize(eSize(s.width()-30, self.pageHeight*16)) + self.setText(self.message) + + def setText(self, text): + self.message = text + if self.long_text is not None: + self.long_text.move(ePoint(0,0)) + self.long_text.setText(self.message) + text_height=self.long_text.calculateSize().height() + total=self.pageHeight + pages=1 + while total < text_height: + total=total+self.pageHeight + pages=pages+1 + if pages > 1: + self.scrollbar.show() + self.total = total + self.pages = pages + self.updateScrollbar() + else: + self.scrollbar.hide() + self.total = None + self.pages = None + + def updateScrollbar(self): + start = -self.long_text.position().y() * 100 / self.total + vis = self.pageHeight * 100 / self.total; + self.scrollbar.setStartEnd(start, start+vis) + + def getText(self): + return self.message + + def GUIcreate(self, parent): + self.instance = eWidget(parent) + self.scrollbar = eSlider(self.instance) + self.long_text = eLabel(self.instance) + + def GUIdelete(self): + self.long_text = None + self.scrollbar = None + self.instance = None + + def pageUp(self): + if self.total is not None: + curPos = self.long_text.position() + if curPos.y() < 0: + self.long_text.move( ePoint( curPos.x(), curPos.y() + self.pageHeight ) ) + self.updateScrollbar() + + def pageDown(self): + if self.total is not None: + curPos = self.long_text.position() + if self.total-self.pageHeight >= abs( curPos.y() - self.pageHeight ): + self.long_text.move( ePoint( curPos.x(), curPos.y() - self.pageHeight ) ) + self.updateScrollbar() + + def produceHTML(self): + return self.getText()