예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
파일: mainwindow.py 프로젝트: p0i0/Hazama
    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)
예제 #4
0
    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)