Exemplo n.º 1
0
 def populateFromMarkup(self, markup):
     with Lib.BlockSignals(self):
         self.documentStartEdit.setPlainText(markup.DocumentStart)
         self.documentEndEdit.setPlainText(markup.DocumentEnd)
         self.noteEdit.setPlainText(markup.Note)
         self.sectionStartEdit.setPlainText(markup.SectionStart)
         self.sectionEndEdit.setPlainText(markup.SectionEnd)
         self.mainStartEdit.setPlainText(markup.MainStart)
         self.mainEndEdit.setPlainText(markup.MainEnd)
         self.sub1StartEdit.setPlainText(markup.Sub1Start)
         self.sub1EndEdit.setPlainText(markup.Sub1End)
         self.sub2StartEdit.setPlainText(markup.Sub2Start)
         self.sub2EndEdit.setPlainText(markup.Sub2End)
         self.sub3StartEdit.setPlainText(markup.Sub3Start)
         self.sub3EndEdit.setPlainText(markup.Sub3End)
         self.sub4StartEdit.setPlainText(markup.Sub4Start)
         self.sub4EndEdit.setPlainText(markup.Sub4End)
         self.sub5StartEdit.setPlainText(markup.Sub5Start)
         self.sub5EndEdit.setPlainText(markup.Sub5End)
         self.sub6StartEdit.setPlainText(markup.Sub6Start)
         self.sub6EndEdit.setPlainText(markup.Sub6End)
         self.sub7StartEdit.setPlainText(markup.Sub7Start)
         self.sub7EndEdit.setPlainText(markup.Sub7End)
         self.sub8StartEdit.setPlainText(markup.Sub8Start)
         self.sub8EndEdit.setPlainText(markup.Sub8End)
         self.sub9StartEdit.setPlainText(markup.Sub9Start)
         self.sub9EndEdit.setPlainText(markup.Sub9End)
Exemplo n.º 2
0
 def goHome(self, ctrl=False):
     if not self.cache:
         return
     self.selectedLino = 0
     with Lib.BlockSignals(self.scrollbar):
         self.scrollbar.setValue(0)
     self.refresh()
Exemplo n.º 3
0
 def _setGroupOrPagesOrder(self, gid=None):
     self.filterTextComboBox.setEditable(False)
     self.filterTextComboBox.setEnabled(True)
     items = []
     filter = FilterKind(
         self.filterComboBox.itemData(self.filterComboBox.currentIndex()))
     if filter is FilterKind.IN_NORMAL_GROUP:
         items = list(self.state.model.normalGroups())
     elif filter is FilterKind.IN_LINKED_GROUP:
         items = list(self.state.model.linkedGroups())
     elif filter is FilterKind.PAGES_ORDER:
         items = [(int(x), x.text) for x in PagesOrderKind]
     if self.prevFilter not in {
             FilterKind.IN_NORMAL_GROUP, FilterKind.IN_LINKED_GROUP,
             FilterKind.PAGES_ORDER
     }:
         self.matchTexts = []
         for i in range(self.filterTextComboBox.count()):
             self.matchTexts.append(self.filterTextComboBox.itemText(i))
     with Lib.BlockSignals(self.filterTextComboBox):
         index = None
         self.filterTextComboBox.clear()
         for i, (itemId, name) in enumerate(items):
             self.filterTextComboBox.addItem(name, itemId)
             if gid is not None and gid == itemId:
                 index = i
         if index is not None:
             self.filterTextComboBox.setCurrentIndex(index)
     self.setMatch()
Exemplo n.º 4
0
 def viewEntry(self, eid=None):
     # Either we are editing or viewing (see also cancelAdd())
     if self.mode is not ModeKind.ADD or eid is None:
         if eid is None:
             eid = self.viewAllPanel.view.selectedEid
         with Lib.BlockSignals(self.entryPanel):
             self.entryPanel.setEntry(self.model.entry(eid))
         self.setMode(ModeKind.VIEW)
Exemplo n.º 5
0
 def combine(self):
     pages = self.combinedPagesLabel.text()
     if pages != self.originalPagesLabel.text():
         with Lib.BlockSignals(self.state.model):
             self.state.model.editEntry(self.entry, self.entry.saf,
                                        self.entry.sortas, self.entry.term,
                                        pages)
     self.skip()
Exemplo n.º 6
0
 def refreshEntry(self, eid):
     entry = self.model.entry(eid, withIndent=True, withXrefIndicator=True)
     if entry is not None:
         with Lib.BlockSignals(self.entryPanel):
             self.entryPanel.setEntry(entry)
         self.viewAllPanel.view.updateCache(entry)
         self.viewFilteredPanel.requery()
         self.viewFilteredPanel.view.updateCache(entry)
         self.updateUi()
Exemplo n.º 7
0
 def updateUi(self):
     self.sortAsEdit.setEnabled(self.customRadioButton.isChecked())
     with Lib.BlockSignals(self.sortAsEdit):
         for i, radioButton in enumerate(self.radioButtons):
             if radioButton.isChecked():
                 self.sortAsEdit.setText(self.candidates[i].candidate)
                 self.sortAsEdit.selectAll()
                 break
     self.okButton.setEnabled(
         not self.customRadioButton.isChecked() or
         (self.customRadioButton.isChecked() and
          bool(self.sortAsEdit.toPlainText())))
Exemplo n.º 8
0
 def cancelAdd(self):
     prefix = self.state.entryPanel.termEdit.toPlainText()
     with Lib.BlockSignals(self.state.entryPanel):
         self.state.entryPanel.clearForm()
     self.state.setMode(ModeKind.VIEW)
     if not self.state.window.gotoActions.gotoPrefix(prefix):
         eid = self.state.viewAllPanel.view.selectedEid
         if eid is not None:
             self.state.window.gotoActions.gotoEid(eid)
     if bool(self.state.model):
         editor = self.state.entryPanel.pagesEdit
         editor.setFocus()
         cursor = editor.textCursor()
         cursor.movePosition(QTextCursor.End)
         editor.setTextCursor(cursor)
Exemplo n.º 9
0
 def gotoEid(self, eid):
     if self.state.model.hasEntry(eid):
         for offset, (indent, entryEid) in enumerate(
                 self.state.model.entries(offset=0, limit=UNLIMITED)):
             if entryEid == eid:
                 halfPage = self.scrollbar.pageStep() // 2
                 if offset > halfPage: # Keep some context
                     offset -= halfPage
                 else:
                     offset = 0
                 with Lib.BlockSignals(self.scrollbar):
                     self.scrollbar.setValue(offset)
                 self.selectedLino = None
                 self.selectedEid = eid
                 break
     self.refresh()
Exemplo n.º 10
0
 def delete(self):
     widget = QApplication.focusWidget()
     if self.state.mode in {ModeKind.NO_INDEX, ModeKind.CHANGE}:
         return  # Can't delete if there's no index or big changes
     if self.state.mode in {ModeKind.ADD, ModeKind.EDIT}:
         self.save()  # Save outstanding changes & set to view mode first
     if self.state.entryPanel.entry is None:
         return  # Should never happen
     eid = self.state.entryPanel.entry.eid
     if eid is None:
         return  # Should never happen
     eids = list(self.state.model.deletableEntries(eid))
     if not eids:
         return  # Should never happen
     message = "Delete entry “{}”".format(self.state.model.term(eid))
     if len(eids) == 2:
         message += ", and its subentry"
     elif len(eids) > 2:
         count = Lib.spellNumber(len(eids) - 1, limit=20)
         message += ", and its {} subentries".format(count)
     message += (", and any related cross-references, and also "
                 "remove from any groups")
     with Lib.Qt.DisableUI(*self.window.widgets(), forModalDialog=True):
         reply = QMessageBox.question(
             self.window,
             "Delete Entry — {}".format(QApplication.applicationName()),
             "<p>{}?".format(message), QMessageBox.Yes | QMessageBox.No,
             QMessageBox.Yes)
     if reply == QMessageBox.Yes:
         self.state.model.deleteEntry(eid, message[0].lower() + message[1:])
         with Lib.BlockSignals(self.state.entryPanel):
             self.state.entryPanel.clearForm()
         self.state.window.refreshBookmarks()
         self.state.viewFilteredPanel.setMatch()
         selectedEid = self.state.viewAllPanel.view.selectedEid
         if len(self.state.model):
             if selectedEid == eid:
                 self.state.viewAllPanel.view.goUp()
             elif selectedEid is None:
                 self.state.viewAllPanel.view.goEnd()
             else:
                 self.state.viewEntry(selectedEid)
     Lib.restoreFocus(widget)
Exemplo n.º 11
0
 def _calculateSortAs(self, term, candidates):
     widget = QApplication.focusWidget()
     if len(candidates) == 1:
         sortas = candidates[0].candidate
         saf = candidates[0].saf
     else:
         result = Forms.SortAs.Result()
         with Lib.Qt.DisableUI(*self.window.widgets(), forModalDialog=True):
             form = Forms.SortAs.Form(self, term, candidates, result,
                                      self.window)
             form.exec_()
         sortas = result.sortas
         saf = result.saf
     if saf == Saf.CUSTOM:
         with Lib.BlockSignals(self.entryPanel.calcSortAsCheckBox):
             self.entryPanel.calcSortAsCheckBox.setChecked(False)
     self.entryPanel.sortAsEdit.setPlainText(sortas)
     self.entryPanel.saf = saf
     self.maybeSave()
     Lib.restoreFocus(widget)
Exemplo n.º 12
0
 def findSizes(self, font):
     fontDatabase = QFontDatabase()
     currentSize = self.sizeComboBox.currentText()
     with Lib.BlockSignals(self.sizeComboBox):
         self.sizeComboBox.clear()
         if fontDatabase.isSmoothlyScalable(font.family(),
                                            fontDatabase.styleString(font)):
             for size in QFontDatabase.standardSizes():
                 self.sizeComboBox.addItem(str(size))
         else:
             for size in fontDatabase.smoothSizes(
                     font.family(), fontDatabase.styleString(font)):
                 self.sizeComboBox.addItem(str(size))
         self.sizeComboBox.setEditable(False)
     sizeIndex = self.sizeComboBox.findText(currentSize)
     if sizeIndex == -1:
         self.sizeComboBox.setCurrentIndex(
             max(0,
                 self.sizeComboBox.count() / 3))
     else:
         self.sizeComboBox.setCurrentIndex(sizeIndex)
Exemplo n.º 13
0
 def goDown(self, ctrl=False):
     if not self.cache:
         return
     if self._onLastLine:
         self.setSelectedLino(self.lineCount - 1)
         return
     lino = self.selectedLino + 1
     if lino < self.lineCount:
         self.setSelectedLino(lino)
     else:
         lines = max(1, self.scrollbar.pageStep() // 3)
         offset = self.scrollbar.value() + lines
         if offset > self.scrollbar.maximum():
             lines = ((self.scrollbar.maximum() - self.scrollbar.value()) //
                      2)
             offset = self.scrollbar.value() + lines
         with Lib.BlockSignals(self.scrollbar):
             self.scrollbar.setValue(offset)
         excess = 1 if lines == offset else 0
         self.selectedLino = self.lineCount - lines + excess
         self.selectedEid = None
         self.refresh()
Exemplo n.º 14
0
 def populateFromMarkup(self, markup):
     with Lib.BlockSignals(self):
         self.escapeFunctionComboBox.setCurrentIndex(
             0 if markup.escapefunction == "html" else 1)
         self.pageRangeSeparatorEdit.setPlainText(markup.RangeSeparator)
         self.stdFontStartEdit.setPlainText(markup.StdFontStart)
         self.stdFontEndEdit.setPlainText(markup.StdFontEnd)
         self.altFontStartEdit.setPlainText(markup.AltFontStart)
         self.altFontEndEdit.setPlainText(markup.AltFontEnd)
         self.monoFontStartEdit.setPlainText(markup.MonoFontStart)
         self.monoFontEndEdit.setPlainText(markup.MonoFontEnd)
         self.boldStartEdit.setPlainText(markup.BoldStart)
         self.boldEndEdit.setPlainText(markup.BoldEnd)
         self.italicStartEdit.setPlainText(markup.ItalicStart)
         self.italicEndEdit.setPlainText(markup.ItalicEnd)
         self.subscriptStartEdit.setPlainText(markup.SubscriptStart)
         self.subscriptEndEdit.setPlainText(markup.SubscriptEnd)
         self.superscriptStartEdit.setPlainText(markup.SuperscriptStart)
         self.superscriptEndEdit.setPlainText(markup.SuperscriptEnd)
         self.underlineStartEdit.setPlainText(markup.UnderlineStart)
         self.underlineEndEdit.setPlainText(markup.UnderlineEnd)
         self.strikeoutStartEdit.setPlainText(markup.StrikeoutStart)
         self.strikeoutEndEdit.setPlainText(markup.StrikeoutEnd)
Exemplo n.º 15
0
 def query(self):
     filter = FilterKind(
         self.filterComboBox.itemData(self.filterComboBox.currentIndex()))
     if filter in {
             FilterKind.IN_NORMAL_GROUP, FilterKind.IN_LINKED_GROUP,
             FilterKind.PAGES_ORDER
     }:
         self._setGroupOrPagesOrder()
     elif filter in {
             FilterKind.ENTRIES_WITH_PAGES, FilterKind.TERMS_MATCHING,
             FilterKind.NOTES_MATCHING
     }:
         self.filterTextComboBox.setEditable(True)
         self.filterTextComboBox.setEnabled(True)
         if self.matchTexts:
             with Lib.BlockSignals(self.filterTextComboBox):
                 self.filterTextComboBox.clear()
                 self.filterTextComboBox.addItems(self.matchTexts)
             self.matchTexts = []
         self.setMatch()
     else:
         self.filterTextComboBox.setEnabled(False)
         self.view.query(filter)
     self.prevFilter = filter
Exemplo n.º 16
0
 def setMatch(self, match=None):
     filter = FilterKind(
         self.filterComboBox.itemData(self.filterComboBox.currentIndex()))
     if match is None:
         match = self.filterTextComboBox.currentText()
     arg = match
     if filter in {
             FilterKind.IN_NORMAL_GROUP, FilterKind.IN_LINKED_GROUP,
             FilterKind.PAGES_ORDER
     }:
         arg = self.filterTextComboBox.itemData(
             self.filterTextComboBox.currentIndex())
     elif filter is FilterKind.ENTRIES_WITH_PAGES:
         arg = Pages.searchablePages(match)
     self.view.query(filter, arg)
     if match:
         with Lib.BlockSignals(self.filterTextComboBox):
             index = self.filterTextComboBox.findText(match)
             if index == -1:
                 self.filterTextComboBox.addItem(match)
                 self.filterTextIndex = (self.filterTextComboBox.count() -
                                         1)
             else:
                 self.filterTextIndex = index