From be2210f928d0023ae1f752aeea3fb51f84132e8d Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 21 Sep 2010 15:26:02 +0100 Subject: [PATCH] Add 'start series renumbering from N' to bulk edit. --- src/calibre/gui2/dialogs/metadata_bulk.py | 25 +++++++- src/calibre/gui2/dialogs/metadata_bulk.ui | 69 +++++++++++++++++++---- 2 files changed, 79 insertions(+), 15 deletions(-) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 7122fe14fa..8a692d94d5 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -31,7 +31,8 @@ class Worker(Thread): def doit(self): remove, add, au, aus, do_aus, rating, pub, do_series, \ do_autonumber, do_remove_format, remove_format, do_swap_ta, \ - do_remove_conv, do_auto_author, series = self.args + do_remove_conv, do_auto_author, series, do_series_restart, \ + series_start_value = self.args # first loop: do author and title. These will commit at the end of each # operation, because each operation modifies the file system. We want to @@ -69,7 +70,11 @@ class Worker(Thread): self.db.set_publisher(id, pub, notify=False, commit=False) if do_series: - next = self.db.get_next_series_num_for(series) + if do_series_restart: + next = series_start_value + series_start_value += 1 + else: + next = self.db.get_next_series_num_for(series) self.db.set_series(id, series, notify=False, commit=False) num = next if do_autonumber and series else 1.0 self.db.set_series_index(id, num, notify=False, commit=False) @@ -163,6 +168,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): self.series.currentIndexChanged[int].connect(self.series_changed) self.series.editTextChanged.connect(self.series_changed) self.tag_editor_button.clicked.connect(self.tag_editor) + self.autonumber_series.stateChanged[int].connect(self.auto_number_changed) if len(db.custom_column_label_map) == 0: self.central_widget.removeTab(1) @@ -538,6 +544,16 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): self.tags.update_tags_cache(self.db.all_tags()) self.remove_tags.update_tags_cache(self.db.all_tags()) + def auto_number_changed(self, state): + if state: + self.series_numbering_restarts.setEnabled(True) + self.series_start_number.setEnabled(True) + else: + self.series_numbering_restarts.setEnabled(False) + self.series_numbering_restarts.setChecked(False) + self.series_start_number.setEnabled(False) + self.series_start_number.setValue(1) + def accept(self): if len(self.ids) < 1: return QDialog.accept(self) @@ -566,6 +582,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): do_series = self.write_series series = unicode(self.series.currentText()).strip() do_autonumber = self.autonumber_series.isChecked() + do_series_restart = self.series_numbering_restarts.isChecked() + series_start_value = self.series_start_number.value() do_remove_format = self.remove_format.currentIndex() > -1 remove_format = unicode(self.remove_format.currentText()) do_swap_ta = self.swap_title_and_author.isChecked() @@ -574,7 +592,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): args = (remove, add, au, aus, do_aus, rating, pub, do_series, do_autonumber, do_remove_format, remove_format, do_swap_ta, - do_remove_conv, do_auto_author, series) + do_remove_conv, do_auto_author, series, do_series_restart, + series_start_value) bb = BlockingBusy(_('Applying changes to %d books. This may take a while.') %len(self.ids), parent=self) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index f28f3fb57c..10e22c5df9 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -270,18 +270,63 @@ - - - - Selected books will be automatically numbered, -in the order you selected them. -So if you selected Book A and then Book B, + + + + + + If not checked, the series number for the books will be set to 1. +If checked, selected books will be automatically numbered, in the order +you selected them. So if you selected Book A and then Book B, Book A will have series number 1 and Book B series number 2. - - - Automatically number books in this series - - + + + Automatically number books in this series + + + + + + + false + + + Series will normally be renumbered from the highest number in the database +for that series. Checking this box will tell calibre to start numbering +from the value in the box + + + Force numbers to start with + + + + + + + false + + + 1 + + + 1 + + + + + + + Qt::Horizontal + + + + 20 + 10 + + + + + @@ -599,7 +644,7 @@ nothing should be put between the original text and the inserted text 20 - 40 + 0