aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/tools/baseTool.py
blob: b1fb285487c1e86ba141e17b2022375d7f9b90de (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
from math import copysign
from PyQt5.QtCore import QObject
from PyQt5.QtGui import QCursor


class BaseTool(QObject):
    name = "Tool"
    cursor = QCursor()
    iconPath = None

    def __init__(self, parent=None):
        super().__init__(parent)

    def toolActivated(self):
        pass

    def toolDisabled(self):
        pass

    @property
    def _glyph(self):
        return self.parent().glyph()

    # helper functions

    def clampToOrigin(self, pos, origin):
        deltaX = pos.x() - origin.x()
        deltaY = pos.y() - origin.y()
        # go into the first quadrant to simplify our study
        aDeltaX = abs(deltaX)
        aDeltaY = abs(deltaY)
        if aDeltaY >= aDeltaX * 2:
            pos.setX(origin.x())
        elif aDeltaY > aDeltaX / 2:
            avg = (aDeltaX + aDeltaY) / 2
            pos.setX(origin.x() + copysign(avg, deltaX))
            pos.setY(origin.y() + copysign(avg, deltaY))
        else:
            pos.setY(origin.y())
        return pos

    def magnetPos(self, pos):
        widget = self.parent()
        itemTuple = widget.itemAt(pos)
        if itemTuple is not None:
            itemUnderMouse, parent = itemTuple
            if parent is not None:
                pos.setX(itemUnderMouse.x)
                pos.setY(itemUnderMouse.y)
        return pos

    # events

    def keyPressEvent(self, event):
        pass

    def keyReleaseEvent(self, event):
        pass

    def mousePressEvent(self, event):
        pass

    def mouseMoveEvent(self, event):
        pass

    def mouseReleaseEvent(self, event):
        pass

    def mouseDoubleClickEvent(self, event):
        pass

    # custom painting

    def paint(self, painter):
        pass