Ejemplo n.º 1
0
def exe():
    if platform.system() == 'Darwin':
        subprocess.run([sys.executable, 'setup.py', 'py2app'], check=True)

        import dmgbuild
        dmgbuild.build_dmg('dsremap-%s.dmg' % str(Meta.appVersion()),
                           Meta.appName(), 'dmgbuild-settings.py')
    elif platform.system() == 'Windows':
        subprocess.run([sys.executable, 'setup.py', 'build'], check=True)
        distdir = r'build\exe.win-%s-%s' % (platform.machine().lower(),
                                            '%d.%d' % sys.version_info[:2])
        with codecs.getwriter('utf-8')(open('installer.nsi', 'wb')) as dst:
            with codecs.getreader('utf-8')(open('installer.nsi.in',
                                                'rb')) as src:
                for line in src:
                    dst.write(
                        line.replace('@APPNAME@', Meta.appName()).replace(
                            '@APPVERSION@', str(Meta.appVersion())).replace(
                                '@DISTDIR@',
                                distdir).replace('@WEBSITE@', Meta.appSite()))
        import winreg
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE', 0,
                             winreg.KEY_READ | winreg.KEY_WOW64_32KEY)
        try:
            path = winreg.QueryValue(key, 'NSIS')
        except:
            raise RuntimeError(
                'Cannot find NSIS in registry, is it installed ?')
        finally:
            winreg.CloseKey(key)
        # Assuming NSIS 3.x here
        subprocess.run([
            os.path.join(path, 'makensis.exe'), '/INPUTCHARSET', 'UTF8',
            'installer.nsi'
        ],
                       check=True)
    elif platform.system() == 'Linux':
        with codecs.getwriter('utf-8')(open('appimage.yml', 'wb')) as dst:
            with codecs.getreader('utf-8')(open('appimage.yml.in',
                                                'rb')) as src:
                for line in src:
                    dst.write(line.replace('@VERSION@',
                                           str(Meta.appVersion())))
        subprocess.run(
            ['appimage-builder', '--recipe', 'appimage.yml', '--skip-test'],
            check=True)
    else:
        raise RuntimeError('Unsupported platform')
Ejemplo n.º 2
0
    def __init__(self):
        super().__init__([])
        self.setApplicationName(Meta.appName())
        self.setApplicationVersion(str(Meta.appVersion()))
        self.setOrganizationDomain(Meta.appDomain())
        self.setWindowIcon(QtGui.QIcon(':icons/gamepad.svg'))

        # Builtin messages.
        trans = QtCore.QTranslator(self)
        path = QtCore.QLibraryInfo.location(
            QtCore.QLibraryInfo.TranslationsPath)
        trans.load(QtCore.QLocale.system(), 'qtbase', '_', path)
        self.installTranslator(trans)
Ejemplo n.º 3
0
        def gotChangelog(downloader):
            self._changelogDl = None
            try:
                _unused, text = downloader.result()
            except AbortedError:
                self.logger.info('Changelog download aborted')
                return
            except (DownloadError, SSLError) as exc:
                self.logger.exception('Cannot download changelog: %s', exc)
                return

            changelog = Changelog(text)
            if changelog.changesSince(Meta.appVersion()):
                win = ChangelogView(self, changelog)
                win.show()
                win.raise_()
Ejemplo n.º 4
0
    def __init__(self, parent, changelog):
        super().__init__(parent)

        self.setWindowTitle(_('New release available'))

        view = QtWidgets.QTextBrowser(self)
        view.setHtml(HTMLChangelogFormatter().format(
            changelog.changesSince(Meta.appVersion())))
        view.setOpenExternalLinks(True)

        btn = QtWidgets.QPushButton(_('OK'), self)
        btn.clicked.connect(self.accept)

        bld = LayoutBuilder(self)
        with bld.vbox() as vbox:
            vbox.addWidget(view)
            with bld.hbox() as hbox:
                hbox.addStretch(1)
                hbox.addWidget(btn)

        self.resize(640, 480)
Ejemplo n.º 5
0
    setup(app=['dsremap.py'],
          options={
              'py2app': {
                  'iconfile': os.path.join('icons', 'dsremap.icns')
              }
          },
          setup_requires=['py2app'],
          data_files=data_files)

if platform.system() == 'Windows':
    from cx_Freeze import setup, Executable

    options = {
        'include_files': [
            (r'res\avrdude.conf', r'resources\avrdude.conf'),
            (r'res\configurations', r'resources\configurations'),
            (r'i18n', r'resources\i18n'),
        ]
    }

    setup(name=Meta.appName(),
          version=str(Meta.appVersion()),
          description=Meta.appName(),
          options={'build_exe': options},
          executables=[
              Executable('dsremap.py',
                         base='Win32GUI',
                         icon=r'icons\dsremap.ico')
          ])
Ejemplo n.º 6
0
 def isFirstVersionLaunch(self):
     with self.grouped('Versions'):
         key = 'v%d_%d_%d' % Meta.appVersion()
         ret = self.booleanValue(key, True)
         self.setBooleanValue(key, False)
         return ret
Ejemplo n.º 7
0
    def __init__(self):  # pylint: disable=R0915
        super().__init__()

        self._manager = QtNetwork.QNetworkAccessManager(self)

        self._workspace = Workspace()
        self.setCentralWidget(
            WorkspaceView(self, mainWindow=self, workspace=self._workspace))
        self._workspace.load()
        self._devenum = DeviceEnumerator()

        self.setWindowTitle(
            _('{appName} v{appVersion}').format(appName=Meta.appName(),
                                                appVersion=str(
                                                    Meta.appVersion())))
        self.statusBar()

        filemenu = QtWidgets.QMenu(_('File'), self)
        filemenu.addAction(
            uicommands.ExportConfigurationUICommand(
                self, mainWindow=self, container=self.centralWidget()))
        filemenu.addAction(
            uicommands.ImportConfigurationUICommand(self,
                                                    mainWindow=self,
                                                    workspace=self._workspace))
        filemenu.addAction(
            uicommands.ExportBytecodeUICommand(self,
                                               mainWindow=self,
                                               workspace=self._workspace,
                                               container=self.centralWidget()))
        self.menuBar().addMenu(filemenu)

        editmenu = QtWidgets.QMenu(_('Edit'), self)
        editmenu.addAction(uicommands.UndoUICommand(self, mainWindow=self))
        editmenu.addAction(uicommands.RedoUICommand(self, mainWindow=self))
        editmenu.addAction(
            uicommands.ShowSettingsDialogUICommand(self, mainWindow=self))
        self.menuBar().addMenu(editmenu)

        devmenu = uicommands.DeviceMenu(self,
                                        mainWindow=self,
                                        workspace=self._workspace,
                                        enumerator=self._devenum)
        self.menuBar().addMenu(devmenu)

        uploadmenu = uicommands.UploadMenu(self,
                                           mainWindow=self,
                                           container=self.centralWidget(),
                                           workspace=self._workspace,
                                           enumerator=self._devenum)
        self.menuBar().addMenu(uploadmenu)

        helpmenu = QtWidgets.QMenu(_('Help'), self)
        helpmenu.addAction(
            uicommands.ShowAboutDialogUICommand(self, mainWindow=self))
        helpmenu.addAction(uicommands.OpenDocsUICommand(self, mainWindow=self))
        self.menuBar().addMenu(helpmenu)

        with Settings().grouped('UIState') as settings:
            if settings.contains('WindowGeometry'):
                self.restoreGeometry(settings.value('WindowGeometry'))
            else:
                self.resize(1280, 600)
            self.centralWidget().loadState(settings)

        self.raise_()
        self.show()

        settings = Settings()
        if settings.isFirstVersionLaunch():
            QtGui.QDesktopServices.openUrl(QtCore.QUrl(
                Meta.documentationUrl()))

        self.check()

        def gotChangelog(downloader):
            self._changelogDl = None
            try:
                _unused, text = downloader.result()
            except AbortedError:
                self.logger.info('Changelog download aborted')
                return
            except (DownloadError, SSLError) as exc:
                self.logger.exception('Cannot download changelog: %s', exc)
                return

            changelog = Changelog(text)
            if changelog.changesSince(Meta.appVersion()):
                win = ChangelogView(self, changelog)
                win.show()
                win.raise_()

        self._changelogDl = StringDownloader(self,
                                             self.manager(),
                                             callback=gotChangelog)
        self._changelogDl.get(Meta.changelogUrl())
Ejemplo n.º 8
-1
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle(
            _('{appname} v{appversion}').format(appname=Meta.appName(),
                                                appversion=str(
                                                    Meta.appVersion())))

        iodev = QtCore.QFile(':/about.html')
        iodev.open(iodev.ReadOnly)
        try:
            about = bytes(iodev.readAll()).decode('utf-8')
        finally:
            iodev.close()
        about = about.format(author=Meta.appAuthor())

        text = QtWidgets.QTextBrowser(self)
        text.setHtml(about)
        text.setOpenExternalLinks(True)

        btn = QtWidgets.QPushButton(_('Done'), self)

        bld = LayoutBuilder(self)
        with bld.vbox() as vbox:
            vbox.addWidget(text)
            with bld.hbox() as buttons:
                buttons.addStretch(1)
                buttons.addWidget(btn)

        btn.clicked.connect(self.accept)

        self.resize(800, 600)