-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.py
More file actions
125 lines (93 loc) · 3.85 KB
/
MainWindow.py
File metadata and controls
125 lines (93 loc) · 3.85 KB
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
from CustomControl import TabWidget
from DayTab import DayTab
from GlobalData import *
from MonthTab import MonthTab
from NewTaskTab import NewTaskTab
from datetime import datetime
from PyQt5.QtCore import QLocale, QTimer
from PyQt5.QtGui import QIcon, QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
'''The program main window.'''
UPDATE_INTERVAL = 1000
'''Interval between calls of `updateUpcomingTasksDisplay` in seconds.'''
REFRESH_COUNT = 60
'''Force a data refresh every REFRESH_COUNT intervals.'''
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setLocale(QLocale(QLocale.English))
self.setWindowTitle('Study Assistant')
self.setWindowIcon(QIcon('calendar-icon.png'))
self.monthTab = MonthTab()
self.dayTab = DayTab()
self.newTaskTab = NewTaskTab()
self.newTaskTab.addButton.clicked.connect(
lambda: self.onAddButtonClicked())
centralWidget = TabWidget()
centralWidget.addTab(self.monthTab, 'Month')
centralWidget.addTab(self.dayTab, 'Day')
centralWidget.addTab(self.newTaskTab, 'New Task')
self.setCentralWidget(centralWidget)
self.setStyleSheet(self.styleSheet() + '''
MainWindow {
background-color: rgb(206, 206, 206);
}
''')
self.timer = QTimer()
self.timer.setInterval(MainWindow.UPDATE_INTERVAL)
self.refreshCounter = 0
self.timer.timeout.connect(lambda: self.onTimerTimeOut())
self.updateUpcomingTasksDisplay(True)
self.timer.start()
def onTimerTimeOut(self):
self.refreshCounter += 1
if self.refreshCounter >= MainWindow.REFRESH_COUNT:
self.updateUpcomingTasksDisplay(True)
self.refreshCounter = 0
else:
self.updateUpcomingTasksDisplay(False)
def onAddButtonClicked(self):
self.refreshCounter = MainWindow.REFRESH_COUNT - 1
def updateUpcomingTasksDisplay(self, forceRefresh):
'''Update the upcoming tasks display. If `forceRefresh` is true,
`updateUpcomingTasks` function is guaranteed to be rerun.'''
now = datetime.now()
if forceRefresh or len(upcomingTasks) == 0 or \
now >= upcomingTasks[0][1]:
updateUpcomingTasks(now)
rows = len(upcomingTasks)
model = QStandardItemModel(rows, 4)
model.setHorizontalHeaderLabels(['Name', 'Start', 'End', 'Deadline'])
def sft(time): return time.strftime('%m/%d/%Y, %H:%M')
for row in range(rows):
name, startTime, endTime, deadline = upcomingTasks[row]
model.setItem(row, 0, QStandardItem(name))
model.setItem(row, 1, QStandardItem(sft(startTime)))
model.setItem(row, 2, QStandardItem(sft(endTime)))
if deadline is not None:
model.setItem(row, 3, QStandardItem(sft(deadline)))
tableView = self.monthTab.taskViewer.tableView
tableView.setModel(model)
tableView.resizeColumnsToContents()
tableView = self.dayTab.taskViewer.tableView
tableView.setModel(model)
tableView.resizeColumnsToContents()
if len(upcomingTasks) > 0:
delta = upcomingTasks[0][1] - now
if delta.days < 3:
hour = delta.days * 24 + delta.seconds // 3600
minute = delta.seconds // 60 % 60
else:
hour = 99
minute = 99
else:
hour = 99
minute = 99
self.monthTab.taskViewer.displayCountDown(hour, minute)
self.dayTab.taskViewer.displayCountDown(hour, minute)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
adder = MainWindow()
adder.show()
app.exec_()