import logging import sip sip.setapi('QVariant', 2) from PyQt4 import QtCore from PyQt4 import QtGui from leap.gui import mainwindow_rc logger = logging.getLogger(name=__name__) APP_LOGO = ':/images/leap-color-small.png' 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) mainLayout = QtGui.QVBoxLayout() # add widgets to layout #self.createWindowHeader() #mainLayout.addWidget(self.headerBox) # created in systray mainLayout.addWidget(self.statusIconBox) if self.debugmode: mainLayout.addWidget(self.statusBox) mainLayout.addWidget(self.loggerBox) widget.setLayout(mainLayout) self.createMainActions() self.createMainMenus() self.setWindowTitle("LEAP Client") self.set_app_icon() self.set_statusbarMessage('ready') def createMainActions(self): #self.openAct = QtGui.QAction("&Open...", self, shortcut="Ctrl+O", #triggered=self.open) self.firstRunWizardAct = QtGui.QAction( "&First run wizard...", self, triggered=self.stop_connection_and_launch_first_run_wizard) self.aboutAct = QtGui.QAction("&About", self, triggered=self.about) #self.aboutQtAct = QtGui.QAction("About &Qt", self, #triggered=QtGui.qApp.aboutQt) def createMainMenus(self): self.connMenu = QtGui.QMenu("&Connections", self) #self.viewMenu.addSeparator() self.connMenu.addAction(self.quitAction) self.settingsMenu = QtGui.QMenu("&Settings", self) self.settingsMenu.addAction(self.firstRunWizardAct) self.helpMenu = QtGui.QMenu("&Help", self) self.helpMenu.addAction(self.aboutAct) #self.helpMenu.addAction(self.aboutQtAct) self.menuBar().addMenu(self.connMenu) self.menuBar().addMenu(self.settingsMenu) self.menuBar().addMenu(self.helpMenu) def stop_connection_and_launch_first_run_wizard(self): settings = QtCore.QSettings() settings.setValue('FirstRunWizardDone', False) logger.debug('should run first run wizard again...') status = self.conductor.get_icon_name() if status != "disconnected": self.start_or_stopVPN() self.launch_first_run_wizard() #from leap.gui.firstrunwizard import FirstRunWizard #wizard = FirstRunWizard( #parent=self, #success_cb=self.initReady.emit) #wizard.show() def set_app_icon(self): icon = QtGui.QIcon(APP_LOGO) self.setWindowIcon(icon) #def createWindowHeader(self): #""" #description lines for main window #""" #self.headerBox = QtGui.QGroupBox() #self.headerLabel = QtGui.QLabel( #"LEAP Encryption Access Project") #self.headerLabelSub = QtGui.QLabel( #"
your internet encryption toolkit") # #pixmap = QtGui.QPixmap(APP_LOGO) #leap_lbl = QtGui.QLabel() #leap_lbl.setPixmap(pixmap) # #headerLayout = QtGui.QHBoxLayout() #headerLayout.addWidget(leap_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() return self.cleanupAndQuit() def cleanupAndQuit(self): """ cleans state before shutting down app. """ # save geometry for restoring settings = QtCore.QSettings() geom_key = "DebugGeometry" if self.debugmode else "Geometry" settings.setValue(geom_key, self.saveGeometry()) # TODO:make sure to shutdown all child process / threads # in conductor # XXX send signal instead? logger.info('Shutting down') self.conductor.disconnect(shutdown=True) logger.info('Exiting. Bye.') QtGui.qApp.quit()