def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = MainUiDialog() self.ui.setupUi(self) self.ui.lcdNumber.display("00:00:00") self.ui.startPushButton.setEnabled(False) self.ui.openPushButton.setEnabled(False) self.ui.submitPushButton.setEnabled(False) self.connect(self.ui.reloadPushButton, QtCore.SIGNAL("clicked()"), self.reloadIssues) self.connect(self.ui.startPushButton, QtCore.SIGNAL("clicked()"), self.toggleTimer) self.connect(self.ui.openPushButton, QtCore.SIGNAL("clicked()"), self.openIssue) self.connect(self.ui.submitPushButton, QtCore.SIGNAL("clicked()"), self.submitTime) self.connect(self.ui.issuesComboBox, QtCore.SIGNAL("currentIndexChanged(int)"), self.issueIndexSelected) self.connect(self.ui.actionShowHide, QtCore.SIGNAL("triggered()"), self.toggleVisibility) self.connect(self.ui.actionReset_credentials, QtCore.SIGNAL("triggered()"), self.resetCredentials) self.qtimer = QtCore.QTimer() self.qtimer.setInterval(settings.TICKING_INTERVAL) self.connect(self.qtimer, QtCore.SIGNAL("timeout()"), self.timerTick) self.localStore = models.LocalStore() self.issues = self.localStore.get_issues() self.lock = QtCore.QReadWriteLock() credentials = self.localStore.get_credentials() if len(credentials) == 0: self.issuesUpdater = IssuesUpdater(self.lock, settings.REDMINE_BASE_URL, '', '') self.timeSubmitter = TimeSubmitter(self.lock, settings.REDMINE_BASE_URL, '', '') else: self.issuesUpdater = IssuesUpdater(self.lock, settings.REDMINE_BASE_URL, credentials[0], credentials[1]) self.timeSubmitter = TimeSubmitter(self.lock, settings.REDMINE_BASE_URL, credentials[0], credentials[1]) self.connect(self.issuesUpdater, QtCore.SIGNAL("IssuesUpdated()"), self.issuesReloaded) self.connect(self.issuesUpdater, QtCore.SIGNAL("IssuesUpdatedError()"), self.issuesReloadError) self.connect(self.timeSubmitter, QtCore.SIGNAL("TimeSubmitted()"), self.timeSubmitted) self.connect(self.timeSubmitter, QtCore.SIGNAL("TimeSubmittedError()"), self.timeSubmitError) self.loginForm = LoginForm(self) self.connect(self.loginForm, QtCore.SIGNAL("credentialsSaved()"), self.reloadIssues) self.connect(self.loginForm, QtCore.SIGNAL("credentialsSaved()"), self.credentialsSaved) self.issuesReloaded() self.updateLCD() self.ui.statusbar.showMessage(u"Application loaded") icon = QtGui.QIcon(":/Icon.png") self.setWindowIcon(icon)
class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = MainUiDialog() self.ui.setupUi(self) self.ui.lcdNumber.display("00:00:00") self.ui.startPushButton.setEnabled(False) self.ui.openPushButton.setEnabled(False) self.ui.submitPushButton.setEnabled(False) self.connect(self.ui.reloadPushButton, QtCore.SIGNAL("clicked()"), self.reloadIssues) self.connect(self.ui.startPushButton, QtCore.SIGNAL("clicked()"), self.toggleTimer) self.connect(self.ui.openPushButton, QtCore.SIGNAL("clicked()"), self.openIssue) self.connect(self.ui.submitPushButton, QtCore.SIGNAL("clicked()"), self.submitTime) self.connect(self.ui.issuesComboBox, QtCore.SIGNAL("currentIndexChanged(int)"), self.issueIndexSelected) self.connect(self.ui.actionShowHide, QtCore.SIGNAL("triggered()"), self.toggleVisibility) self.connect(self.ui.actionReset_credentials, QtCore.SIGNAL("triggered()"), self.resetCredentials) self.qtimer = QtCore.QTimer() self.qtimer.setInterval(settings.TICKING_INTERVAL) self.connect(self.qtimer, QtCore.SIGNAL("timeout()"), self.timerTick) self.localStore = models.LocalStore() self.issues = self.localStore.get_issues() self.lock = QtCore.QReadWriteLock() credentials = self.localStore.get_credentials() if len(credentials) == 0: self.issuesUpdater = IssuesUpdater(self.lock, settings.REDMINE_BASE_URL, '', '') self.timeSubmitter = TimeSubmitter(self.lock, settings.REDMINE_BASE_URL, '', '') else: self.issuesUpdater = IssuesUpdater(self.lock, settings.REDMINE_BASE_URL, credentials[0], credentials[1]) self.timeSubmitter = TimeSubmitter(self.lock, settings.REDMINE_BASE_URL, credentials[0], credentials[1]) self.connect(self.issuesUpdater, QtCore.SIGNAL("IssuesUpdated()"), self.issuesReloaded) self.connect(self.issuesUpdater, QtCore.SIGNAL("IssuesUpdatedError()"), self.issuesReloadError) self.connect(self.timeSubmitter, QtCore.SIGNAL("TimeSubmitted()"), self.timeSubmitted) self.connect(self.timeSubmitter, QtCore.SIGNAL("TimeSubmittedError()"), self.timeSubmitError) self.loginForm = LoginForm(self) self.connect(self.loginForm, QtCore.SIGNAL("credentialsSaved()"), self.reloadIssues) self.connect(self.loginForm, QtCore.SIGNAL("credentialsSaved()"), self.credentialsSaved) self.issuesReloaded() self.updateLCD() self.ui.statusbar.showMessage(u"Application loaded") icon = QtGui.QIcon(":/Icon.png") self.setWindowIcon(icon) #self.tray = QtGui.QSystemTrayIcon(self) #self.tray.setIcon(icon) #menu = QtGui.QMenu(self) #self.systemTrayShowHideAction = menu.addAction("Quit") #self.connect(self.systemTrayShowHideAction, QtCore.SIGNAL("triggered()"), self.toggleVisibility) #menu.addSeparator() #self.systemTracyQuitAction = menu.addAction("Quit") #self.connect(self.systemTracyQuitAction, QtCore.SIGNAL("triggered()"), self.close) #self.tray.setContextMenu(menu) #self.tray.show() def show(self): super(MainWindow, self).show() self.ui.actionShowHide.setText(u"Hide") #self.systemTrayShowHideAction.setText(u"Hide") def hide(self): super(MainWindow, self).hide() self.ui.actionShowHide.setText(u"Show") #self.systemTrayShowHideAction.setText(u"Show") def toggleVisibility(self): if self.isHidden(): self.show() else: self.hide() def reloadIssues(self): credentials = self.localStore.get_credentials() if len(credentials) == 0: self.loginForm.show() return self.ui.statusbar.showMessage(u"Loading issues...") self.ui.issuesComboBox.setEnabled(False) self.ui.reloadPushButton.setEnabled(False) self.ui.startPushButton.setEnabled(False) self.ui.openPushButton.setEnabled(False) self.ui.submitPushButton.setEnabled(False) self.issuesUpdater.start() def issuesReloaded(self): self.issues = self.localStore.get_issues() self.ui.issuesComboBox.clear() self.ui.issuesComboBox.addItem(u"--- Select an issue to track ---") for issue in self.issues: self.ui.issuesComboBox.addItem(models.cleanup_issue_title(issue[1])) self.ui.issuesComboBox.setCurrentIndex(0) self.ui.statusbar.showMessage(u"Issues updated") self.ui.issuesComboBox.setEnabled(True) self.ui.reloadPushButton.setEnabled(True) def issuesReloadError(self): self.ui.statusbar.showMessage(u"Failed to reload issues") self.ui.issuesComboBox.setEnabled(True) self.ui.reloadPushButton.setEnabled(True) def issueIndexSelected(self, index): try: current_issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] except IndexError: current_issue = None if index == 0: self.ui.startPushButton.setEnabled(False) self.ui.openPushButton.setEnabled(False) self.ui.submitPushButton.setEnabled(False) self.ui.issueTextEdit.setPlainText('') elif index != -1: self.ui.startPushButton.setEnabled(True) self.ui.openPushButton.setEnabled(True) self.ui.submitPushButton.setEnabled(True) self.ui.issueTextEdit.setPlainText(current_issue[1]) self.updateLCD() def updateLCD(self): if self.ui.issuesComboBox.currentIndex() == 0: self.ui.lcdNumber.display("00:00:00") else: try: current_issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] spent_time = self.localStore.get_spent_time(current_issue[0]) except IndexError: spent_time = 0 if spent_time == 0: self.ui.lcdNumber.display("00:00:00") else: self.ui.lcdNumber.display(models.format_lcd_time(spent_time)) def toggleTimer(self): if self.qtimer.isActive(): self.qtimer.stop() self.ui.startPushButton.setText(u'Start') self.ui.submitPushButton.setEnabled(True) self.ui.reloadPushButton.setEnabled(True) self.ui.issuesComboBox.setEnabled(True) else: self.qtimer.start() self.ui.startPushButton.setText(u'Stop') self.ui.submitPushButton.setEnabled(False) self.ui.reloadPushButton.setEnabled(False) self.ui.issuesComboBox.setEnabled(False) def timerTick(self): current_issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] self.localStore.increment_time(settings.TICKING_INTERVAL/1000.0, current_issue[0]) self.updateLCD() def openIssue(self): try: issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] url = "%s/time_entries/" % issue[2] QtGui.QDesktopServices.openUrl(QtCore.QUrl(url)) except IndexError: pass def submitTime(self): reply = QtGui.QMessageBox.question(self, "Redlog - Time Submission", "You are about to submit your time to Redmine.\nAre you sure?", QtGui.QMessageBox.Yes|QtGui.QMessageBox.Default, QtGui.QMessageBox.No|QtGui.QMessageBox.Escape) if reply == QtGui.QMessageBox.Yes: self.ui.issuesComboBox.setEnabled(False) self.ui.reloadPushButton.setEnabled(False) self.ui.startPushButton.setEnabled(False) self.ui.openPushButton.setEnabled(False) self.ui.submitPushButton.setEnabled(False) self.ui.statusbar.showMessage(u"Submitting time to %s" % settings.REDMINE_BASE_URL) self.timeSubmitter.issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] self.timeSubmitter.start() def timeSubmitted(self): issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] self.localStore.reset_issue(issue[0]) self.ui.issuesComboBox.setEnabled(True) self.ui.reloadPushButton.setEnabled(True) self.ui.startPushButton.setEnabled(True) self.ui.openPushButton.setEnabled(True) self.ui.submitPushButton.setEnabled(True) self.ui.statusbar.showMessage(u"Time submitted for #%s" % issue[0]) self.updateLCD() def timeSubmitError(self): issue = self.issues[self.ui.issuesComboBox.currentIndex()-1] self.ui.issuesComboBox.setEnabled(True) self.ui.reloadPushButton.setEnabled(True) self.ui.startPushButton.setEnabled(True) self.ui.openPushButton.setEnabled(True) self.ui.submitPushButton.setEnabled(True) self.ui.statusbar.showMessage(u"Failed to submit time for issue #%s" % issue[0]) def credentialsSaved(self): credentials = self.localStore.get_credentials() if len(credentials) > 0: self.issuesUpdater.username = credentials[0] self.issuesUpdater.password = credentials[1] self.timeSubmitter.username = credentials[0] self.timeSubmitter.password = credentials[1] def resetCredentials(self): self.localStore.reset_credentials() self.ui.statusbar.showMessage(u"Reseted credentials.") def changeEvent(self, event): if event.type() == QtCore.QEvent.WindowStateChange: #self.hide() event.accept() return else: super(MainWindow, self).changeEvent(event) def closeEvent(self, event): sys.exit()