-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimerCircle.py
149 lines (123 loc) · 5.9 KB
/
timerCircle.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from PyQt6.QtCore import QTimer
from logic import * # ?
from settingsWindow import *
class TimerCircle(QGraphicsItemGroup):
def __init__(self,x,y,r, session_length, break_length, qm):
super().__init__()
self.setParentItem(qm)
backgroundRect = QGraphicsRectItem(x,y,r,r)
backgroundRect.setVisible(False)
outlineCircle = QGraphicsEllipseItem(x,y,r,r)
outlineCircle.setVisible(False)
self.outlineCircle = outlineCircle
self.x_pos = x
self.y_pos = y
self.r = r
tempText1 = QGraphicsSimpleTextItem("2:34") # !!! fix
tempText1.setFont(QFont("TypeWriter", 15, 0, False))
tempText1.setY(y - tempText1.boundingRect().height()/2)
tempText1.setX(x - tempText1.boundingRect().width()/2)
self.addToGroup(tempText1)
self.addToGroup(backgroundRect)
self.tempText1 = tempText1
self.center = (outlineCircle.boundingRect().x()+outlineCircle.boundingRect().width()/2, outlineCircle.boundingRect().y()+outlineCircle.boundingRect().height()/2)
self.radius = outlineCircle.boundingRect().width()/2
self.sessionTime = session_length * 1000
self.breakTime = break_length * 1000
self.interval = 33
self.currentTime = self.sessionTime - self.interval
self.timer = QTimer()
self.timer.setTimerType(Qt.TimerType.PreciseTimer)
self.timer.setInterval(self.interval)
self.timer.timeout.connect(self.update_time)
self.repaint()
def restart_time(self):
self.currentTime = self.sessionTime
self.parentItem().currentState = "session"
self.timer.start()
def update_time(self):
if self.currentTime > self.interval:
self.currentTime -= self.interval
self.repaint()
self.update()
else:
match self.parentItem().currentState:
case "session":
if self.breakTime > 0:
self.parentItem().frame.breakMask.setVisible(True)
self.currentTime = self.breakTime
self.parentItem().currentState = "break"
else:
self.currentTime = self.sessionTime
imgName = self.getNextImg()
self.parentItem().frame.imgName = imgName
self.parentItem().frame.changeBackground(imgName)
self.parentItem().addToHistory(imgName)
case "break":
self.parentItem().frame.breakMask.setVisible(False)
self.currentTime = self.sessionTime
self.parentItem().currentState = "session"
if self.parentItem().historyIndex == 0:
imgName = self.getNextImg()
self.parentItem().frame.imgName = imgName
self.parentItem().frame.changeBackground(imgName)
self.parentItem().addToHistory(imgName)
else:
self.parentItem().historyIndex -= 1
imgName = self.parentItem().imgHistory[self.parentItem().historyIndex]
self.parentItem().frame.imgName = imgName
self.parentItem().frame.changeBackground(imgName)
def timerPressed(self):
if self.parentItem().currentState == "break":
self.parentItem().frame.breakMask.setVisible(True)
else:
self.parentItem().frame.breakMask.setVisible(False)
# well, more shit to refactor
if self.parentItem().directory == None:
return
if self.timer.isActive():
self.timer.stop()
else:
self.timer.start()
def getNextImg(self):
return self.parentItem().getNextImg()
def repaint(self):
time = self.currentTime
remaining = int(time/1000) + 1
(minutes, seconds) = (math.floor(remaining/60), (remaining % 60))
if len(str(seconds)) == 1:
seconds = "0" + str(seconds)
clockText = str(minutes) + ":" + str(seconds)
self.tempText1.setText(clockText)
self.tempText1.setY(self.outlineCircle.boundingRect().center().y() - self.tempText1.boundingRect().height()/2)
self.tempText1.setX(self.outlineCircle.boundingRect().center().x() - self.tempText1.boundingRect().width()/2)
def paint(self, painter: QPainter | None, option: QStyleOptionGraphicsItem | None, widget: QWidget | None = ...) -> None:
if self.parentItem().currentState == "session":
fullTime = self.sessionTime
else:
fullTime = self.breakTime
angle = int(5760 * (self.currentTime/fullTime)) - 100
painter.setRenderHint(QPainter.RenderHint.Antialiasing)
painter.setBrush(0)
painter.drawEllipse(self.x_pos,self.y_pos,self.r,self.r) # border circle
if self.parentItem().currentState == "session":
painter.setBrush(QColorConstants.LightGray)
else:
painter.setBrush(QColor(250,215,160))
painter.drawEllipse(self.x_pos+1,self.y_pos+1,self.r-2,self.r-2) # outer circle
tempPen = QPen(0)
tempPen.setWidth(5)
painter.setPen(tempPen)
if angle < 50 :
tempAngle = 50
else:
tempAngle = angle
painter.drawArc(self.x_pos+6,self.y_pos+6,self.r-12,self.r-12, 1440,tempAngle-50)
painter.setPen(0)
painter.setBrush(0)
painter.drawEllipse(self.x_pos + int(self.r / 2), self.y_pos + 4,4,4)
origin_x = self.x_pos + self.r/2 - 2
origin_y = self.y_pos + self.r/2 - 2
theta = angle / 5760 * 2 * math.pi + (math.pi / 2)
painter.drawEllipse(int(origin_x + math.cos(theta) * (self.r/2-6)), int(origin_y - math.sin(theta) * (self.r/2-6)), 5, 5)
return super().paint(painter, option, widget)