aboutsummaryrefslogtreecommitdiff
path: root/src/gui/preview_win.py
blob: 3db420cdf523af78e8f707046c77fb7b9d3bc487 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from PyQt5 import QtCore, QtGui, QtWidgets
import logging

log = logging.getLogger('AVP.Gui.PreviewWindow')


class PreviewWindow(QtWidgets.QLabel):
    '''
        Paints the preview QLabel in MainWindow and maintains the aspect ratio
        when the window is resized.
    '''
    def __init__(self, parent, img):
        super(PreviewWindow, self).__init__()
        self.parent = parent
        self.setFrameStyle(QtWidgets.QFrame.StyledPanel)
        self.pixmap = QtGui.QPixmap(img)

    def paintEvent(self, event):
        size = self.size()
        painter = QtGui.QPainter(self)
        point = QtCore.QPoint(0, 0)
        scaledPix = self.pixmap.scaled(
            size,
            QtCore.Qt.KeepAspectRatio,
            transformMode=QtCore.Qt.SmoothTransformation)

        # start painting the label from left upper corner
        point.setX((size.width() - scaledPix.width())/2)
        point.setY((size.height() - scaledPix.height())/2)
        painter.drawPixmap(point, scaledPix)

    def changePixmap(self, img):
        self.pixmap = QtGui.QPixmap(img)
        self.repaint()

    def mousePressEvent(self, event):
        if self.parent.encoding:
            return

        i = self.parent.window.listWidget_componentList.currentRow()
        if i >= 0:
            component = self.parent.core.selectedComponents[i]
            if not hasattr(component, 'previewClickEvent'):
                return
            pos = (event.x(), event.y())
            size = (self.width(), self.height())
            butt = event.button()
            log.info('Click event for #%s: %s button %s' % (
                i, pos, butt))
            component.previewClickEvent(
                pos, size, butt
            )

    @QtCore.pyqtSlot(str)
    def threadError(self, msg):
        self.parent.showMessage(
            msg=msg,
            icon='Critical',
            parent=self
        )
        log.info('%', repr(self.parent))