aboutsummaryrefslogtreecommitdiffstats
path: root/extras/UI_Handeler.py
blob: d591766581b1b7be96f8829401f4395c4cc18693 (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from main import *
from PyQt5.QtCore import QPropertyAnimation
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5.QtCore import QTimeLine
from PyQt5.QtWidgets import QWidget, QStackedWidget, QPushButton
from functools import partial

class UI_Handeler(MainWindow):
    def toggleNavigationBar(self, maxWidth, enable):
        if enable:
            width = self.leftMenuSubContainer.width()
            maxExtend = maxWidth
            standard = 80

            if width == 80:
                widthExtended = maxExtend
            else:
                widthExtended = standard

            self.animation = QPropertyAnimation(self.leftMenuSubContainer, b"minimumWidth")
            self.animation.setDuration(400)
            self.animation.setStartValue(width)
            self.animation.setEndValue(widthExtended)
            self.animation.setEasingCurve(QtCore.QEasingCurve.InOutQuart)
            self.animation.start()

    # animate switching pages for QstackedWidget with the animation being a fade in and out
    def animateSwitch(self, index):
        self.fader_widget = FaderWidget(self.stackedWidget.currentWidget(), self.stackedWidget.widget(index))
        self.stackedWidget.setCurrentIndex(index)

    # add window resizing to the UI
    def toggleMaximized(self):
        if self.isMaximized():
            self.showNormal()
        else:
            self.showMaximized()

    # move the window by dragging the header
    def moveWindow(self, event):

        if event.buttons() == QtCore.Qt.LeftButton:
            self.move(self.pos() + event.globalPos() - self.clickPosition)
            self.clickPosition = event.globalPos()
            event.accept()

    # get the position of the mouse when clicked
    def mousePressEvent(self, event):
        self.clickPosition = event.globalPos()
        event.accept()

    # get the position of the mouse when released
    def mouseReleaseEvent(self, event):
        self.clickPosition = None
        event.accept()

class FaderWidget(QWidget):
    def __init__(self, old_widget, new_widget): 
        QWidget.__init__(self, new_widget)    
        self.old_pixmap = QPixmap(new_widget.size())
        old_widget.render(self.old_pixmap)
        self.pixmap_opacity = 1.0  
        self.timeline = QTimeLine()
        self.timeline.valueChanged.connect(self.animate)
        self.timeline.finished.connect(self.close)
        self.timeline.setDuration(250)
        self.timeline.start()  
        self.resize(new_widget.size())
        self.show()
    
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setOpacity(self.pixmap_opacity)
        painter.drawPixmap(0, 0, self.old_pixmap)
        painter.end()
    
    def animate(self, value):
        self.pixmap_opacity = 1.0 - value
        self.repaint()