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

View File

@ -494,6 +494,7 @@ class BooksModel(QAbstractTableModel): # {{{
mi.field_metadata = self.db.field_metadata
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.row_number = idx
try:
mi.marked = self.db.data.get_marked(idx, index_is_id=False)
except: