WebBrowser/AutoScroll/FrameScroller.py

changeset 4958
ef400197e7d5
child 4961
f29e590ec5e0
equal deleted inserted replaced
4957:55c9bb589b0a 4958:ef400197e7d5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing an object to scroll a web page.
8 """
9
10 #
11 # This module is based on the Qupzilla frame scroller.
12 # Copyright (C) 2014 David Rosca <nowrep@gmail.com>
13 #
14
15 from __future__ import unicode_literals
16
17 import math
18
19 from PyQt5.QtCore import pyqtSlot, QObject, QTimer
20
21
22 class FrameScroller(QObject):
23 """
24 Class implementing a web page scroller object.
25 """
26 def __init__(self, parent=None):
27 """
28 Constructor
29
30 @param parent reference to the parent object
31 @type QObject
32 """
33 super(FrameScroller, self).__init__(parent)
34
35 self.__page = None
36
37 self.__lengthX = 0
38 self.__lengthY = 0
39 self.__divider = 8.0
40
41 self.__timer = QTimer(self)
42 self.__timer.setInterval(10)
43 self.__timer.timeout.connect(self.__scrollStep)
44
45 def setPage(self, page):
46 """
47 Public method to set the web page to be scrolled.
48
49 @param page page to be scrolled
50 @type WebBrowserPage
51 """
52 self.__page = page
53
54 def scrollDivider(self):
55 """
56 Public method to get the current scroll divider value.
57
58 @return scroll divider
59 @rtype float
60 """
61 return self.__divider
62
63 def setScrollDivider(self, divider):
64 """
65 Public method to set the scroll divider value.
66
67 @param divider scroll divider
68 @type float
69 """
70 self.__divider = divider
71
72 def startScrolling(self, lengthX, lengthY):
73 """
74 Public method to start scrolling.
75
76 @param lengthX X distance from scroll indicator
77 @type int
78 @param lengthY Y distance from scroll indicator
79 @type int
80 """
81 self.__lengthX = lengthX
82 self.__lengthY = lengthY
83
84 if not self.__lengthX and not self.__lengthY:
85 self.__timer.stop()
86 elif not self.__timer.isActive():
87 self.__timer.start()
88
89 def stopScrolling(self):
90 """
91 Public method to stop scrolling.
92 """
93 self.__timer.stop()
94
95 @pyqtSlot()
96 def __scrollStep(self):
97 """
98 Private slot to scroll one step.
99 """
100 self.__page.scroll(
101 math.ceil(self.__lengthX / self.__divider),
102 math.ceil(self.__lengthY / self.__divider)
103 )

eric ide

mercurial