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
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'))
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'))