Changes for enhancement #1731750

1) make the bulk custom and standard series column editors behave similarly
2) allow zero as an increment so that all the books can be set to the same series number (standard and bulk)

The enhancement request suggested that the "Apply changes" checkbox be removed for custom series. I didn't do that because that checkbox is used for all custom columns.
This commit is contained in:
Charles Haley 2017-11-24 17:18:09 +01:00 committed by Kovid Goyal
parent ed2662af7b
commit 0a8e26071a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 82 additions and 20 deletions

View File

@ -975,29 +975,87 @@ class BulkSeries(BulkBase):
layout = QHBoxLayout(w) layout = QHBoxLayout(w)
layout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0)
self.remove_series = QCheckBox(parent) self.remove_series = QCheckBox(parent)
self.remove_series.setText(_('Remove series')) self.remove_series.setText(_('Clear series'))
layout.addWidget(self.remove_series) layout.addWidget(self.remove_series)
self.idx_widget = QCheckBox(parent) self.idx_widget = QCheckBox(parent)
self.idx_widget.setText(_('Automatically number books')) self.idx_widget.setText(_('Automatically number books'))
self.idx_widget.setToolTip('<p>' +
_('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.') + '</p>')
layout.addWidget(self.idx_widget) layout.addWidget(self.idx_widget)
self.force_number = QCheckBox(parent) self.force_number = QCheckBox(parent)
self.force_number.setText(_('Force numbers to start with ')) self.force_number.setText(_('Force numbers to start with '))
self.force_number.setToolTip('<p>' +
_('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') + '</p>')
layout.addWidget(self.force_number) layout.addWidget(self.force_number)
self.series_start_number = QSpinBox(parent) self.series_start_number = QDoubleSpinBox(parent)
self.series_start_number.setMinimum(1) self.series_start_number.setMinimum(0.0)
self.series_start_number.setMaximum(9999999) self.series_start_number.setMaximum(9999999.0)
self.series_start_number.setProperty("value", 1) self.series_start_number.setProperty("value", 1.0)
layout.addWidget(self.series_start_number) layout.addWidget(self.series_start_number)
self.series_increment = QDoubleSpinBox(parent)
self.series_increment.setMinimum(0.00)
self.series_increment.setMaximum(99999.0)
self.series_increment.setProperty("value", 1.0)
self.series_increment.setToolTip('<p>' +
_('The amount by which to increment the series number '
'for successive books. Only applicable when using '
'force series numbers.') + '</p>')
self.series_increment.setPrefix('+')
layout.addWidget(self.series_increment)
layout.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding, QSizePolicy.Minimum)) layout.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding, QSizePolicy.Minimum))
self.widgets.append(w) self.widgets.append(w)
self.idx_widget.stateChanged.connect(self.check_changed_checkbox) self.idx_widget.stateChanged.connect(self.a_c_checkbox_changed)
self.force_number.stateChanged.connect(self.check_changed_checkbox) self.force_number.stateChanged.connect(self.a_c_checkbox_changed)
self.series_start_number.valueChanged.connect(self.check_changed_checkbox) self.series_start_number.valueChanged.connect(self.a_c_checkbox_changed)
self.remove_series.stateChanged.connect(self.check_changed_checkbox) self.series_increment.valueChanged.connect(self.a_c_checkbox_changed)
self.remove_series.stateChanged.connect(self.a_c_checkbox_changed)
self.main_widget
self.ignore_change_signals = False self.ignore_change_signals = False
def check_changed_checkbox(self): def a_c_checkbox_changed(self):
self.a_c_checkbox.setChecked(True) def disable_numbering_checkboxes(idx_widget_enable):
if idx_widget_enable:
self.idx_widget.setEnabled(True)
else:
self.idx_widget.setChecked(False)
self.idx_widget.setEnabled(False)
self.force_number.setChecked(False)
self.force_number.setEnabled(False)
self.series_start_number.setEnabled(False)
self.series_increment.setEnabled(False)
if self.ignore_change_signals:
return
self.ignore_change_signals = True
apply_changes = False
if self.remove_series.isChecked():
self.main_widget.setText('')
self.main_widget.setEnabled(False)
disable_numbering_checkboxes(idx_widget_enable=False)
apply_changes = True
elif self.main_widget.text():
self.remove_series.setEnabled(False);
disable_numbering_checkboxes(idx_widget_enable=True)
apply_changes = True
else: # no text, no clear. Basically reinitialize
self.main_widget.setEnabled(True)
self.remove_series.setEnabled(True);
disable_numbering_checkboxes(idx_widget_enable=False)
apply_changes = False
self.force_number.setEnabled(self.idx_widget.isChecked())
self.series_start_number.setEnabled(self.force_number.isChecked())
self.series_increment.setEnabled(self.force_number.isChecked())
self.ignore_change_signals = False
self.a_c_checkbox.setChecked(apply_changes)
def initialize(self, book_id): def initialize(self, book_id):
self.idx_widget.setChecked(False) self.idx_widget.setChecked(False)
@ -1008,16 +1066,17 @@ class BulkSeries(BulkBase):
def getter(self): def getter(self):
n = unicode(self.main_widget.currentText()).strip() n = unicode(self.main_widget.currentText()).strip()
i = self.idx_widget.checkState() autonumber = self.idx_widget.checkState()
f = self.force_number.checkState() force = self.force_number.checkState()
s = self.series_start_number.value() start = self.series_start_number.value()
r = self.remove_series.checkState() remove = self.remove_series.checkState()
return n, i, f, s, r increment = self.series_increment.value()
return n, autonumber, force, start, remove, increment
def commit(self, book_ids, notify=False): def commit(self, book_ids, notify=False):
if not self.a_c_checkbox.isChecked(): if not self.a_c_checkbox.isChecked():
return return
val, update_indices, force_start, at_value, clear = self.gui_val val, update_indices, force_start, at_value, clear, increment = self.gui_val
val = None if clear else self.normalize_ui_val(val) val = None if clear else self.normalize_ui_val(val)
if clear or val != '': if clear or val != '':
extras = [] extras = []
@ -1028,7 +1087,7 @@ class BulkSeries(BulkBase):
if update_indices: if update_indices:
if force_start: if force_start:
s_index = at_value s_index = at_value
at_value += 1 at_value += increment
elif tweaks['series_index_auto_increment'] != 'const': elif tweaks['series_index_auto_increment'] != 'const':
s_index = self.db.get_next_cc_series_num_for(val, num=self.col_id) s_index = self.db.get_next_cc_series_num_for(val, num=self.col_id)
else: else:

View File

@ -489,7 +489,7 @@ from the value in the box</string>
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="minimum"> <property name="minimum">
<double>1.000000000000000</double> <double>0.000000000000000</double>
</property> </property>
<property name="maximum"> <property name="maximum">
<double>99000000.000000000000000</double> <double>99000000.000000000000000</double>
@ -511,7 +511,10 @@ from the value in the box</string>
<string>+ </string> <string>+ </string>
</property> </property>
<property name="minimum"> <property name="minimum">
<double>0.010000000000000</double> <double>0.000000000000000</double>
</property>
<property name="maximum">
<double>99999.0</double>
</property> </property>
<property name="value"> <property name="value">
<double>1.000000000000000</double> <double>1.000000000000000</double>