Subversion Repositories ExamClock

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 ron.wellst 1
#-----------------------------------------------------------------------------
2
# Name:        mainwindow.py
3
# Purpose:
4
#
5
# Author:      Ron Wellsted
6
#
7
# Created:     2015-10-13
8
# Copyright:   (c) 2015
9
# Licence:     GPL 3.0
10
#-----------------------------------------------------------------------------
11
# Date      Author          Modification
12
#-----------------------------------------------------------------------------
13
# -*- coding: utf-8 -*-
14
from PyQt4 import uic, QtGui
15
from PyQt4.QtCore import pyqtSlot, QTime, QTimer
16
 
17
(Ui_MainWindow, QMainWindow) = uic.loadUiType('mainwindow.ui')
18
 
19
# Exam durations and half time as hh:mm:ss
20
FoundationDuration = '00:55:00'
21
FoundationHalfTime = '00:27:30'
22
IntermediateDuration = '01:25:00'
23
IntermediateHalfTime = '00:42:30'
24
AdvancedDuration = '02:00:00'
25
AdvancedHalfTime = '01:00:00'
26
 
27
class MainWindow (QMainWindow):
28
    """MainWindow inherits QMainWindow"""
29
    _timer = None
30
    _Foundation = QTime.fromString(FoundationDuration)
31
    _FoundationHalfTime = QTime.fromString(FoundationHalfTime)
32
    _Intermediate = QTime.fromString(IntermediateDuration)
33
    _IntermediateHalfTime = QTime.fromString(IntermediateHalfTime)
34
    _Advanced = QTime.fromString(AdvancedDuration)
35
    _AdvancedHalfTime = QTime.fromString(AdvancedHalfTime)
36
    _Elapsed = QTime.fromString('00:00:00')
37
    _running = False
38
    _zero = QTime.fromString('00:00:00')
39
    _TenMins = QTime.fromString('00:10:00')
40
 
41
    def __init__ (self, parent = None):
42
        QMainWindow.__init__(self, parent)
43
        self.ui = Ui_MainWindow()
44
        self.ui.setupUi(self)
45
        self._timer = QTimer()
46
        self._timer.timeout.connect(self.slotUpdate)
47
        self._timer.start(1000)
48
        time = QTime.currentTime()
49
        now = time.toString('hh:mm:ss')
50
        self.ui.lcdNow.display(now)
51
        self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
52
        self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
53
        self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
54
        self.ui.lcdElapsed.display(self._Elapsed.toString('hh:mm:ss'))
55
 
56
    def closeEvent(self, event):
57
        if QtGui.QMessageBox.question(self, 'Confirmation', 'Close application ?', \
58
                QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes:
59
            event.ignore()
60
        else:
61
            event.accept()
62
 
63
    @pyqtSlot()
64
    def slotHelpAbout(self):
65
        from HelpAbout import HelpAbout
66
        dlg = HelpAbout(self)
67
        dlg.exec_()
68
 
69
    @pyqtSlot()
70
    def slotUpdate(self):
71
        time = QTime.currentTime()
72
        now = time.toString('hh:mm:ss')
73
        self.ui.lcdNow.display(now)
74
        if self._running:
75
            self._Elapsed = self._Elapsed.addSecs(1)
76
            self.ui.lcdElapsed.display(self._Elapsed.toString('hh:mm:ss'))
77
            if self._Foundation is not None:
78
                self._Foundation = self._Foundation.addSecs(-1)
79
                self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
80
                palette = self.ui.lcdFoundation.palette()
81
                if self._Foundation.__le__(self._FoundationHalfTime):
82
                    # change background to yellow
83
                    palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
84
                if self._Foundation.__le__(self._TenMins):
85
                    # change background to orange
86
                    palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
87
                if self._Foundation.__eq__(self._zero):
88
                    # change background to red & stop counting
89
                    self._Foundation = None
90
                    palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
91
                self.ui.lcdFoundation.setPalette(palette)
92
            if self._Intermediate is not None:
93
                self._Intermediate = self._Intermediate.addSecs(-1)
94
                self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
95
                palette = self.ui.lcdIntermediate.palette()
96
                if self._Intermediate.__le__(self._IntermediateHalfTime):
97
                    # change background to yellow
98
                    palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
99
                if self._Intermediate.__le__(self._TenMins):
100
                    # change background to orange
101
                    palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
102
                if self._Intermediate.__eq__(self._zero):
103
                    # change background to red & stop counting
104
                    self._Intermediate = None
105
                    palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
106
                self.ui.lcdIntermediate.setPalette(palette)
107
            if self._Advanced is not None:
108
                self._Advanced = self._Advanced.addSecs(-1)
109
                self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
110
                palette = self.ui.lcdAdvanced.palette()
111
                if self._Advanced.__le__(self._AdvancedHalfTime):
112
                    # change background to yellow
113
                    palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
114
                if self._Advanced.__le__(self._TenMins):
115
                    # change background to orange
116
                    palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
117
                if self._Advanced.__eq__(self._zero):
118
                    # change background to red & stop counting
119
                    self._Advanced = None
120
                    self._running = False
121
                    palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
122
                self.ui.lcdAdvanced.setPalette(palette)
123
 
124
    @pyqtSlot()
125
    def slotStart(self):
126
        self._running = True
127
        self.ui.pushStart.setEnabled(False)
128
 
129
    @pyqtSlot()
130
    def slotFoundation(self):
131
        if self.ui.actionFoundation.isChecked():
132
            self._Foundation = QTime.fromString(FoundationDuration)
133
            self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
134
            self.ui.lcdFoundation.show()
135
            self.ui.labelFoundation.show()
136
        else:
137
            self._Foundation = None
138
            self.ui.lcdFoundation.hide()
139
            self.ui.labelFoundation.hide()
140
 
141
    @pyqtSlot()
142
    def slotIntermediate(self):
143
        if self.ui.actionIntermediate.isChecked():
144
            self._Intermediate = QTime.fromString(IntermediateDuration)
145
            self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
146
            self.ui.lcdIntermediate.show()
147
            self.ui.labelIntermediate.show()
148
        else:
149
            self._Intermediate = None
150
            self.ui.lcdIntermediate.hide()
151
            self.ui.labelIntermediate.hide()
152
 
153
    @pyqtSlot()
154
    def slotAdvanced(self):
155
        if self.ui.actionAdvanced.isChecked():
156
            self._Advanced = QTime.fromString(AdvancedDuration)
157
            self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
158
            self.ui.lcdAdvanced.show()
159
            self.ui.labelAdvanced.show()
160
        else:
161
            self._Advanced = None
162
            self.ui.lcdAdvanced.hide()
163
            self.ui.labelAdvanced.hide()