Fix Book details popup window not being updated when editing metadata in the main window

This commit is contained in:
Kovid Goyal 2014-02-26 18:31:14 +05:30
parent f1c3e38dc9
commit 8e202e4e2b
2 changed files with 16 additions and 26 deletions

View File

@ -79,7 +79,7 @@ class BookInfo(QDialog):
self.view = view self.view = view
self.current_row = None self.current_row = None
self.refresh(row) self.refresh(row)
self.view.selectionModel().currentChanged.connect(self.slave) self.view.model().new_bookdisplay_data.connect(self.slave)
self.fit_cover.stateChanged.connect(self.toggle_cover_fit) self.fit_cover.stateChanged.connect(self.toggle_cover_fit)
self.ns = QShortcut(QKeySequence('Alt+Right'), self) self.ns = QShortcut(QKeySequence('Alt+Right'), self)
self.ns.activated.connect(self.next) self.ns.activated.connect(self.next)
@ -110,7 +110,7 @@ class BookInfo(QDialog):
saved_layout = (bytearray(self.saveGeometry()), bytearray(self.splitter.saveState())) saved_layout = (bytearray(self.saveGeometry()), bytearray(self.splitter.saveState()))
gprefs.set('book_info_dialog_layout', saved_layout) gprefs.set('book_info_dialog_layout', saved_layout)
ret = QDialog.done(self, r) ret = QDialog.done(self, r)
self.view.selectionModel().currentChanged.disconnect(self.slave) self.view.model().new_bookdisplay_data.disconnect(self.slave)
self.view = self.link_delegate = self.gui = None self.view = self.link_delegate = self.gui = None
self.closed.emit(self) self.closed.emit(self)
return ret return ret
@ -124,10 +124,6 @@ class BookInfo(QDialog):
ci = self.view.currentIndex() ci = self.view.currentIndex()
if ci.isValid(): if ci.isValid():
self.view.model().current_changed(ci, ci) self.view.model().current_changed(ci, ci)
self.cover_pixmap = QPixmap()
self.cover_pixmap.loadFromData(data)
if self.fit_cover.isChecked():
self.resize_cover()
def details_size_hint(self): def details_size_hint(self):
return QSize(350, 550) return QSize(350, 550)
@ -139,25 +135,18 @@ class BookInfo(QDialog):
def cover_view_resized(self, event): def cover_view_resized(self, event):
QTimer.singleShot(1, self.resize_cover) QTimer.singleShot(1, self.resize_cover)
def slave(self, current, previous): def slave(self, mi):
if current.row() != previous.row(): self.refresh(mi.row_number, mi)
row = current.row()
self.refresh(row)
def move(self, delta=1): def move(self, delta=1):
self.view.selectionModel().currentChanged.disconnect(self.slave) idx = self.view.currentIndex()
try: if idx.isValid():
idx = self.view.currentIndex() m = self.view.model()
if idx.isValid(): ni = m.index(idx.row() + delta, idx.column())
m = self.view.model() if ni.isValid():
ni = m.index(idx.row() + delta, idx.column()) if self.view.isVisible():
if ni.isValid(): self.view.scrollTo(ni)
self.view.setCurrentIndex(ni) self.view.setCurrentIndex(ni)
self.refresh(ni.row())
if self.view.isVisible():
self.view.scrollTo(ni)
finally:
self.view.selectionModel().currentChanged.connect(self.slave)
def next(self): def next(self):
self.move() self.move()
@ -190,12 +179,12 @@ class BookInfo(QDialog):
tt += _('Cover size: %(width)d x %(height)d')%dict(width=sz.width(), height=sz.height()) tt += _('Cover size: %(width)d x %(height)d')%dict(width=sz.width(), height=sz.height())
self.cover.setToolTip(tt) self.cover.setToolTip(tt)
def refresh(self, row): def refresh(self, row, mi=None):
if isinstance(row, QModelIndex): if isinstance(row, QModelIndex):
row = row.row() row = row.row()
if row == self.current_row: if row == self.current_row and mi is None:
return return
mi = self.view.model().get_book_display_info(row) mi = self.view.model().get_book_display_info(row) if mi is None else mi
if mi is None: if mi is None:
# Indicates books was deleted from library, or row numbers have # Indicates books was deleted from library, or row numbers have
# changed # changed

View File

@ -494,6 +494,7 @@ class BooksModel(QAbstractTableModel): # {{{
mi.field_metadata = self.db.field_metadata mi.field_metadata = self.db.field_metadata
mi.path = self.db.abspath(idx, create_dirs=False) mi.path = self.db.abspath(idx, create_dirs=False)
mi.format_files = self.db.new_api.format_files(self.db.data.index_to_id(idx)) mi.format_files = self.db.new_api.format_files(self.db.data.index_to_id(idx))
mi.row_number = idx
try: try:
mi.marked = self.db.data.get_marked(idx, index_is_id=False) mi.marked = self.db.data.get_marked(idx, index_is_id=False)
except: except: