Rev 3 | Blame | Last modification | View Log | RSS feed
#-----------------------------------------------------------------------------
# Name: mainwindow.py
# Purpose:
#
# Author: Ron Wellsted
#
# Created: 2015-10-13
# Copyright: (c) 2015
# Licence: GPL 3.0
#-----------------------------------------------------------------------------
# Date Author Modification
#-----------------------------------------------------------------------------
# -*- coding: utf-8 -*-
from PyQt4 import uic, QtGui
from PyQt4.QtCore import pyqtSlot, QTime, QTimer
(Ui_MainWindow, QMainWindow) = uic.loadUiType('mainwindow.ui')
# Exam durations and half time as hh:mm:ss
FoundationDuration = '00:55:00'
FoundationHalfTime = '00:27:30'
IntermediateDuration = '01:25:00'
IntermediateHalfTime = '00:42:30'
AdvancedDuration = '02:00:00'
AdvancedHalfTime = '01:00:00'
class MainWindow (QMainWindow):
"""MainWindow inherits QMainWindow"""
_timer = None
_Foundation = QTime.fromString(FoundationDuration)
_FoundationHalfTime = QTime.fromString(FoundationHalfTime)
_Intermediate = QTime.fromString(IntermediateDuration)
_IntermediateHalfTime = QTime.fromString(IntermediateHalfTime)
_Advanced = QTime.fromString(AdvancedDuration)
_AdvancedHalfTime = QTime.fromString(AdvancedHalfTime)
_Elapsed = QTime.fromString('00:00:00')
_running = False
_zero = QTime.fromString('00:00:00')
_TenMins = QTime.fromString('00:10:00')
def __init__ (self, parent = None):
QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self._timer = QTimer()
self._timer.timeout.connect(self.slotUpdate)
self._timer.start(1000)
time = QTime.currentTime()
now = time.toString('hh:mm:ss')
self.ui.lcdNow.display(now)
self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
self.ui.lcdElapsed.display(self._Elapsed.toString('hh:mm:ss'))
def closeEvent(self, event):
if QtGui.QMessageBox.question(self, 'Confirmation', 'Close application ?', \
QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes:
event.ignore()
else:
event.accept()
@pyqtSlot()
def slotHelpAbout(self):
from HelpAbout import HelpAbout
dlg = HelpAbout(self)
dlg.exec_()
@pyqtSlot()
def slotUpdate(self):
time = QTime.currentTime()
now = time.toString('hh:mm:ss')
self.ui.lcdNow.display(now)
if self._running:
self._Elapsed = self._Elapsed.addSecs(1)
self.ui.lcdElapsed.display(self._Elapsed.toString('hh:mm:ss'))
if self._Foundation is not None:
self._Foundation = self._Foundation.addSecs(-1)
self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
palette = self.ui.lcdFoundation.palette()
if self._Foundation.__le__(self._FoundationHalfTime):
# change background to yellow
palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
if self._Foundation.__le__(self._TenMins):
# change background to orange
palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
if self._Foundation.__eq__(self._zero):
# change background to red & stop counting
self._Foundation = None
palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
self.ui.lcdFoundation.setPalette(palette)
if self._Intermediate is not None:
self._Intermediate = self._Intermediate.addSecs(-1)
self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
palette = self.ui.lcdIntermediate.palette()
if self._Intermediate.__le__(self._IntermediateHalfTime):
# change background to yellow
palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
if self._Intermediate.__le__(self._TenMins):
# change background to orange
palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
if self._Intermediate.__eq__(self._zero):
# change background to red & stop counting
self._Intermediate = None
palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
self.ui.lcdIntermediate.setPalette(palette)
if self._Advanced is not None:
self._Advanced = self._Advanced.addSecs(-1)
self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
palette = self.ui.lcdAdvanced.palette()
if self._Advanced.__le__(self._AdvancedHalfTime):
# change background to yellow
palette.setColor(palette.Window, QtGui.QColor(255, 255, 0))
if self._Advanced.__le__(self._TenMins):
# change background to orange
palette.setColor(palette.Window, QtGui.QColor(255, 170, 0))
if self._Advanced.__eq__(self._zero):
# change background to red & stop counting
self._Advanced = None
self._running = False
palette.setColor(palette.Window, QtGui.QColor(255, 0, 0))
self.ui.lcdAdvanced.setPalette(palette)
@pyqtSlot()
def slotStart(self):
self._running = True
self.ui.pushStart.setEnabled(False)
@pyqtSlot()
def slotFoundation(self):
if self.ui.actionFoundation.isChecked():
self._Foundation = QTime.fromString(FoundationDuration)
self.ui.lcdFoundation.display(self._Foundation.toString('hh:mm:ss'))
self.ui.lcdFoundation.show()
self.ui.labelFoundation.show()
else:
self._Foundation = None
self.ui.lcdFoundation.hide()
self.ui.labelFoundation.hide()
@pyqtSlot()
def slotIntermediate(self):
if self.ui.actionIntermediate.isChecked():
self._Intermediate = QTime.fromString(IntermediateDuration)
self.ui.lcdIntermediate.display(self._Intermediate.toString('hh:mm:ss'))
self.ui.lcdIntermediate.show()
self.ui.labelIntermediate.show()
else:
self._Intermediate = None
self.ui.lcdIntermediate.hide()
self.ui.labelIntermediate.hide()
@pyqtSlot()
def slotAdvanced(self):
if self.ui.actionAdvanced.isChecked():
self._Advanced = QTime.fromString(AdvancedDuration)
self.ui.lcdAdvanced.display(self._Advanced.toString('hh:mm:ss'))
self.ui.lcdAdvanced.show()
self.ui.labelAdvanced.show()
else:
self._Advanced = None
self.ui.lcdAdvanced.hide()
self.ui.labelAdvanced.hide()