eric7/WebBrowser/AutoScroll/FrameScroller.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2021 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 import math
16
17 from PyQt5.QtCore import pyqtSlot, QObject, QTimer
18
19
20 class FrameScroller(QObject):
21 """
22 Class implementing a web page scroller object.
23 """
24 def __init__(self, parent=None):
25 """
26 Constructor
27
28 @param parent reference to the parent object
29 @type QObject
30 """
31 super().__init__(parent)
32
33 self.__page = None
34
35 self.__lengthX = 0
36 self.__lengthY = 0
37 self.__divider = 8.0
38
39 self.__timer = QTimer(self)
40 self.__timer.setInterval(10)
41 self.__timer.timeout.connect(self.__scrollStep)
42
43 def setPage(self, page):
44 """
45 Public method to set the web page to be scrolled.
46
47 @param page page to be scrolled
48 @type WebBrowserPage
49 """
50 self.__page = page
51
52 def scrollDivider(self):
53 """
54 Public method to get the current scroll divider value.
55
56 @return scroll divider
57 @rtype float
58 """
59 return self.__divider
60
61 def setScrollDivider(self, divider):
62 """
63 Public method to set the scroll divider value.
64
65 @param divider scroll divider
66 @type float
67 """
68 self.__divider = divider
69
70 def startScrolling(self, lengthX, lengthY):
71 """
72 Public method to start scrolling.
73
74 @param lengthX X distance from scroll indicator
75 @type int
76 @param lengthY Y distance from scroll indicator
77 @type int
78 """
79 self.__lengthX = lengthX
80 self.__lengthY = lengthY
81
82 if not self.__lengthX and not self.__lengthY:
83 self.__timer.stop()
84 elif not self.__timer.isActive():
85 self.__timer.start()
86
87 def stopScrolling(self):
88 """
89 Public method to stop scrolling.
90 """
91 self.__timer.stop()
92
93 @pyqtSlot()
94 def __scrollStep(self):
95 """
96 Private slot to scroll one step.
97 """
98 self.__page.scroll(
99 math.ceil(self.__lengthX / self.__divider),
100 math.ceil(self.__lengthY / self.__divider)
101 )

eric ide

mercurial