diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index 10602fb28c..81016d3c6a 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -62,7 +62,7 @@ class Bool(Base): w = self.widgets[1] items = [_('Yes'), _('No'), _('Undefined')] icons = [I('ok.png'), I('list_remove.png'), I('blank.png')] - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not self.db.prefs.get('bools_are_tristate'): items = items[:-1] icons = icons[:-1] for icon, text in zip(icons, items): @@ -70,7 +70,7 @@ class Bool(Base): def setter(self, val): val = {None: 2, False: 1, True: 0}[val] - if tweaks['bool_custom_columns_are_tristate'] == 'no' and val == 2: + if not self.db.prefs.get('bools_are_tristate') and val == 2: val = 1 self.widgets[1].setCurrentIndex(val) @@ -549,7 +549,7 @@ class BulkBool(BulkBase, Bool): value = None for book_id in book_ids: val = self.db.get_custom(book_id, num=self.col_id, index_is_id=True) - if tweaks['bool_custom_columns_are_tristate'] == 'no' and val is None: + if not self.db.prefs.get('bools_are_tristate') and val is None: val = False if value is not None and value != val: return None @@ -559,7 +559,7 @@ class BulkBool(BulkBase, Bool): def setup_ui(self, parent): self.make_widgets(parent, QComboBox) items = [_('Yes'), _('No')] - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not self.db.prefs.get('bools_are_tristate'): items.append('') else: items.append(_('Undefined')) @@ -571,7 +571,7 @@ class BulkBool(BulkBase, Bool): def getter(self): val = self.main_widget.currentIndex() - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not self.db.prefs.get('bools_are_tristate'): return {2: False, 1: False, 0: True}[val] else: return {2: None, 1: False, 0: True}[val] @@ -586,13 +586,13 @@ class BulkBool(BulkBase, Bool): return val = self.gui_val val = self.normalize_ui_val(val) - if tweaks['bool_custom_columns_are_tristate'] == 'no' and val is None: + if not self.db.prefs.get('bools_are_tristate') and val is None: val = False self.db.set_custom_bulk(book_ids, val, num=self.col_id, notify=notify) def a_c_checkbox_changed(self): if not self.ignore_change_signals: - if tweaks['bool_custom_columns_are_tristate'] == 'no' and \ + if not self.db.prefs.get('bools_are_tristate') and \ self.main_widget.currentIndex() == 2: self.a_c_checkbox.setChecked(False) else: diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index 0f74500099..ac8568af07 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -353,7 +353,7 @@ class CcBoolDelegate(QStyledItemDelegate): # {{{ editor = DelegateCB(parent) items = [_('Y'), _('N'), ' '] icons = [I('ok.png'), I('list_remove.png'), I('blank.png')] - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not index.model().db.prefs.get('bools_are_tristate'): items = items[:-1] icons = icons[:-1] for icon, text in zip(icons, items): @@ -367,7 +367,7 @@ class CcBoolDelegate(QStyledItemDelegate): # {{{ def setEditorData(self, editor, index): m = index.model() val = m.db.data[index.row()][m.custom_columns[m.column_map[index.column()]]['rec_index']] - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not m.db.prefs.get('bools_are_tristate'): val = 1 if not val else 0 else: val = 2 if val is None else 1 if not val else 0 diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 3e1670c7af..653a8ea2f6 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -700,7 +700,7 @@ class BooksModel(QAbstractTableModel): # {{{ self.dc_decorator[col] = functools.partial( bool_type_decorator, idx=idx, bool_cols_are_tristate= - tweaks['bool_custom_columns_are_tristate'] != 'no') + self.db.prefs.get('bools_are_tristate')) elif datatype in ('int', 'float'): self.dc[col] = functools.partial(number_type, idx=idx) elif datatype == 'datetime': @@ -710,7 +710,7 @@ class BooksModel(QAbstractTableModel): # {{{ self.dc_decorator[col] = functools.partial( bool_type_decorator, idx=idx, bool_cols_are_tristate= - tweaks['bool_custom_columns_are_tristate'] != 'no') + self.db.prefs.get('bools_are_tristate')) elif datatype == 'rating': self.dc[col] = functools.partial(rating_type, idx=idx) elif datatype == 'series': diff --git a/src/calibre/gui2/preferences/columns.py b/src/calibre/gui2/preferences/columns.py index 7c57054253..4079e2d3f4 100644 --- a/src/calibre/gui2/preferences/columns.py +++ b/src/calibre/gui2/preferences/columns.py @@ -38,7 +38,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): r = self.register choices = [(_('Default'), 'default'), (_('Compact Metadata'), 'alt1')] r('edit_metadata_single_layout', db.prefs, choices=choices) - r('bools_are_tristate', db.prefs) + r('bools_are_tristate', db.prefs, restart_required=True) else: self.items_in_v_eight.setVisible(False) @@ -178,6 +178,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): must_restart = True return must_restart + def refresh_gui(self, gui): + gui.library_view.reset() + + if __name__ == '__main__': from PyQt4.Qt import QApplication diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index e5864ceaaf..74ddb2bc41 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -547,7 +547,7 @@ class ResultCache(SearchQueryParser): # {{{ return matchkind, query def get_bool_matches(self, location, query, candidates): - bools_are_tristate = tweaks['bool_custom_columns_are_tristate'] != 'no' + bools_are_tristate = not self.db_prefs.get('bools_are_tristate') loc = self.field_metadata[location]['rec_index'] matches = set() query = icu_lower(query) @@ -947,7 +947,7 @@ class ResultCache(SearchQueryParser): # {{{ if not fields: fields = [('timestamp', False)] - keyg = SortKeyGenerator(fields, self.field_metadata, self._data) + keyg = SortKeyGenerator(fields, self.field_metadata, self._data, self.db_prefs) self._map.sort(key=keyg) tmap = list(itertools.repeat(False, len(self._data))) @@ -970,9 +970,10 @@ class SortKey(object): class SortKeyGenerator(object): - def __init__(self, fields, field_metadata, data): + def __init__(self, fields, field_metadata, data, db_prefs): from calibre.utils.icu import sort_key self.field_metadata = field_metadata + self.db_prefs = db_prefs self.orders = [1 if x[1] else -1 for x in fields] self.entries = [(x[0], field_metadata[x[0]]) for x in fields] self.library_order = tweaks['title_series_sorting'] == 'library_order' @@ -1032,7 +1033,7 @@ class SortKeyGenerator(object): val = self.string_sort_key(val) elif dt == 'bool': - if tweaks['bool_custom_columns_are_tristate'] == 'no': + if not self.db_prefs.get('bools_are_tristate'): val = {True: 1, False: 2, None: 2}.get(val, 2) else: val = {True: 1, False: 2, None: 3}.get(val, 3) diff --git a/src/calibre/library/server/content.py b/src/calibre/library/server/content.py index 919f5a7969..0c3edd1627 100644 --- a/src/calibre/library/server/content.py +++ b/src/calibre/library/server/content.py @@ -17,8 +17,8 @@ from calibre.utils.magick.draw import save_cover_data_to, Image, \ class CSSortKeyGenerator(SortKeyGenerator): - def __init__(self, fields, fm): - SortKeyGenerator.__init__(self, fields, fm, None) + def __init__(self, fields, fm, db_prefs): + SortKeyGenerator.__init__(self, fields, fm, None, db_prefs) def __call__(self, record): return self.itervals(record).next() @@ -56,7 +56,8 @@ class ContentServer(object): field = self.db.data.sanitize_sort_field_name(field) if field not in self.db.field_metadata.sortable_field_keys(): raise cherrypy.HTTPError(400, '%s is not a valid sort field'%field) - keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata) + keyg = CSSortKeyGenerator([(field, order)], self.db.field_metadata, + self.db.prefs) items.sort(key=keyg, reverse=not order) # }}}