From dc1c314f46d8439ce89d9bb32c8d749d4a4b0d7f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 22 Mar 2014 10:26:01 +0530 Subject: [PATCH] Saved searches: Allow saving normal mode searches as well --- src/calibre/gui2/tweak_book/search.py | 43 +++++++++++++++++++-------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/tweak_book/search.py b/src/calibre/gui2/tweak_book/search.py index bf6d17f263..e2b5c34625 100644 --- a/src/calibre/gui2/tweak_book/search.py +++ b/src/calibre/gui2/tweak_book/search.py @@ -114,6 +114,28 @@ class DirectionBox(QComboBox): self.setCurrentIndex(1 if val == 'up' else 0) return property(fget=fget, fset=fset) +class ModeBox(QComboBox): + + def __init__(self, parent): + QComboBox.__init__(self, parent) + self.addItems([_('Normal'), _('Regex')]) + self.setToolTip('' + _( + '''Select how the search expression is interpreted +
+
Normal
+
The search expression is treated as normal text, calibre will look for the exact text.
+
Regex
+
The search expression is interpreted as a regular expression. See the User Manual for more help on using regular expressions.
+
''')) + + @dynamic_property + def mode(self): + def fget(self): + return 'normal' if self.currentIndex() == 0 else 'regex' + def fset(self, val): + self.setCurrentIndex({'regex':1}.get(val, 0)) + return property(fget=fget, fset=fset) + class SearchWidget(QWidget): @@ -169,17 +191,8 @@ class SearchWidget(QWidget): ml.setAlignment(Qt.AlignRight | Qt.AlignCenter) l.addWidget(ml, 2, 0) l.addLayout(ol, 2, 1, 1, 3) - self.mode_box = mb = QComboBox(self) + self.mode_box = mb = ModeBox(self) mb.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) - mb.addItems([_('Normal'), _('Regex')]) - mb.setToolTip('' + _( - '''Select how the search expression is interpreted -
-
Normal
-
The search expression is treated as normal text, calibre will look for the exact text.
-
Regex
-
The search expression is interpreted as a regular expression. See the User Manual for more help on using regular expressions.
-
''')) ml.setBuddy(mb) ol.addWidget(mb) @@ -212,9 +225,9 @@ class SearchWidget(QWidget): @dynamic_property def mode(self): def fget(self): - return 'normal' if self.mode_box.currentIndex() == 0 else 'regex' + return self.mode_box.mode def fset(self, val): - self.mode_box.setCurrentIndex({'regex':1}.get(val, 0)) + self.mode_box.mode = val self.da.setVisible(self.mode == 'regex') return property(fget=fget, fset=fset) @@ -420,6 +433,7 @@ class EditSearch(Dialog): # {{{ self.replace.setText(state['replace']) self.case_sensitive.setChecked(state['case_sensitive']) self.dot_all.setChecked(state['dot_all']) + self.mode_box.mode = state.get('mode') def sizeHint(self): ans = Dialog.sizeHint(self) @@ -450,6 +464,10 @@ class EditSearch(Dialog): # {{{ d.setChecked(self.search.get('dot_all', SearchWidget.DEFAULT_STATE['dot_all'])) l.addRow(d) + self.mode_box = m = ModeBox(self) + self.mode_box.mode = self.search.get('mode', 'regex') + l.addRow(_('&Mode:'), m) + l.addRow(self.bb) def accept(self): @@ -476,6 +494,7 @@ class EditSearch(Dialog): # {{{ search['dot_all'] = bool(self.dot_all.isChecked()) search['case_sensitive'] = bool(self.case_sensitive.isChecked()) + search['mode'] = self.mode_box.mode if self.search_index == -1: searches.append(search)