eric7/Snapshot/SnapshotPreview.py

branch
eric7
changeset 8312
800c432b34c8
parent 8260
2161475d9639
child 8318
962bce857696
diff -r 4e8b98454baa -r 800c432b34c8 eric7/Snapshot/SnapshotPreview.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Snapshot/SnapshotPreview.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the snapshot preview label.
+"""
+
+from PyQt5.QtCore import pyqtSignal, QPoint, Qt
+from PyQt5.QtWidgets import QLabel, QApplication
+
+
+class SnapshotPreview(QLabel):
+    """
+    Class implementing the snapshot preview label.
+    
+    @signal startDrag() emitted to indicate the start of a drag operation
+    """
+    startDrag = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.setAlignment(Qt.AlignmentFlag.AlignHCenter |
+                          Qt.AlignmentFlag.AlignCenter)
+        self.setCursor(Qt.CursorShape.OpenHandCursor)
+        
+        self.__mouseClickPoint = QPoint(0, 0)
+    
+    def setPreview(self, preview):
+        """
+        Public slot to set the preview picture.
+        
+        @param preview preview picture to be shown (QPixmap)
+        """
+        pixmap = (
+            preview.scaled(
+                self.width(), self.height(),
+                Qt.AspectRatioMode.KeepAspectRatio,
+                Qt.TransformationMode.SmoothTransformation)
+            if not preview.isNull() else
+            preview
+        )
+        self.setPixmap(pixmap)
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method to handle mouse button presses.
+        
+        @param evt mouse button press event (QMouseEvent)
+        """
+        if evt.button() == Qt.MouseButton.LeftButton:
+            self.__mouseClickPoint = evt.pos()
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method to handle mouse button releases.
+        
+        @param evt mouse button release event (QMouseEvent)
+        """
+        self.__mouseClickPoint = QPoint(0, 0)
+    
+    def mouseMoveEvent(self, evt):
+        """
+        Protected method to handle mouse moves.
+        
+        @param evt mouse move event (QMouseEvent)
+        """
+        if (
+            self.__mouseClickPoint != QPoint(0, 0) and
+            (evt.pos() - self.__mouseClickPoint).manhattanLength() >
+            QApplication.startDragDistance()
+        ):
+            self.__mouseClickPoint = QPoint(0, 0)
+            self.startDrag.emit()

eric ide

mercurial