diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index ac04652efa..bd9728989b 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -173,6 +173,8 @@ class EditMetadataAction(InterfaceAction): ''' rows = [r.row() for r in \ self.gui.library_view.selectionModel().selectedRows()] + m = self.gui.library_view.model() + ids = [m.id(r) for r in rows] if not rows or len(rows) == 0: d = error_dialog(self.gui, _('Cannot edit metadata'), _('No books selected')) @@ -191,6 +193,7 @@ class EditMetadataAction(InterfaceAction): self.gui.tags_view.recount() if self.gui.cover_flow: self.gui.cover_flow.dataChanged() + self.gui.library_view.select_rows(ids) # Merge books {{{ def merge_books(self, safe_merge=False): diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index b0ba049a7f..2e5c7838ca 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -220,6 +220,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): if val: val.sort(cmp=lambda x,y: cmp(x.lower(), y.lower())) val = val[0] + if txt == 'authors': + val = val.replace('|', ',') else: val = '' else: @@ -303,6 +305,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): # The standard tags and authors values want to be lists. # All custom columns are to be strings val = fm['is_multiple'].join(val) + elif field == 'authors': + val = [v.replace('|', ',') for v in val] else: val = apply_pattern(val) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index 18d6760ea7..aca7b0cb75 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -328,6 +328,9 @@ Future conversion of these books will use the default settings. true + + true + diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index d67d286aeb..724454dccf 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -479,6 +479,36 @@ class BooksView(QTableView): # {{{ sm = self.selectionModel() sm.select(index, sm.ClearAndSelect|sm.Rows) + def select_rows(self, identifiers, using_ids=True, change_current=True, + scroll=True): + ''' + Select rows identified by identifiers. identifiers can be a set of ids, + row numbers or QModelIndexes. + ''' + selmode = self.selectionMode() + self.setSelectionMode(QAbstractItemView.MultiSelection) + try: + rows = set([x.row() if hasattr(x, 'row') else x for x in + identifiers]) + if using_ids: + rows = set([]) + identifiers = set(identifiers) + m = self.model() + for row in range(m.rowCount(QModelIndex())): + if m.id(row) in identifiers: + rows.add(row) + if rows: + row = list(sorted(rows))[0] + if change_current: + self.set_current_row(row, select=False) + if scroll: + self.scroll_to_row(row) + self.clearSelection() + for r in rows: + self.selectRow(r) + finally: + self.setSelectionMode(selmode) + def close(self): self._model.close()