Exemple #1
0
 def _handleFontBtn(self):
     btn = self.sender()
     dlg = QFontDialog(self)
     dlg.setCurrentFont(btn.font())
     fixWidgetSizeOnHiDpi(dlg)
     # set sample text in dialog with some hack
     try:
         sample = dlg.findChildren(QLineEdit)[3]
         sample.setText('AaBbYy@2013 %s' % self.langCombo.currentText())
     except Exception as e:
         logging.warning('failed to hack Qt font dialog: %s' % e)
     ret = dlg.exec_()
     if ret:
         self._setFontButton(btn, dlg.selectedFont())
    def _showDialog(self):
        dlg = self._dialog = QFontDialog(self)
        dlg.setCurrentFont(self.font())
        fixWidgetSizeOnHiDpi(dlg)

        # set sample text and add button with some hack
        try:
            sample = dlg.findChildren(QLineEdit)[3]
            sample.setText(self.PreviewText)

            if self.resettable:
                box = dlg.findChildren(QDialogButtonBox)[0]
                box.addButton(QDialogButtonBox.RestoreDefaults)
                box.clicked.connect(self._onFontDialogBtnClicked)
        except Exception as e:
            logging.warning('failed to hack Qt font dialog: %s' % e)

        ret = dlg.exec_()
        if ret:
            self.setFont(dlg.selectedFont(), userSet=True)
        self._dialog = None
Exemple #3
0
    def __init__(self, parent):
        super().__init__(parent, Qt.WindowTitleHint)
        self._checkUpdateTask = self._installUpdateTask = None
        self._dlProgressBlocks = None
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setupUi(self)
        fixWidgetSizeOnHiDpi(self)

        # about browser
        self.aboutBrowser.anchorClicked.connect(self._NavigateAboutArea)
        self.aboutBrowser.document().setDocumentMargin(0)
        self.aboutBrowser.document().setDefaultStyleSheet(aboutBrowserCss)
        if updater.foundUpdate:
            self._NavigateAboutArea(QUrl('hzm://show-update'))
        elif updater.checkUpdateTask:
            # signal losing is impossible? because of GIL
            task = self._checkUpdateTask = updater.checkUpdateTask
            task.succeeded.connect(self._onCheckUpdateSucceeded)
            task.failed.connect(self._aboutAreaError)
            self._NavigateAboutArea(QUrl('hzm://show-info/' + self.tr('checking...')))
        else:
            self._NavigateAboutArea(QUrl('hzm://show-info'))

        if scaleRatio > 1:
            self.openOutBtn.setIcon(makeQIcon(':/check.png', scaled2x=True))
        self.openOutBtn.hide()  # can't set initial state in creator
        self.appIcoBtn.setIcon(qApp.windowIcon())
        self.appIcoBtn.setIconSize(QSize(32, 32) * scaleRatio)
        self.appIcoBtn.setStyleSheet('border: none')
        self.appIcoBtn.clicked.connect(self._easterEgg)

        self.updateCheck.setChecked(settings['Update'].getboolean('autoCheck'))
        self.aindCheck.setChecked(settings['Editor'].getboolean('autoIndent'))
        self.tabIndentCheck.setChecked(settings['Editor'].getboolean('tabIndent'))
        self.autoRoCheck.setChecked(settings['Editor'].getboolean('autoReadOnly'))
        self.tListCountCheck.setChecked(settings['Main'].getboolean('tagListCount'))
        self.annotateCheck.setChecked(settings['Main'].getboolean('listAnnotated'))
        if settings['Editor'].getboolean('titleFocus'):
            self.focusTitleRadio.setChecked(True)
        else:
            self.focusTextRadio.setChecked(True)
        self.bkCheck.setChecked(settings['Main'].getboolean('backup'))
        self.extendBgCheck.setChecked(settings['Main'].getboolean('extendTitleBarBg'))
        if isWin and not isDwmUsable():
            self.extendBgCheck.setEnabled(False)
        # language ComboBox
        for i in TRANS_DISPLAY_NAMES:
            self.langCombo.addItem(i)
        langIndex = TRANSLATIONS.index(settings['Main']['lang'])
        self.langCombo.setCurrentIndex(langIndex)

        self.rstCombo.model().item(0).setSelectable(False)
        self.rstCombo.addItems(diarybook.list_backups())
        self.themeCombo.addItems(THEMES)
        self.themeCombo.setCurrentIndex(THEMES.index(settings['Main']['theme']))
        self.preLinesBox.setValue(settings['Main'].getint('previewLines'))
        # theme specific
        if settings['Main']['theme'] == '1px-rect':
            self._disableThemeSpe()
        else:
            self._enableThemeSpe()
        self.themeCombo.currentIndexChanged.connect(
            lambda idx: self._enableThemeSpe() if idx != 0 else self._disableThemeSpe())
        # fonts
        self.enRenderCheck.setChecked(settings['Font'].getboolean('enhanceRender'))
        self.enRenderCheck.setVisible(isWin)
        self.enRenderCheck.setEnabled(mactype.isUsable())
        self.defFontGBox.setChecked('default' in settings['Font'])
        self.fontBtns = (self.dtFontBtn, self.titleFontBtn, self.textFontBtn,
                         self.defFontBtn)
        fontBtnConfigNames = ('datetime', 'title', 'text', 'default')
        fontDialogPreview = 'AaBbYy@2017 %s' % self.langCombo.currentText()

        for b, n in zip(self.fontBtns, fontBtnConfigNames):
            b.configName = n
            b.resettable = n != 'default'
            b.PreviewText = fontDialogPreview  # change class var may cause segfault!
            font_ = getattr(font, n)
            b.setFont(font_, font_.userSet)  # userSet is set by Font in __init__
            if scaleRatio > 1:
                b.setMinimumWidth((b.minimumWidth() * scaleRatio))
        # setup statistics
        diaryCount = len(db)
        if diaryCount < 2:
            diaryDtRange = None
        elif settings['Main']['listSortBy'] == 'datetime' and parent:
            # only save 10 milliseconds (600 diaries)
            m = parent.diaryList.model()
            diaryDtRange = m.data(m.index(0, 1)), m.data(m.index(m.rowCount()-1, 1))
            if settings['Main'].getboolean('listReverse'):
                diaryDtRange = diaryDtRange[::-1]
        else:
            diaryDtRange = db.get_datetime_range()
        if diaryDtRange:
            qRange = tuple(map(lambda x: QDateTime.fromString(x, DB_DATETIME_FMT_QT),
                               diaryDtRange))
            days = qRange[0].daysTo(qRange[1])
        else:
            days = 0
        if days > 0:
            freq = round(1 / (diaryCount / days), 1)
            oldest, newest = map(lambda x: x[:7], diaryDtRange)
            self.staLabel.setText(self.tr('Every <b>%s</b> days a diary, from <b>%s</b> to <b>%s</b>') %
                                  (freq, oldest, newest))
        else:
            self.staLabel.setText(self.tr('N/A'))
Exemple #4
0
    def __init__(self, parent):
        super().__init__(parent, Qt.WindowTitleHint)
        self._checkUpdateTask = self._installUpdateTask = None
        self._dlProgressBlocks = None
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setupUi(self)
        fixWidgetSizeOnHiDpi(self)

        # about browser
        self.aboutBrowser.anchorClicked.connect(self._NavigateAboutArea)
        self.aboutBrowser.document().setDocumentMargin(0)
        self.aboutBrowser.document().setDefaultStyleSheet(aboutBrowserCss)
        if updater.foundUpdate:
            self._NavigateAboutArea(QUrl('hzm://show-update'))
        elif updater.checkUpdateTask:
            # signal losing is impossible? because of GIL
            task = self._checkUpdateTask = updater.checkUpdateTask
            task.succeeded.connect(self._onCheckUpdateSucceeded)
            task.failed.connect(self._aboutAreaError)
            self._NavigateAboutArea(QUrl('hzm://show-info/' + self.tr('checking...')))
        else:
            self._NavigateAboutArea(QUrl('hzm://show-info'))

        if scaleRatio > 1:
            self.openOutBtn.setIcon(makeQIcon(':/check.png', scaled2x=True))
        self.openOutBtn.hide()  # can't set initial state in creator
        self.appIcoBtn.setIcon(qApp.windowIcon())
        self.appIcoBtn.setIconSize(QSize(32, 32) * scaleRatio)
        self.appIcoBtn.setStyleSheet('border: none')
        self.appIcoBtn.clicked.connect(self._easterEgg)

        self.updateCheck.setChecked(settings['Update'].getboolean('autoCheck'))
        self.aindCheck.setChecked(settings['Editor'].getboolean('autoIndent'))
        self.tabIndentCheck.setChecked(settings['Editor'].getboolean('tabIndent'))
        self.autoRoCheck.setChecked(settings['Editor'].getboolean('autoReadOnly'))
        self.tListCountCheck.setChecked(settings['Main'].getboolean('tagListCount'))
        self.annotateCheck.setChecked(settings['Main'].getboolean('listAnnotated'))
        if settings['Editor'].getboolean('titleFocus'):
            self.focusTitleRadio.setChecked(True)
        else:
            self.focusTextRadio.setChecked(True)
        self.bkCheck.setChecked(settings['Main'].getboolean('backup'))
        self.extendBgCheck.setChecked(settings['Main'].getboolean('extendTitleBarBg'))
        if isWin and not isDwmUsable():
            self.extendBgCheck.setEnabled(False)
        # language ComboBox
        for i in TRANS_DISPLAY_NAMES:
            self.langCombo.addItem(i)
        langIndex = TRANSLATIONS.index(settings['Main']['lang'])
        self.langCombo.setCurrentIndex(langIndex)

        self.rstCombo.model().item(0).setSelectable(False)
        self.rstCombo.addItems(diarybook.list_backups())
        self.themeCombo.addItems(THEMES)
        self.themeCombo.setCurrentIndex(THEMES.index(settings['Main']['theme']))
        self.preLinesBox.setValue(settings['Main'].getint('previewLines'))
        # theme specific
        if settings['Main']['theme'] == '1px-rect':
            self._disableThemeSpe()
        else:
            self._enableThemeSpe()
        self.themeCombo.currentIndexChanged.connect(
            lambda idx: self._enableThemeSpe() if idx != 0 else self._disableThemeSpe())
        # fonts
        self.enRenderCheck.setChecked(settings['Font'].getboolean('enhanceRender'))
        self.enRenderCheck.setVisible(isWin)
        self.enRenderCheck.setEnabled(mactype.isUsable())
        self.defFontGBox.setChecked('default' in settings['Font'])
        self.fontBtns = (self.dtFontBtn, self.titleFontBtn, self.textFontBtn,
                         self.defFontBtn)
        fontBtnConfigNames = ('datetime', 'title', 'text', 'default')
        fontDialogPreview = 'AaBbYy@2017 %s' % self.langCombo.currentText()

        for b, n in zip(self.fontBtns, fontBtnConfigNames):
            b.configName = n
            b.resettable = n != 'default'
            b.PreviewText = fontDialogPreview  # change class var may cause segfault!
            font_ = getattr(font, n)
            b.setFont(font_, font_.userSet)  # userSet is set by Font in __init__
            if scaleRatio > 1:
                b.setMinimumWidth((b.minimumWidth() * scaleRatio))
        # setup statistics
        diaryCount = len(db)
        if diaryCount < 2:
            diaryDtRange = None
        elif settings['Main']['listSortBy'] == 'datetime' and parent:
            # only save 10 milliseconds (600 diaries)
            m = parent.diaryList.model()
            diaryDtRange = m.data(m.index(0, 1)), m.data(m.index(m.rowCount()-1, 1))
            if settings['Main'].getboolean('listReverse'):
                diaryDtRange = diaryDtRange[::-1]
        else:
            diaryDtRange = db.get_datetime_range()
        if diaryDtRange:
            qRange = tuple(map(lambda x: QDateTime.fromString(x, DB_DATETIME_FMT_QT),
                               diaryDtRange))
            days = qRange[0].daysTo(qRange[1])
        else:
            days = 0
        if days > 0:
            freq = round(1 / (diaryCount / days), 1)
            oldest, newest = map(lambda x: x[:7], diaryDtRange)
            self.staLabel.setText(self.tr('Every <b>%s</b> days a diary, from <b>%s</b> to <b>%s</b>') %
                                  (freq, oldest, newest))
        else:
            self.staLabel.setText(self.tr('N/A'))
Exemple #5
0
    def __init__(self, parent):
        super().__init__(parent, Qt.WindowTitleHint)
        self._checkUpdateTask = self._installUpdateTask = None
        self._dlProgressBlocks = None
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setupUi(self)
        fixWidgetSizeOnHiDpi(self)

        # about browser
        self.aboutBrowser.anchorClicked.connect(self._NavigateAboutArea)
        self.aboutBrowser.document().setDocumentMargin(0)
        self.aboutBrowser.document().setDefaultStyleSheet(aboutBrowserCss)
        if updater.foundUpdate:
            self._NavigateAboutArea(QUrl('hzm://show-update'))
        elif updater.checkUpdateTask:
            # signal losing is impossible? because of GIL
            task = self._checkUpdateTask = updater.checkUpdateTask
            task.succeeded.connect(self._onCheckUpdateSucceeded)
            task.failed.connect(self._aboutAreaError)
            self._NavigateAboutArea(QUrl('hzm://show-info/' + self.tr('checking...')))
        else:
            self._NavigateAboutArea(QUrl('hzm://show-info'))

        self.openOutBtn.hide()  # can't set initial state in creator
        self.appIcoBtn.setIcon(qApp.windowIcon())
        self.appIcoBtn.setIconSize(QSize(32, 32) * scaleRatio)
        self.appIcoBtn.setStyleSheet('border: none')
        self.appIcoBtn.clicked.connect(self._easterEgg)
        # load settings
        self.updateCheck.setChecked(settings['Update'].getboolean('autoCheck'))
        self.aindCheck.setChecked(settings['Editor'].getboolean('autoIndent'))
        self.autoRoCheck.setChecked(settings['Editor'].getboolean('autoReadOnly'))
        self.tListCountCheck.setChecked(settings['Main'].getboolean('tagListCount'))
        if settings['Editor'].getboolean('titleFocus'):
            self.focusTitleRadio.setChecked(True)
        else:
            self.focusTextRadio.setChecked(True)
        self.bkCheck.setChecked(settings['Main'].getboolean('backup'))
        self.extendBgCheck.setChecked(settings['Main'].getboolean('extendTitleBarBg'))
        if isWin and not isDwmUsable():
            self.extendBgCheck.setEnabled(False)
            self.extendBgCheck.setChecked(False)
        # language ComboBox
        for l in sorted(languagesR):
            self.langCombo.addItem(l)
        lang = settings['Main'].get('lang', 'en')
        langIndex = self.langCombo.findText(languages.get(lang, 'English'))
        self.langCombo.setCurrentIndex(langIndex)

        self.rstCombo.model().item(0).setSelectable(False)
        self.rstCombo.addItems(db.list_backups())
        self.themeCombo.addItems(themes)
        self.themeCombo.setCurrentIndex(themes.index(settings['Main']['theme']))
        self.preLinesBox.setValue(settings['Main'].getint('previewLines'))
        # theme specific
        if settings['Main']['theme'] == '1px-rect':
            self._disableThemeSpe()
        else:
            self._enableThemeSpe()
        self.themeCombo.currentIndexChanged.connect(
            lambda idx: self._enableThemeSpe() if idx != 0 else self._disableThemeSpe())
        # setup font buttons & load settings(fonts)
        self.defFontGBox.setChecked('default' in settings['Font'])
        self.dtFontBtn.configName = 'datetime'
        self.titleFontBtn.configName = 'title'
        self.textFontBtn.configName = 'text'
        self.defFontBtn.configName = 'default'
        self.buttons = (self.dtFontBtn, self.titleFontBtn, self.textFontBtn,
                        self.defFontBtn)
        for i in self.buttons:
            i.clicked.connect(self._handleFontBtn)
            self._setFontButton(i, getattr(font, i.configName))
            if scaleRatio > 1:
                i.setMinimumWidth((i.minimumWidth() * scaleRatio))
        # setup statistics
        diaryCount = len(nikki)
        if diaryCount < 2:
            diaryDtRange = None
        elif settings['Main']['listSortBy'] == 'datetime' and parent:
            # only save 10 milliseconds (600 diaries)
            m = parent.findChild(QListView, 'nList').model()
            diaryDtRange = m.data(m.index(0, 1)), m.data(m.index(m.rowCount()-1, 1))
            if settings['Main'].getboolean('listReverse'):
                diaryDtRange = diaryDtRange[::-1]
        else:
            diaryDtRange = nikki.get_datetime_range()
        if diaryDtRange:
            qRange = tuple(map(lambda x: QDateTime.fromString(x, dbDatetimeFmtQt),
                               diaryDtRange))
            days = qRange[0].daysTo(qRange[1])
        else:
            days = 0
        if days > 0:
            freq = round(1 / (diaryCount / days), 1)
            oldest, newest = map(lambda x: x[:7], diaryDtRange)
            self.staLabel.setText(self.tr('Every <b>%s</b> days a diary, from <b>%s</b> to <b>%s</b>') %
                                  (freq, oldest, newest))
        else:
            self.staLabel.setText(self.tr('N/A'))