WebBrowser/AutoScroll/FrameScroller.py

changeset 4958
ef400197e7d5
child 4961
f29e590ec5e0
diff -r 55c9bb589b0a -r ef400197e7d5 WebBrowser/AutoScroll/FrameScroller.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/AutoScroll/FrameScroller.py	Sat Apr 30 20:01:30 2016 +0200
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an object to scroll a web page.
+"""
+
+#
+# This module is based on the Qupzilla frame scroller.
+# Copyright (C) 2014  David Rosca <nowrep@gmail.com>
+#
+
+from __future__ import unicode_literals
+
+import math
+
+from PyQt5.QtCore import pyqtSlot, QObject, QTimer
+
+
+class FrameScroller(QObject):
+    """
+    Class implementing a web page scroller object.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super(FrameScroller, self).__init__(parent)
+        
+        self.__page = None
+        
+        self.__lengthX = 0
+        self.__lengthY = 0
+        self.__divider = 8.0
+        
+        self.__timer = QTimer(self)
+        self.__timer.setInterval(10)
+        self.__timer.timeout.connect(self.__scrollStep)
+    
+    def setPage(self, page):
+        """
+        Public method to set the web page to be scrolled.
+        
+        @param page page to be scrolled
+        @type WebBrowserPage 
+        """
+        self.__page = page
+    
+    def scrollDivider(self):
+        """
+        Public method to get the current scroll divider value.
+        
+        @return scroll divider
+        @rtype float
+        """
+        return self.__divider
+    
+    def setScrollDivider(self, divider):
+        """
+        Public method to set the scroll divider value.
+        
+        @param divider scroll divider
+        @type float
+        """
+        self.__divider = divider
+    
+    def startScrolling(self, lengthX, lengthY):
+        """
+        Public method to start scrolling.
+        
+        @param lengthX X distance from scroll indicator
+        @type int
+        @param lengthY Y distance from scroll indicator
+        @type int
+        """
+        self.__lengthX = lengthX
+        self.__lengthY = lengthY
+        
+        if not self.__lengthX and not self.__lengthY:
+            self.__timer.stop()
+        elif not self.__timer.isActive():
+            self.__timer.start()
+    
+    def stopScrolling(self):
+        """
+        Public method to stop scrolling.
+        """
+        self.__timer.stop()
+    
+    @pyqtSlot()
+    def __scrollStep(self):
+        """
+        Private slot to scroll one step.
+        """
+        self.__page.scroll(
+            math.ceil(self.__lengthX / self.__divider),
+            math.ceil(self.__lengthY / self.__divider)
+        )

eric ide

mercurial