From 4b89e0e6a16164fe3337d83c4546b7169f013fc7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 13 May 2017 20:46:02 +0530 Subject: [PATCH] Allow right clicking on the layout buttons in the bottom right corner to configure the corresponding area of the user interface Fixes #1690454 [[Enhancement] Make main window more customizable by right clicking](https://bugs.launchpad.net/calibre/+bug/1690454) --- src/calibre/gui2/preferences/look_feel.ui | 8 ++++---- src/calibre/gui2/preferences/main.py | 13 +++++++++++-- src/calibre/gui2/widgets.py | 13 +++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/preferences/look_feel.ui b/src/calibre/gui2/preferences/look_feel.ui index a6a0e9cf90..76748bac75 100644 --- a/src/calibre/gui2/preferences/look_feel.ui +++ b/src/calibre/gui2/preferences/look_feel.ui @@ -19,7 +19,7 @@ 0 - + :/images/lt.png:/images/lt.png @@ -662,7 +662,7 @@ A value of zero means calculate automatically. - + :/images/book.png:/images/book.png @@ -795,7 +795,7 @@ A value of zero means calculate automatically. - + :/images/tags.png:/images/tags.png @@ -948,7 +948,7 @@ see the counts by hovering your mouse over any item. - + :/images/cover_flow.png:/images/cover_flow.png diff --git a/src/calibre/gui2/preferences/main.py b/src/calibre/gui2/preferences/main.py index 1480857504..b31940bc74 100644 --- a/src/calibre/gui2/preferences/main.py +++ b/src/calibre/gui2/preferences/main.py @@ -13,7 +13,7 @@ from PyQt5.Qt import ( Qt, QIcon, QFont, QWidget, QScrollArea, QStackedWidget, QVBoxLayout, QLabel, QFrame, QToolBar, QSize, pyqtSignal, QDialogButtonBox, QHBoxLayout, QDialog, QSizePolicy, QPainter, QTextLayout, QPointF, - QStatusTipEvent, QApplication) + QStatusTipEvent, QApplication, QTabWidget) from calibre.constants import __appname__, __version__, islinux from calibre.gui2 import (gprefs, min_available_height, available_width, @@ -259,10 +259,19 @@ class Preferences(QDialog): l.addWidget(self.title_bar), l.addWidget(self.stack), l.addWidget(self.bb) if initial_plugin is not None: - category, name = initial_plugin + category, name = initial_plugin[:2] plugin = get_plugin(category, name) if plugin is not None: self.show_plugin(plugin) + if len(initial_plugin) > 2: + w = self.findChild(QWidget, initial_plugin[2]) + if w is not None: + for c in self.showing_widget.children(): + if isinstance(c, QTabWidget): + idx = c.indexOf(w) + if idx > -1: + c.setCurrentIndex(idx) + break else: self.hide_plugin() diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 425ab60cbf..8e7d430afe 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -959,6 +959,7 @@ class LayoutButton(QToolButton): self.label = text self.setIcon(QIcon(icon)) self.setCheckable(True) + self.icname = os.path.basename(icon).rpartition('.')[0] self.splitter = splitter if splitter is not None: @@ -987,6 +988,18 @@ class LayoutButton(QToolButton): else: self.set_state_to_hide() + def mouseReleaseEvent(self, ev): + if ev.button() == Qt.RightButton: + tab_name = {'book':'book_details', 'grid':'cover_grid', 'cover_flow':'cover_browser', 'tags':'tag_browser'}.get(self.icname) + if tab_name: + ev.accept() + from calibre.gui2.ui import get_gui + gui = get_gui() + if gui is not None: + gui.iactions['Preferences'].do_config(initial_plugin=('Interface', 'Look & Feel', tab_name+'_tab'), close_after_initial=True) + return + return QToolButton.mouseReleaseEvent(self, ev) + class Splitter(QSplitter):