From bfba63b246b5dae7c48b820cac55622cac62afee Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 23 Nov 2013 11:14:02 +0530 Subject: [PATCH] Pre-fill search box with selected text when starting a search --- src/calibre/gui2/tweak_book/boss.py | 8 ++++++++ src/calibre/gui2/tweak_book/editor/text.py | 4 ++++ src/calibre/gui2/tweak_book/editor/widget.py | 4 ++++ src/calibre/gui2/tweak_book/search.py | 7 +++++++ src/calibre/gui2/tweak_book/ui.py | 5 ++++- 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index e73de41c03..db7743e855 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -313,6 +313,14 @@ class Boss(QObject): if ed.has_marked_text: self.gui.central.search_panel.set_where('selected-text') + def show_find(self): + self.gui.central.show_find() + ed = self.gui.central.current_editor + if ed is not None: + text = ed.selected_text + if text and text.strip(): + self.gui.central.pre_fill_search(text) + def search(self, action, overrides=None): ' Run a search/replace ' sp = self.gui.central.search_panel diff --git a/src/calibre/gui2/tweak_book/editor/text.py b/src/calibre/gui2/tweak_book/editor/text.py index e45d6df3e8..056579e6ac 100644 --- a/src/calibre/gui2/tweak_book/editor/text.py +++ b/src/calibre/gui2/tweak_book/editor/text.py @@ -72,6 +72,10 @@ class TextEdit(QPlainTextEdit): self.document().setModified(bool(val)) return property(fget=fget, fset=fset) + @property + def selected_text(self): + return unicode(self.textCursor().selectedText()) + def sizeHint(self): return self.size_hint diff --git a/src/calibre/gui2/tweak_book/editor/widget.py b/src/calibre/gui2/tweak_book/editor/widget.py index ef42c76b19..794d9ddc24 100644 --- a/src/calibre/gui2/tweak_book/editor/widget.py +++ b/src/calibre/gui2/tweak_book/editor/widget.py @@ -86,6 +86,10 @@ class Editor(QMainWindow): def redo(self): self.editor.redo() + @property + def selected_text(self): + return self.editor.selected_text + # Search and replace {{{ def mark_selected_text(self): self.editor.mark_selected_text() diff --git a/src/calibre/gui2/tweak_book/search.py b/src/calibre/gui2/tweak_book/search.py index 62ed06b7c8..36fa244138 100644 --- a/src/calibre/gui2/tweak_book/search.py +++ b/src/calibre/gui2/tweak_book/search.py @@ -226,6 +226,12 @@ class SearchWidget(QWidget): def save_state(self): tprefs.set('find-widget-state', self.state) + def pre_fill(self, text): + if self.mode == 'regex': + text = regex.escape(text, special_only=True) + self.find = text + self.find_text.setSelection(0, len(text)+10) + # }}} regex_cache = {} @@ -251,6 +257,7 @@ class SearchPanel(QWidget): l.addWidget(self.widget) self.restore_state, self.save_state = self.widget.restore_state, self.widget.save_state self.widget.search_triggered.connect(self.search_triggered) + self.pre_fill = self.widget.pre_fill def hide_panel(self): self.setVisible(False) diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index 2d8c2493c1..bf8c78cc22 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -113,6 +113,9 @@ class Central(QStackedWidget): def show_find(self): self.search_panel.show_panel() + def pre_fill_search(self, text): + self.search_panel.pre_fill(text) + class Main(MainWindow): APP_NAME = _('Tweak Book') @@ -231,7 +234,7 @@ class Main(MainWindow): # Search actions group = _('Search') - self.action_find = reg('search.png', _('&Find/Replace'), self.central.show_find, 'find-replace', ('Ctrl+F',), _('Show the Find/Replace panel')) + self.action_find = reg('search.png', _('&Find/Replace'), self.boss.show_find, 'find-replace', ('Ctrl+F',), _('Show the Find/Replace panel')) def sreg(name, text, action, overrides={}, keys=(), description=None, icon=None): return reg(icon, text, partial(self.boss.search, action, overrides), name, keys, description or text.replace('&', '')) self.action_find_next = sreg('find-next', _('Find &Next'),