Use a radio button for the case-sensitive/primary find options as they are mutually exclusive

This commit is contained in:
Kovid Goyal 2016-08-24 17:20:02 +05:30
parent 470f621748
commit bf63198d19
4 changed files with 10 additions and 19 deletions

View File

@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en'
import textwrap import textwrap
from PyQt5.Qt import (QWidget, pyqtSignal, QCheckBox, QAbstractSpinBox, from PyQt5.Qt import (QWidget, pyqtSignal, QCheckBox, QAbstractSpinBox,
QLineEdit, QComboBox, Qt, QIcon, QDialog, QVBoxLayout, QLineEdit, QComboBox, Qt, QIcon, QDialog, QVBoxLayout, QRadioButton,
QDialogButtonBox) QDialogButtonBox)
from calibre.customize.ui import preferences_plugins from calibre.customize.ui import preferences_plugins
@ -101,6 +101,9 @@ class Setting(object):
if isinstance(self.gui_obj, QCheckBox): if isinstance(self.gui_obj, QCheckBox):
self.datatype = 'bool' self.datatype = 'bool'
self.gui_obj.stateChanged.connect(self.changed) self.gui_obj.stateChanged.connect(self.changed)
elif isinstance(self.gui_obj, QRadioButton):
self.datatype = 'bool'
self.gui_obj.toggled.connect(self.changed)
elif isinstance(self.gui_obj, QAbstractSpinBox): elif isinstance(self.gui_obj, QAbstractSpinBox):
self.datatype = 'number' self.datatype = 'number'
self.gui_obj.valueChanged.connect(self.changed) self.gui_obj.valueChanged.connect(self.changed)

View File

@ -7,13 +7,11 @@ __docformat__ = 'restructuredtext en'
from PyQt5.Qt import QApplication from PyQt5.Qt import QApplication
from calibre.gui2.preferences import ConfigWidgetBase, test_widget, \ from calibre.gui2.preferences import ConfigWidgetBase, test_widget, CommaSeparatedList
CommaSeparatedList, AbortCommit
from calibre.gui2.preferences.search_ui import Ui_Form from calibre.gui2.preferences.search_ui import Ui_Form
from calibre.gui2 import config, error_dialog, gprefs from calibre.gui2 import config, error_dialog, gprefs
from calibre.utils.config import prefs from calibre.utils.config import prefs
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from calibre.library.caches import set_use_primary_find_in_search
class ConfigWidget(ConfigWidgetBase, Ui_Form): class ConfigWidget(ConfigWidgetBase, Ui_Form):
@ -102,12 +100,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.muc_changed = False self.muc_changed = False
self.opt_grouped_search_make_user_categories.lineEdit().editingFinished.connect( self.opt_grouped_search_make_user_categories.lineEdit().editingFinished.connect(
self.muc_box_changed) self.muc_box_changed)
self.opt_case_sensitive.toggled.connect(self.case_sensitive_toggled)
self.case_sensitive_toggled()
def case_sensitive_toggled(self):
if self.opt_case_sensitive.isChecked():
self.opt_use_primary_find_in_search.setChecked(False)
def set_similar_fields(self, initial=False): def set_similar_fields(self, initial=False):
self.set_similar('similar_authors_search_key', initial=initial) self.set_similar('similar_authors_search_key', initial=initial)
@ -218,11 +210,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.gst_value.blockSignals(False) self.gst_value.blockSignals(False)
def commit(self): def commit(self):
if self.opt_case_sensitive.isChecked() and self.opt_use_primary_find_in_search.isChecked():
error_dialog(self, _('Incompatible options'), _(
'The option to have un-accented characters match accented characters has no effect'
' if you also turn on case-sensitive searching. So only turn on one of those options'), show=True)
raise AbortCommit()
if self.gst_changed: if self.gst_changed:
self.db.new_api.set_pref('grouped_search_terms', self.gst) self.db.new_api.set_pref('grouped_search_terms', self.gst)
self.db.field_metadata.add_grouped_search_terms(self.gst) self.db.field_metadata.add_grouped_search_terms(self.gst)
@ -237,7 +224,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
return ConfigWidgetBase.commit(self) return ConfigWidgetBase.commit(self)
def refresh_gui(self, gui): def refresh_gui(self, gui):
set_use_primary_find_in_search(prefs['use_primary_find_in_search']) gui.current_db.new_api.clear_caches() # Clear the search cache
gui.set_highlight_only_button_icon() gui.set_highlight_only_button_icon()
if self.muc_changed: if self.muc_changed:
gui.tags_view.recount() gui.tags_view.recount()

View File

@ -307,14 +307,14 @@ to be shown as user categories</string>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QCheckBox" name="opt_case_sensitive"> <widget class="QRadioButton" name="opt_case_sensitive">
<property name="text"> <property name="text">
<string>Case sensitive searching</string> <string>Case sensitive searching</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QCheckBox" name="opt_use_primary_find_in_search"> <widget class="QRadioButton" name="opt_use_primary_find_in_search">
<property name="text"> <property name="text">
<string>Unaccented characters match accented characters</string> <string>Unaccented characters match accented characters</string>
</property> </property>

View File

@ -440,7 +440,8 @@ def create_global_prefs(conf_obj=None):
'libraries. Note that this option will have no effect if you turn ' 'libraries. Note that this option will have no effect if you turn '
'on case-sensitive searching')%u'\xf1') 'on case-sensitive searching')%u'\xf1')
c.add_opt('case_sensitive', default=False, help=_( c.add_opt('case_sensitive', default=False, help=_(
'Make searches case-sensitive')) 'Make searches case-sensitive. Note that turning on case-sensitive searches disables matching of '
'accented characters by their unaccented versions.'))
c.add_opt('migrated', default=False, help='For Internal use. Don\'t modify.') c.add_opt('migrated', default=False, help='For Internal use. Don\'t modify.')
return c return c