From e4e5eb36e7720366983f9bb6adb1064914f55222 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sat, 6 Aug 2011 10:21:55 +0100 Subject: [PATCH] Fix merge_metadata to not overwrite non-text fields ('bool', 'int', 'float', 'rating', 'datetime') that have a value of zero/false instead of none. Change the delegate for custom numeric columns to permit setting a value to undefined when editing on the library view. --- src/calibre/gui2/actions/edit_metadata.py | 2 +- src/calibre/gui2/library/delegates.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 64d6f2cbd6..28e2f21d23 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -418,7 +418,7 @@ class EditMetadataAction(InterfaceAction): db.set_custom(dest_id, dest_value, num=colnum) if db.field_metadata[key]['datatype'] in \ ('bool', 'int', 'float', 'rating', 'datetime') \ - and not dest_value: + and dest_value is None: db.set_custom(dest_id, src_value, num=colnum) if db.field_metadata[key]['datatype'] == 'series' \ and not dest_value: diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index b0fdef4c21..a9c71e526b 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -310,6 +310,12 @@ class CcNumberDelegate(QStyledItemDelegate): # {{{ editor.setDecimals(2) return editor + def setModelData(self, editor, model, index): + val = editor.value() + if val == editor.minimum(): + val = None + model.setData(index, QVariant(val), Qt.EditRole) + def setEditorData(self, editor, index): m = index.model() val = m.db.data[index.row()][m.custom_columns[m.column_map[index.column()]]['rec_index']]