def __init__(self, nikkiDict, parent=None): super().__init__(parent) self._saveOnClose = True self.setupUi(self) self.readOnly = self.datetime = self.id = self.timeModified = self.tagModified = None restoreWidgetGeo(self, settings['Editor'].get('windowGeo')) self.titleEditor.setFont(font.title) self.titleEditor.returnPressed.connect( lambda: None if self.readOnly else self.textEditor.setFocus()) self.textEditor.setFont(font.text) self.textEditor.setAutoIndent( settings['Editor'].getboolean('autoIndent')) self.dtBtn.setFont(font.datetime) sz = max(font.datetime_m.ascent(), 12) self.dtBtn.setIconSize(QSize(sz, sz)) self.lockBtn.setIconSize(QSize(sz, sz)) self.lockBtn.clicked.connect(lambda: self.setReadOnly(False)) self.tagEditor.setTextMargins(QMargins(2, 0, 2, 0)) self.tagEditor.setCompleter( TagCompleter(list(nikki.gettags()), self.tagEditor)) self.tagEditor.returnPressed.connect( lambda: None if self.readOnly else self.box.button( QDialogButtonBox.Save).setFocus()) # setup shortcuts # seems PySide has problem with QKeySequence.StandardKeys self.closeSaveSc = QShortcut(QKeySequence.Save, self, self.close) self.closeNoSaveSc = QShortcut(QKeySequence('Ctrl+W'), self, self.closeNoSave) self.quickCloseSc = QShortcut(QKeySequence('Esc'), self, self.closeNoSave) # Ctrl+Shift+Backtab doesn't work self.preSc = QShortcut(QKeySequence('Ctrl+Shift+Tab'), self) self.quickPreSc = QShortcut(QKeySequence('Left'), self) self.nextSc = QShortcut(QKeySequence('Ctrl+Tab'), self) self.quickNextSc = QShortcut(QKeySequence('Right'), self) self.fromNikkiDict(nikkiDict)
def __init__(self, diaryDict, parent=None): super().__init__(parent) self._saveOnClose = True self.setupUi(self) self.readOnly = self.datetime = self.id = self.timeModified = self.tagModified = None restoreWidgetGeo(self, settings['Editor'].get('windowGeo')) self.titleEditor.setFont(font.title) self.titleEditor.returnPressed.connect( lambda: None if self.readOnly else self.textEditor.setFocus()) self.textEditor.setFont(font.text) self.textEditor.setAutoIndent(settings['Editor'].getboolean('autoIndent')) self.textEditor.setTabChangesFocus(not settings['Editor'].getboolean('tabIndent')) self.dtBtn.setFont(font.datetime) sz = max(font.datetime_m.ascent(), 12) self.dtBtn.setIconSize(QSize(sz, sz)) self.lockBtn.setIconSize(QSize(sz, sz)) self.lockBtn.clicked.connect(lambda: self.setReadOnly(False)) self.tagEditor.setTextMargins(QMargins(2, 0, 2, 0)) self.tagEditor.setCompleter(TagCompleter(list(db.get_tags()), self.tagEditor)) self.tagEditor.returnPressed.connect( lambda: None if self.readOnly else self.box.button(QDialogButtonBox.Save).setFocus()) # setup shortcuts # seems PySide has problem with QKeySequence.StandardKeys self.closeSaveSc = QShortcut(QKeySequence.Save, self, self.close) self.closeNoSaveSc = QShortcut(QKeySequence('Ctrl+W'), self, self.closeNoSave) self.quickCloseSc = QShortcut(QKeySequence('Esc'), self, self.closeNoSave) # Ctrl+Shift+Backtab doesn't work self.preSc = QShortcut(QKeySequence('Ctrl+Shift+Tab'), self) self.quickPreSc = QShortcut(QKeySequence('Left'), self) self.nextSc = QShortcut(QKeySequence('Ctrl+Tab'), self) self.quickNextSc = QShortcut(QKeySequence('Right'), self) self.fromDiaryDict(diaryDict)
def __init__(self): super().__init__() self.setupUi(self) self.cfgDialog = self.heatMap = None # create on on_cfgAct_triggered restoreWidgetGeo(self, settings['Main'].get('windowGeo')) # setup toolbar bg properties; the second stage is in showEvent self.onExtendTitleBarBgChanged(init=True) self.toolBar.setIconSize(QSize(24, 24) * scaleRatio) # setup TagList width tListW = settings['Main'].getint('tagListWidth') tListW = tListW * scaleRatio if tListW else int(self.width() * 0.2) if not self.isMaximized(): self.splitter.setSizes([tListW, self.width()-tListW]) # setup sort menu self.createSortMenu() self.toolBar.widgetForAction(self.sorAct).setPopupMode(QToolButton.InstantPopup) # Qt Designer doesn't allow us to add widget in toolbar # setup count label countLabel = self.countLabel = QLabel(self.toolBar) countLabel.setObjectName('countLabel') p = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) p.setHorizontalStretch(8) countLabel.setSizePolicy(p) countLabel.setAlignment(Qt.AlignVCenter | Qt.AlignRight) countLabel.setIndent(6) self.toolBar.addWidget(countLabel) # setup search box box = self.searchBox = SearchBox(self.toolBar) p = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) p.setHorizontalStretch(5) box.setSizePolicy(p) box.setMinimumHeight(22 * scaleRatio) box.setMinimumWidth(box.minimumHeight() * 7.5) box.contentChanged.connect(self.nList.setFilterBySearchString) self.toolBar.addWidget(box) spacerWidget = QWidget(self.toolBar) spacerWidget.setFixedSize(2.5 * scaleRatio, 1) self.toolBar.addWidget(spacerWidget) if settings['Main'].getboolean('tagListVisible'): self.tListAct.trigger() else: self.tList.hide() # setup shortcuts searchSc = QShortcut(QKeySequence.Find, self) searchSc.activated.connect(self.searchBox.setFocus) # setup bigger toolbar icons originSz = QSize(24, 24) if scaleRatio > 1.0: for i in [self.cfgAct, self.creAct, self.delAct, self.mapAct, self.sorAct, self.tListAct]: ico = i.icon() ico.addPixmap(ico.pixmap(originSz).scaled(originSz * scaleRatio)) i.setIcon(ico) # setup auto update check if updater.isCheckNeeded(): task = updater.CheckUpdate() QTimer.singleShot(1200, task.start) task.succeeded.connect(self.setUpdateHint) # use lambda here will cause segfault! # delay list loading until main event loop start QTimer.singleShot(0, self.nList.load)
def __init__(self): super().__init__() self.setupUi(self) self.cfgDialog = self.heatMap = self.ssEditor = None # create on action triggered self.editors = OrderedDict( ) # diaryId => Editor, id of new diary is -1 restoreWidgetGeo(self, settings['Main'].get('windowGeo')) # setup toolbar bg properties; the second stage is in showEvent self.setToolbarProperty() self.toolBar.setIconSize(QSize(24, 24) * scaleRatio) self.diaryList.editAct.triggered.connect(self.startEditor) self.diaryList.gotoAct.triggered.connect(self.onGotoActTriggered) self.diaryList.delAct.triggered.connect(self.deleteDiary) # setup TagList self._tagListAni = QPropertyAnimation(self, 'tagListWidth') self._tagListAni.setEasingCurve(QEasingCurve(QEasingCurve.OutCubic)) self._tagListAni.setDuration(150) self._tagListAni.finished.connect(self.onTagListAniFinished) # setup sort menu menu = QMenu(self) group = QActionGroup(menu) datetime = QAction(self.tr('Date'), group) datetime.name = 'datetime' title = QAction(self.tr('Title'), group) title.name = 'title' length = QAction(self.tr('Length'), group) length.name = 'length' ascDescGroup = QActionGroup(menu) asc = QAction(self.tr('Ascending'), ascDescGroup) asc.name = 'asc' desc = QAction(self.tr('Descending'), ascDescGroup) desc.name = 'desc' for i in [datetime, title, length, None, asc, desc]: if i is None: menu.addSeparator() continue i.setCheckable(True) menu.addAction(i) i.triggered[bool].connect(self.onSortOrderChanged) # restore from settings order = settings['Main']['listSortBy'] locals()[order].setChecked(True) if settings['Main'].getboolean('listReverse'): desc.setChecked(True) else: asc.setChecked(True) self.sorAct.setMenu(menu) self.toolBar.widgetForAction(self.sorAct).setPopupMode( QToolButton.InstantPopup) # setup count label # Qt Designer doesn't allow us to add widget in toolbar p = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) p.setHorizontalStretch(8) spacer1 = QWidget(self.toolBar) spacer1.setSizePolicy(p) self.toolBar.addWidget(spacer1) countLabel = self.countLabel = QLabel(self.toolBar, objectName='countLabel') countLabel.setSizePolicy( QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)) countLabel.setMargin(4 * scaleRatio) self.toolBar.addWidget(countLabel) # setup search box box = self.searchBox = SearchBox(self) p = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) p.setHorizontalStretch(5) box.setSizePolicy(p) box.setMinimumHeight(22 * scaleRatio) box.setMinimumWidth(box.minimumHeight() * 7.5) box.byTitleTextAct.triggered.connect(self._setSearchBy) box.byDatetimeAct.triggered.connect(self._setSearchBy) self._setSearchBy() self.toolBar.addWidget(box) spacer2 = QWidget(self.toolBar) spacer2.setFixedSize(2.5 * scaleRatio, 1) self.toolBar.addWidget(spacer2) if settings['Main'].getboolean('tagListVisible'): self.tListAct.setChecked(True) # will not trigger signal if self.isMaximized(): # Qt will maximize the window after showing... why? QTimer.singleShot( 0, lambda: self.toggleTagList(True, animated=False)) else: self.toggleTagList(True, animated=False) else: self.tagList.hide() # don't use toggleTagList, it will save width # setup shortcuts searchSc = QShortcut(QKeySequence.Find, self) searchSc.activated.connect(self.searchBox.setFocus) # setup bigger toolbar icons if scaleRatio > 1.0: for act, fname in [(self.cfgAct, 'config'), (self.creAct, 'new'), (self.delAct, 'delete'), (self.mapAct, 'heatmap'), (self.sorAct, 'sort'), (self.tListAct, 'tag-list')]: act.setIcon(makeQIcon(':/toolbar/%s.png' % fname)) # setup auto update check if updater.isCheckNeeded(): task = updater.CheckUpdate() QTimer.singleShot(1200, task.start) task.succeeded.connect( self.setUpdateHint) # use lambda here will cause segfault! # delay list loading until main event loop start QTimer.singleShot(0, self.diaryList.load)