Subversion Repositories ExamClock

Rev

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()