diff options
Diffstat (limited to 'src/leap/baseapp/leap_app.py')
| -rw-r--r-- | src/leap/baseapp/leap_app.py | 153 | 
1 files changed, 153 insertions, 0 deletions
| diff --git a/src/leap/baseapp/leap_app.py b/src/leap/baseapp/leap_app.py new file mode 100644 index 00000000..4d3aebd6 --- /dev/null +++ b/src/leap/baseapp/leap_app.py @@ -0,0 +1,153 @@ +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( +            #"<font size=40>LEAP Encryption Access Project</font>") +        #self.headerLabelSub = QtGui.QLabel( +            #"<br><i>your internet encryption toolkit</i>") +# +        #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 " +                "<b>Quit</b> 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() | 
