eric7/WebBrowser/AutoScroll/FrameScroller.py

Sun, 16 May 2021 20:07:24 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 May 2021 20:07:24 +0200
branch
eric7
changeset 8318
962bce857696
parent 8312
800c432b34c8
child 8881
54e42bc2437a
permissions
-rw-r--r--

Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.

# -*- coding: utf-8 -*-

# Copyright (c) 2016 - 2021 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>
#

import math

from PyQt6.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().__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