From 7b480b371a6e34c23dcca404e2b4cd04af2484b7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 12 Jul 2018 16:29:49 +0530 Subject: [PATCH] Comments Editor: Add options to change the case of the selected text to the right click menu. Fixes #1780469 [[Enhancement] Additiiona feature for metadata comments box](https://bugs.launchpad.net/calibre/+bug/1780469) --- src/calibre/gui2/comments_editor.py | 12 +++++++++++- src/calibre/gui2/widgets.py | 16 +++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index 1d6e8097b9..50de42a3be 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -23,6 +23,7 @@ except ImportError: from calibre.ebooks.chardet import xml_to_unicode from calibre import xml_replace_entities, prepare_string_for_xml from calibre.gui2 import open_url, error_dialog, choose_files, gprefs, NO_URL_FORMATTING, secure_web_page +from calibre.gui2.widgets import LineEditECM from calibre.utils.soupparser import fromstring from calibre.utils.config import tweaks from calibre.utils.imghdr import what @@ -71,7 +72,7 @@ class BlockStyleAction(QAction): # {{{ # }}} -class EditorWidget(QWebView): # {{{ +class EditorWidget(QWebView, LineEditECM): # {{{ def __init__(self, parent=None): QWebView.__init__(self, parent) @@ -418,12 +419,21 @@ class EditorWidget(QWebView): # {{{ return False return QWebView.event(self, ev) + def text(self): + return self.page().selectedText() + + def setText(self, text): + self.exec_command('insertText', text) + def contextMenuEvent(self, ev): menu = self.page().createStandardContextMenu() paste = self.pageAction(QWebPage.Paste) for action in menu.actions(): if action == paste: menu.insertAction(action, self.pageAction(QWebPage.PasteAndMatchStyle)) + st = self.text() + if st and st.strip(): + self.create_change_case_menu(menu) parent = self._parent() if hasattr(parent, 'toolbars_visible'): vis = parent.toolbars_visible diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 183c3ae852..1e0b337c3f 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -92,7 +92,7 @@ class FilenamePattern(QWidget, Ui_Form): # {{{ self.re.lineEdit().setText(val) val_hist += gprefs.get('filename_pattern_history', [ - '(?P.+)', '(?P<author>[^_-]+) -?\s*(?P<series>[^_0-9-]*)(?P<series_index>[0-9]*)\s*-\s*(?P<title>[^_].+) ?']) + '(?P<title>.+)', r'(?P<author>[^_-]+) -?\s*(?P<series>[^_0-9-]*)(?P<series_index>[0-9]*)\s*-\s*(?P<title>[^_].+) ?']) if val in val_hist: del val_hist[val_hist.index(val)] val_hist.insert(0, val) @@ -460,11 +460,8 @@ class LineEditECM(object): # {{{ Extend the context menu of a QLineEdit to include more actions. ''' - def contextMenuEvent(self, event): - menu = self.createStandardContextMenu() - menu.addSeparator() - - case_menu = QMenu(_('Change case')) + def create_change_case_menu(self, menu): + case_menu = QMenu(_('Change case'), menu) action_upper_case = case_menu.addAction(_('Upper case')) action_lower_case = case_menu.addAction(_('Lower case')) action_swap_case = case_menu.addAction(_('Swap case')) @@ -476,8 +473,13 @@ class LineEditECM(object): # {{{ action_swap_case.triggered.connect(self.swap_case) action_title_case.triggered.connect(self.title_case) action_capitalize.triggered.connect(self.capitalize) - menu.addMenu(case_menu) + return case_menu + + def contextMenuEvent(self, event): + menu = self.createStandardContextMenu() + menu.addSeparator() + self.create_change_case_menu(menu) menu.exec_(event.globalPos()) def upper_case(self):