From fd798acc03ade94216e5d6edfd451d036444323f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 24 Nov 2020 09:19:54 +0530 Subject: [PATCH] Edit book: Allow adding tags to the list of tags for the insert tag button --- src/calibre/gui2/tweak_book/editor/widget.py | 41 ++++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/tweak_book/editor/widget.py b/src/calibre/gui2/tweak_book/editor/widget.py index ff8e10448c..b0dadebec0 100644 --- a/src/calibre/gui2/tweak_book/editor/widget.py +++ b/src/calibre/gui2/tweak_book/editor/widget.py @@ -5,25 +5,30 @@ __license__ = 'GPL v3' __copyright__ = '2013, Kovid Goyal ' -import unicodedata, math +import math +import unicodedata from functools import partial - from PyQt5.Qt import ( - QMainWindow, Qt, QApplication, pyqtSignal, QMenu, qDrawShadeRect, QPainter, - QImage, QColor, QIcon, QPixmap, QToolButton, QAction, QTextCursor, QSize) + QAction, QApplication, QColor, QIcon, QImage, QInputDialog, QMainWindow, QMenu, + QPainter, QPixmap, QSize, Qt, QTextCursor, QToolButton, pyqtSignal, + qDrawShadeRect +) from calibre import prints from calibre.constants import DEBUG from calibre.ebooks.chardet import replace_encoding_declarations -from calibre.gui2.tweak_book import ( - actions, current_container, tprefs, dictionaries, editor_toolbar_actions, - editor_name, editors, update_mark_text_action) from calibre.gui2 import error_dialog, open_url -from calibre.gui2.tweak_book.editor import SPELL_PROPERTY, LINK_PROPERTY, TAG_NAME_PROPERTY, CSS_PROPERTY +from calibre.gui2.tweak_book import ( + actions, current_container, dictionaries, editor_name, editor_toolbar_actions, + editors, tprefs, update_mark_text_action +) +from calibre.gui2.tweak_book.editor import ( + CSS_PROPERTY, LINK_PROPERTY, SPELL_PROPERTY, TAG_NAME_PROPERTY +) from calibre.gui2.tweak_book.editor.help import help_url from calibre.gui2.tweak_book.editor.text import TextEdit from calibre.utils.icu import utf16_length -from polyglot.builtins import itervalues, unicode_type, string_or_bytes +from polyglot.builtins import itervalues, string_or_bytes, unicode_type def create_icon(text, palette=None, sz=None, divider=2, fill='white'): @@ -244,8 +249,9 @@ class Editor(QMainWindow): names = tprefs['insert_tag_mru'] for name in names: m.addAction(name, partial(self.insert_tag, name)) + m.addSeparator() + m.addAction(_('Add a tag to this menu'), self.add_insert_tag) if names: - m.addSeparator() m = m.addMenu(_('Remove from this menu')) for name in names: m.addAction(name, partial(self.remove_insert_tag, name)) @@ -261,6 +267,15 @@ class Editor(QMainWindow): tprefs['insert_tag_mru'] = mru self._build_insert_tag_button_menu() + def add_insert_tag(self): + name, ok = QInputDialog.getText(self, _('Name of tag to add'), _( + 'Enter the name of the tag')) + if ok: + mru = tprefs['insert_tag_mru'] + mru.insert(0, name) + tprefs['insert_tag_mru'] = mru + self._build_insert_tag_button_menu() + def remove_insert_tag(self, name): mru = tprefs['insert_tag_mru'] try: @@ -491,7 +506,9 @@ class Editor(QMainWindow): return False def pretty_print(self, name): - from calibre.ebooks.oeb.polish.pretty import pretty_html, pretty_css, pretty_xml + from calibre.ebooks.oeb.polish.pretty import ( + pretty_css, pretty_html, pretty_xml + ) if self.syntax in {'css', 'html', 'xml'}: func = {'css':pretty_css, 'xml':pretty_xml}.get(self.syntax, pretty_html) original_text = unicode_type(self.editor.toPlainText()) @@ -606,9 +623,9 @@ class Editor(QMainWindow): def launch_editor(path_to_edit, path_is_raw=False, syntax='html', callback=None): from calibre.gui2 import Application from calibre.gui2.tweak_book import dictionaries + from calibre.gui2.tweak_book.editor.syntax.html import refresh_spell_check_status from calibre.gui2.tweak_book.main import option_parser from calibre.gui2.tweak_book.ui import Main - from calibre.gui2.tweak_book.editor.syntax.html import refresh_spell_check_status dictionaries.initialize() refresh_spell_check_status() opts = option_parser().parse_args([])