import logging from PyQt4 import QtGui from leap.gui import mainwindow_rc logger = logging.getLogger(name=__name__) class MainWindowMixin(object): """ create the main window for leap app """ def __init__(self, *args, **kwargs): # XXX set initial visibility # debug = no visible widget = QtGui.QWidget() self.setCentralWidget(widget) self.createWindowHeader() # add widgets to layout mainLayout = QtGui.QVBoxLayout() mainLayout.addWidget(self.headerBox) mainLayout.addWidget(self.statusIconBox) if self.debugmode: mainLayout.addWidget(self.statusBox) mainLayout.addWidget(self.loggerBox) widget.setLayout(mainLayout) self.setWindowTitle("LEAP Client") self.resize(400, 300) self.set_statusbarMessage('ready') def createWindowHeader(self): """ description lines for main window """ self.headerBox = QtGui.QGroupBox() self.headerLabel = QtGui.QLabel("Encryption \ Internet Proxy") self.headerLabelSub = QtGui.QLabel("trust your \ technolust") pixmap = QtGui.QPixmap(':/images/leap-color-small.png') frog_lbl = QtGui.QLabel() frog_lbl.setPixmap(pixmap) headerLayout = QtGui.QHBoxLayout() headerLayout.addWidget(frog_lbl) headerLayout.addWidget(self.headerLabel) headerLayout.addWidget(self.headerLabelSub) headerLayout.addStretch() self.headerBox.setLayout(headerLayout) def set_statusbarMessage(self, msg): self.statusBar().showMessage(msg) def closeEvent(self, event): """ redefines close event (persistent window behaviour) """ if self.trayIcon.isVisible() and not self.debugmode: QtGui.QMessageBox.information( self, "Systray", "The program will keep running " "in the system tray. To " "terminate the program, choose " "Quit in the " "context menu of the system tray entry.") self.hide() event.ignore() if self.debugmode: self.cleanupAndQuit() def cleanupAndQuit(self): """ cleans state before shutting down app. """ # TODO:make sure to shutdown all child process / threads # in conductor # XXX send signal instead? logger.info('Shutting down') self.conductor.cleanup() logger.info('Exiting') QtGui.qApp.quit()