Quickview: Fix regression in previous release that broke the "Lock quickview" control

Also add a keyboard shortcut to refresh the quickview contents

Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
Kovid Goyal 2017-07-30 19:02:33 +05:30
commit 3a76f6387e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 59 additions and 5 deletions

View File

@ -350,7 +350,7 @@ class EditMetadataAction(InterfaceAction):
self.gui.tags_view.recount_with_position_based_index() self.gui.tags_view.recount_with_position_based_index()
qv = get_quickview_action_plugin() qv = get_quickview_action_plugin()
if qv: if qv:
qv.refill_quickview() qv.refresh_quickview(current)
def do_edit_metadata(self, row_list, current_row, editing_multiple): def do_edit_metadata(self, row_list, current_row, editing_multiple):
from calibre.gui2.metadata.single import edit_metadata from calibre.gui2.metadata.single import edit_metadata

View File

@ -87,6 +87,15 @@ class ShowQuickviewAction(InterfaceAction):
group=self.action_spec[0]) group=self.action_spec[0])
self.focus_bl_action.triggered.connect(self.focus_booklist) self.focus_bl_action.triggered.connect(self.focus_booklist)
self.focus_refresh_action = QAction(self.gui)
self.gui.addAction(self.focus_refresh_action)
self.gui.keyboard.register_shortcut('Refresh from Quickview',
_('Refresh Quickview'),
description=_('Refresh the information shown in the Quickview pane'),
action=self.focus_refresh_action,
group=self.action_spec[0])
self.focus_refresh_action.triggered.connect(self.refill_quickview)
self.search_action = QAction(self.gui) self.search_action = QAction(self.gui)
self.gui.addAction(self.search_action) self.gui.addAction(self.search_action)
self.gui.keyboard.register_shortcut('Search from Quickview', _('Search from Quickview'), self.gui.keyboard.register_shortcut('Search from Quickview', _('Search from Quickview'),
@ -96,6 +105,7 @@ class ShowQuickviewAction(InterfaceAction):
self.search_action.triggered.connect(self.search_quickview) self.search_action.triggered.connect(self.search_quickview)
self.search_action.changed.connect(self.set_search_shortcut) self.search_action.changed.connect(self.set_search_shortcut)
self.menuless_qaction.changed.connect(self.set_search_shortcut) self.menuless_qaction.changed.connect(self.set_search_shortcut)
self.qv_button = QuickviewButton(self.gui, self) self.qv_button = QuickviewButton(self.gui, self)
def initialization_complete(self): def initialization_complete(self):
@ -149,11 +159,18 @@ class ShowQuickviewAction(InterfaceAction):
def refill_quickview(self): def refill_quickview(self):
''' '''
Called when the data or the columns shown in the QV pane might have changed. Called when the columns shown in the QV pane might have changed.
''' '''
if self.current_instance and not self.current_instance.is_closed: if self.current_instance and not self.current_instance.is_closed:
self.current_instance.refill() self.current_instance.refill()
def refresh_quickview(self, idx):
'''
Called when the data shown in the QV pane might have changed.
'''
if self.current_instance and not self.current_instance.is_closed:
self.current_instance.refresh(idx)
def change_quickview_column(self, idx): def change_quickview_column(self, idx):
''' '''
Called from the column header context menu to change the QV query column Called from the column header context menu to change the QV query column

View File

@ -193,9 +193,11 @@ class Quickview(QDialog, Ui_Quickview):
self.books_table.installEventFilter(focus_filter) self.books_table.installEventFilter(focus_filter)
self.close_button.clicked.connect(self.close_button_clicked) self.close_button.clicked.connect(self.close_button_clicked)
self.refresh_button.clicked.connect(self.refill)
self.tab_order_widgets = [self.items, self.books_table, self.lock_qv, self.tab_order_widgets = [self.items, self.books_table, self.lock_qv,
self.dock_button, self.search_button, self.close_button] self.dock_button, self.search_button, self.refresh_button,
self.close_button]
for idx,widget in enumerate(self.tab_order_widgets): for idx,widget in enumerate(self.tab_order_widgets):
widget.installEventFilter(WidgetTabFilter(widget, idx, self.tab_pressed_signal)) widget.installEventFilter(WidgetTabFilter(widget, idx, self.tab_pressed_signal))
@ -239,8 +241,10 @@ class Quickview(QDialog, Ui_Quickview):
self.dock_button.setText(_('Undock')) self.dock_button.setText(_('Undock'))
self.dock_button.setToolTip(_('Pop up the quickview panel into its own floating window')) self.dock_button.setToolTip(_('Pop up the quickview panel into its own floating window'))
self.dock_button.setIcon(QIcon(I('arrow-up.png'))) self.dock_button.setIcon(QIcon(I('arrow-up.png')))
# Remove the ampersands from the buttons because shortcuts exist.
self.lock_qv.setText(_('Lock Quickview contents')) self.lock_qv.setText(_('Lock Quickview contents'))
self.search_button.setText(_('Search')) self.search_button.setText(_('Search'))
self.refresh_button.setText(_('Refresh'))
self.gui.quickview_splitter.add_quickview_dialog(self) self.gui.quickview_splitter.add_quickview_dialog(self)
self.close_button.setVisible(False) self.close_button.setVisible(False)
else: else:
@ -252,6 +256,13 @@ class Quickview(QDialog, Ui_Quickview):
self.dock_button.clicked.connect(self.show_as_pane_changed) self.dock_button.clicked.connect(self.show_as_pane_changed)
self.gui.search.cleared.connect(self.indicate_no_items) self.gui.search.cleared.connect(self.indicate_no_items)
# Enable the refresh button only when QV is locked
self.refresh_button.setEnabled(False)
self.lock_qv.stateChanged.connect(self.lock_qv_changed)
def lock_qv_changed(self, state):
self.refresh_button.setEnabled(state)
def add_columns_to_widget(self): def add_columns_to_widget(self):
''' '''
Get the list of columns from the preferences. Clear the current table Get the list of columns from the preferences. Clear the current table
@ -267,7 +278,7 @@ class Quickview(QDialog, Ui_Quickview):
def refill(self): def refill(self):
''' '''
Refill the table in case the book data changes Refill the table in case the columns displayed changes
''' '''
self.add_columns_to_widget() self.add_columns_to_widget()
self._refresh(self.current_book_id, self.current_key) self._refresh(self.current_book_id, self.current_key)
@ -371,7 +382,7 @@ class Quickview(QDialog, Ui_Quickview):
# operation if we get an exception. The "close" will come # operation if we get an exception. The "close" will come
# eventually. # eventually.
try: try:
self._refresh(mi.get('id'), self.current_key) self.refresh(self.view.model().index(self.db.row(mi.id), self.current_column))
except: except:
pass pass

View File

@ -148,6 +148,32 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="refresh_button">
<property name="text">
<string>&amp;Refresh</string>
</property>
<property name="toolTip">
<string>When Quickview is locked, refresh the window using the last selected book and that book's value in the last selected column.</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QPushButton" name="close_button"> <widget class="QPushButton" name="close_button">
<property name="text"> <property name="text">