diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index a3ae5b77aa..47f118c0c2 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -166,7 +166,8 @@ class LibraryWidget(Splitter): # {{{ I('cover_flow.svg'), orientation=orientation, parent=parent, connect_button=not config['separate_cover_flow'], - side_index=idx, initial_side_size=size, initial_show=False) + side_index=idx, initial_side_size=size, initial_show=False, + shortcut=_('Shift+Alt+B')) parent.library_view = BooksView(parent) parent.library_view.setObjectName('library_view') self.addWidget(parent.library_view) @@ -181,7 +182,8 @@ class Stack(QStackedWidget): # {{{ self.tb_widget = TagBrowserWidget(parent) parent.tb_splitter = Splitter('tag_browser_splitter', _('Tag Browser'), I('tags.svg'), - parent=parent, side_index=0, initial_side_size=200) + parent=parent, side_index=0, initial_side_size=200, + shortcut=_('Shift+Alt+T')) parent.tb_splitter.addWidget(self.tb_widget) parent.tb_splitter.addWidget(parent.cb_splitter) parent.tb_splitter.setCollapsible(parent.tb_splitter.other_index, False) @@ -274,7 +276,8 @@ class LayoutMixin(object): # {{{ self.stack = Stack(self) self.bd_splitter = Splitter('book_details_splitter', _('Book Details'), I('book.svg'), - orientation=Qt.Vertical, parent=self, side_index=1) + orientation=Qt.Vertical, parent=self, side_index=1, + shortcut=_('Alt+D')) self.bd_splitter.addWidget(self.stack) self.bd_splitter.addWidget(self.book_details) self.bd_splitter.setCollapsible(self.bd_splitter.other_index, False) @@ -283,7 +286,8 @@ class LayoutMixin(object): # {{{ else: # wide {{{ self.bd_splitter = Splitter('book_details_splitter', _('Book Details'), I('book.svg'), initial_side_size=200, - orientation=Qt.Horizontal, parent=self, side_index=1) + orientation=Qt.Horizontal, parent=self, side_index=1, + shortcut=_('Shift+Alt+D')) self.stack = Stack(self) self.bd_splitter.addWidget(self.stack) self.book_details = BookDetails(True, self) diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 994fa4575f..54cb526750 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -5,7 +5,7 @@ Miscellaneous widgets used in the GUI ''' import re, os, traceback -from PyQt4.Qt import QIcon, QFont, QLabel, QListWidget, \ +from PyQt4.Qt import QIcon, QFont, QLabel, QListWidget, QAction, \ QListWidgetItem, QTextCharFormat, QApplication, \ QSyntaxHighlighter, QCursor, QColor, QWidget, \ QPixmap, QSplitterHandle, QToolButton, \ @@ -855,7 +855,7 @@ class SplitterHandle(QSplitterHandle): class LayoutButton(QToolButton): - def __init__(self, icon, text, splitter, parent=None): + def __init__(self, icon, text, splitter, parent=None, shortcut=None): QToolButton.__init__(self, parent) self.label = text self.setIcon(QIcon(icon)) @@ -864,18 +864,21 @@ class LayoutButton(QToolButton): self.splitter = splitter splitter.state_changed.connect(self.update_state) self.setCursor(Qt.PointingHandCursor) + self.shortcut = '' + if shortcut: + self.shortcut = shortcut def set_state_to_show(self, *args): self.setChecked(False) label =_('Show') - self.setText(label + ' ' + self.label) + self.setText(label + ' ' + self.label + ' ' + self.shortcut) self.setToolTip(self.text()) self.setStatusTip(self.text()) def set_state_to_hide(self, *args): self.setChecked(True) label = _('Hide') - self.setText(label + ' ' + self.label) + self.setText(label + ' ' + self.label+ ' ' + self.shortcut) self.setToolTip(self.text()) self.setStatusTip(self.text()) @@ -891,7 +894,7 @@ class Splitter(QSplitter): def __init__(self, name, label, icon, initial_show=True, initial_side_size=120, connect_button=True, - orientation=Qt.Horizontal, side_index=0, parent=None): + orientation=Qt.Horizontal, side_index=0, parent=None, shortcut=None): QSplitter.__init__(self, parent) self.resize_timer = QTimer(self) self.resize_timer.setSingleShot(True) @@ -906,10 +909,21 @@ class Splitter(QSplitter): self.initial_side_size = initial_side_size self.initial_show = initial_show self.splitterMoved.connect(self.splitter_moved, type=Qt.QueuedConnection) - self.button = LayoutButton(icon, label, self) + self.button = LayoutButton(icon, label, self, shortcut=shortcut) if connect_button: self.button.clicked.connect(self.double_clicked) + if shortcut is not None: + self.action_toggle = QAction(QIcon(icon), _('Toggle') + ' ' + label, + self) + self.action_toggle.triggered.connect(self.toggle_triggered) + self.action_toggle.setShortcut(shortcut) + if parent is not None: + parent.addAction(self.action_toggle) + + def toggle_triggered(self, *args): + self.toggle_side_pane() + def createHandle(self): return SplitterHandle(self.orientation(), self)