diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 711658020a..346bf97336 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -252,9 +252,19 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): if ext not in extensions: self.db.remove_format(self.row, ext, notify=False) - def __init__(self, window, row, db, accepted_callback=None): + def do_cancel_all(self): + self.cancel_all = True + self.reject() + + def __init__(self, window, row, db, accepted_callback=None, cancel_all=False): ResizableDialog.__init__(self, window) self.bc_box.layout().setAlignment(self.cover, Qt.AlignCenter|Qt.AlignHCenter) + self.cancel_all = False + if cancel_all: + self.__abort_button = self.button_box.addButton(self.button_box.Abort) + self.__abort_button.setToolTip(_('Abort the editing of all remaining books')) + self.connect(self.__abort_button, SIGNAL('clicked()'), + self.do_cancel_all) self.splitter.setStretchFactor(100, 1) self.db = db self.pi = ProgressIndicator(self) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 54da45fadd..1724565305 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -1025,10 +1025,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self._metadata_view_id = self.library_view.model().db.id(row.row()) d = MetadataSingleDialog(self, row.row(), self.library_view.model().db, - accepted_callback=accepted) + accepted_callback=accepted, + cancel_all=rows.index(row) < len(rows)-1) self.connect(d, SIGNAL('view_format(PyQt_PyObject)'), self.metadata_view_format) d.exec_() + if d.cancel_all: + break if rows: current = self.library_view.currentIndex() self.library_view.model().current_changed(current, previous)