From ac3c5caccd208a269f864a5e8ed9528c0103b40d Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 1 Feb 2013 12:56:23 +0100 Subject: [PATCH 1/3] Make the count field in the tags list editor not editable. --- src/calibre/gui2/dialogs/tag_list_editor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/dialogs/tag_list_editor.py b/src/calibre/gui2/dialogs/tag_list_editor.py index 4397ad7d28..fcc6bc7637 100644 --- a/src/calibre/gui2/dialogs/tag_list_editor.py +++ b/src/calibre/gui2/dialogs/tag_list_editor.py @@ -133,7 +133,7 @@ class TagListEditor(QDialog, Ui_TagListEditor): select_item = item item = CountTableWidgetItem(self.counts[tag]) # only the name column can be selected - item.setFlags (item.flags() & ~Qt.ItemIsSelectable) + item.setFlags (item.flags() & ~(Qt.ItemIsSelectable|Qt.ItemIsEditable)) self.table.setItem(row, 1, item) item = QTableWidgetItem('') item.setFlags (item.flags() & ~(Qt.ItemIsSelectable|Qt.ItemIsEditable)) From 47b6b49ecc530dd7d91ce2b442a9e21dcf83e33c Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 1 Feb 2013 13:06:50 +0100 Subject: [PATCH 2/3] Suppress the "Manage ..." in the context menu for composite columns --- src/calibre/gui2/tag_browser/view.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tag_browser/view.py b/src/calibre/gui2/tag_browser/view.py index ac9a937b65..7070eaaa04 100644 --- a/src/calibre/gui2/tag_browser/view.py +++ b/src/calibre/gui2/tag_browser/view.py @@ -549,7 +549,8 @@ class TagsView(QTreeView): # {{{ # Offer specific editors for tags/series/publishers/saved searches self.context_menu.addSeparator() if key in ['tags', 'publisher', 'series'] or \ - self.db.field_metadata[key]['is_custom']: + (self.db.field_metadata[key]['is_custom'] and + self.db.field_metadata[key]['datatype'] != 'composite'): self.context_menu.addAction(_('Manage %s')%category, partial(self.context_menu_handler, action='open_editor', category=tag.original_name if tag else None, From c8aebf3ca07eb9c7f873a9a6747747d01645c507 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 1 Feb 2013 21:17:11 +0100 Subject: [PATCH 3/3] Add a "days ago" condition to datetime columns when coloring --- src/calibre/gui2/preferences/coloring.py | 16 +++++++++++++--- src/calibre/library/coloring.py | 7 +++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/preferences/coloring.py b/src/calibre/gui2/preferences/coloring.py index 020e35adea..1c0d18aab7 100644 --- a/src/calibre/gui2/preferences/coloring.py +++ b/src/calibre/gui2/preferences/coloring.py @@ -52,6 +52,12 @@ class ConditionEditor(QWidget): # {{{ (_('is less than'), 'lt'), (_('is greater than'), 'gt') ), + 'datetime' : ( + (_('is equal to'), 'eq'), + (_('is less than'), 'lt'), + (_('is greater than'), 'gt'), + (_('is not more days ago than'), 'count_days') + ), 'multiple' : ( (_('has'), 'has'), (_('does not have'), 'does not have'), @@ -70,7 +76,7 @@ class ConditionEditor(QWidget): # {{{ ), } - for x in ('float', 'rating', 'datetime'): + for x in ('float', 'rating'): ACTION_MAP[x] = ACTION_MAP['int'] @@ -232,8 +238,12 @@ class ConditionEditor(QWidget): # {{{ v = QIntValidator if dt == 'int' else QDoubleValidator self.value_box.setValidator(v(self.value_box)) elif dt == 'datetime': - self.value_box.setInputMask('9999-99-99') - tt = _('Enter a date in the format YYYY-MM-DD') + if action == 'count_days': + self.value_box.setValidator(QIntValidator(self.value_box)) + tt = _('Enter the number of days old the item can be') + else: + self.value_box.setInputMask('9999-99-99') + tt = _('Enter a date in the format YYYY-MM-DD') else: tt = _('Enter a string.') if 'pattern' in action: diff --git a/src/calibre/library/coloring.py b/src/calibre/library/coloring.py index 9366b3e5d7..807279a565 100644 --- a/src/calibre/library/coloring.py +++ b/src/calibre/library/coloring.py @@ -133,13 +133,16 @@ class Rule(object): # {{{ return "cmp(field('%s'), %s, '%s', '%s', '%s')" % (col, val, lt, eq, gt) def date_condition(self, col, action, val): + if action == 'count_days': + return (("cmp(add(%s, 1), days_between(today(), format_date(raw_field('%s'), 'yyyy-MM-dd')), '', '1', '1')") + %(val, col)) lt, eq, gt = { 'eq': ('', '1', ''), 'lt': ('1', '', ''), 'gt': ('', '', '1') }[action] - return "strcmp(format_date(raw_field('%s'), 'yyyy-MM-dd'), '%s', '%s', '%s', '%s')" % (col, - val, lt, eq, gt) + return ("strcmp(format_date(raw_field('%s'), 'yyyy-MM-dd'), '%s', '%s', '%s', '%s')" % + (col, val, lt, eq, gt)) def multiple_condition(self, col, action, val, sep): if not sep or sep == '|':