Example #1
0
    def run(self):
        self.mainWindow = PipboyMainWindow()

        if (self.startedFromWin32Launcher):
            basepath = os.path.dirname(os.path.realpath(__file__))
            launcherpath = os.path.abspath(
                os.path.join(basepath, os.pardir, 'PyPipBoyApp-Launcher.exe'))
            print('launcherpath: ' + str(launcherpath))
            if 'nt' in os.name:
                from win32com.propsys import propsys, pscon
                import pythoncom
                hwnd = self.mainWindow.winId()
                propStore = propsys.SHGetPropertyStoreForWindow(
                    hwnd, propsys.IID_IPropertyStore)
                propStore.SetValue(
                    pscon.PKEY_AppUserModel_ID,
                    propsys.PROPVARIANTType(u'matzman666.pypipboyapp.win32',
                                            pythoncom.VT_ILLEGAL))
                propStore.SetValue(
                    pscon.PKEY_AppUserModel_RelaunchDisplayNameResource,
                    propsys.PROPVARIANTType('PyPipBoyApp',
                                            pythoncom.VT_ILLEGAL))
                propStore.SetValue(
                    pscon.PKEY_AppUserModel_RelaunchCommand,
                    propsys.PROPVARIANTType(launcherpath,
                                            pythoncom.VT_ILLEGAL))
                propStore.Commit()
        # Load Styles
        self._loadStyles()
        # Load widgets
        self.helpWidget = uic.loadUi(os.path.join('ui', 'helpwidget.ui'))
        self.helpWidget.textBrowser.setSource(
            QtCore.QUrl.fromLocalFile(
                os.path.join('ui', 'res', 'helpwidget.html')))
        self.mainWindow.addDockWidget(QtCore.Qt.TopDockWidgetArea,
                                      self.helpWidget)
        self._loadWidgets()
        # Restore saved window state
        savedFullScreen = bool(
            int(self.settings.value('mainwindow/fullscreen', 0)))
        if savedFullScreen:
            self.mainWindow.showFullScreen()
        savedGeometry = self.settings.value('mainwindow/geometry')
        if savedGeometry:
            self.mainWindow.restoreGeometry(savedGeometry)
        savedState = self.settings.value('mainwindow/windowstate')
        if savedState:
            self.mainWindow.restoreState(savedState)
        # Create widgets menu entry
        self.widgetMenu.setTitle('Widgets')
        menuActions = self.mainWindow.menuBar().actions()
        self.mainWindow.menuBar().insertMenu(menuActions[len(menuActions) - 1],
                                             self.widgetMenu)
        # connect with main window
        self.mainWindow.actionConnect.triggered.connect(
            self.startAutoDiscovery)
        self.mainWindow.actionConnectTo.triggered.connect(
            self.showConnectToDialog)
        self.mainWindow.actionDisconnect.triggered.connect(self.disconnect)
        self.mainWindow.actionQuit.triggered.connect(self.requestQuit)
        self.mainWindow.signalWantsToQuit.connect(self.requestQuit)
        self.mainWindow.actionShowAbout.triggered.connect(self.showAboutDialog)
        self.mainWindow.actionShowAboutQt.triggered.connect(self.aboutQt)
        self.mainWindow.actionAuto_Connect_on_Start_up.triggered.connect(
            self.autoConnectToggled)
        self.mainWindow.actionExportData.triggered.connect(self.exportData)
        self.mainWindow.actionImportData.triggered.connect(self.importData)
        self.mainWindow.actionVersionCheck.triggered.connect(
            self.startVersionCheckVerbose)
        stayOnTop = bool(int(self.settings.value('mainwindow/stayOnTop', 0)))
        self.mainWindow.actionStayOnTop.toggled.connect(
            self.setWindowStayOnTop)
        self.mainWindow.actionStayOnTop.setChecked(stayOnTop)
        promptBeforeQuit = bool(
            int(self.settings.value('mainwindow/promptBeforeQuit', 1)))
        self.mainWindow.actionPromptBeforeQuit.toggled.connect(
            self.setPromptBeforeQuit)
        self.mainWindow.actionPromptBeforeQuit.setChecked(promptBeforeQuit)
        self.mainWindow.actionRelayModeSettings.triggered.connect(
            self._slotRelayModeSettings)
        # Init Relay Mode
        self.relayModeEnabled = bool(
            int(self.settings.value('mainwindow/relayModeEnabled', 0)))
        self.relayModeAutodiscovery = bool(
            int(self.settings.value('mainwindow/relayModeAutodiscovery', 0)))
        self.relayModePort = int(
            self.settings.value('mainwindow/relayModePort', 27000))
        self.relayController = RelayController(self.dataManager)
        if self.relayModeEnabled:
            self.relayController.startRelayService(port=self.relayModePort)
            if self.relayModeAutodiscovery:
                self.relayController.startAutodiscoverService()
        # Main window is ready, so show it
        self.mainWindow.init(self, self.networkChannel, self.dataManager)
        self._initWidgets()
        self.mainWindow.show()
        # start main event loop
        if int(self.settings.value('mainwindow/autoconnect', 0)):
            self.mainWindow.actionAuto_Connect_on_Start_up.setChecked(True)
            host = 'localhost'
            port = 27000
            if self.settings.value('mainwindow/lasthost'):
                host = self.settings.value('mainwindow/lasthost')
            if self.settings.value('mainwindow/lastport'):
                port = int(self.settings.value('mainwindow/lastport'))
            self.signalConnectToHost.emit(host, port, True)
        self.startVersionCheck()
        sys.exit(self.exec_())