From 20d2a0f33ba691daaa4e232f97caee246b8006a5 Mon Sep 17 00:00:00 2001 From: Aristotelis Date: Thu, 3 Nov 2022 03:13:48 +0100 Subject: [PATCH] Equalize browser panes on splitter double-click (#2175) --- qt/aqt/browser/browser.py | 4 +++- qt/aqt/browser/layout.py | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/qt/aqt/browser/browser.py b/qt/aqt/browser/browser.py index 1afe0ae67..b70333801 100644 --- a/qt/aqt/browser/browser.py +++ b/qt/aqt/browser/browser.py @@ -71,7 +71,7 @@ from aqt.utils import ( from ..changenotetype import change_notetype_dialog from .card_info import BrowserCardInfo from .find_and_replace import FindAndReplaceDialog -from .layout import BrowserLayout +from .layout import BrowserLayout, QSplitterHandleEventFilter from .previewer import BrowserPreviewer as PreviewDialog from .previewer import Previewer from .sidebar import SidebarTreeView @@ -127,6 +127,8 @@ class Browser(QMainWindow): self.form = aqt.forms.browser.Ui_Dialog() self.form.setupUi(self) self.form.splitter.setChildrenCollapsible(False) + splitter_handle_event_filter = QSplitterHandleEventFilter(self.form.splitter) + self.form.splitter.handle(1).installEventFilter(splitter_handle_event_filter) # set if exactly 1 row is selected; used by the previewer self.card: Card | None = None self.current_card: Card | None = None diff --git a/qt/aqt/browser/layout.py b/qt/aqt/browser/layout.py index d8f9fd7d5..616a68187 100644 --- a/qt/aqt/browser/layout.py +++ b/qt/aqt/browser/layout.py @@ -3,8 +3,30 @@ from enum import Enum +from aqt.qt import QEvent, QObject, QSplitter, Qt + class BrowserLayout(Enum): AUTO = "auto" VERTICAL = "vertical" HORIZONTAL = "horizontal" + + +class QSplitterHandleEventFilter(QObject): + """Event filter that equalizes QSplitter panes on double-clicking the handle""" + + def __init__(self, splitter: QSplitter): + super().__init__(splitter) + self._splitter = splitter + + def eventFilter(self, object: QObject, event: QEvent) -> bool: + if event.type() == QEvent.Type.MouseButtonDblClick: + splitter_parent = self._splitter.parentWidget() + if self._splitter.orientation() == Qt.Orientation.Horizontal: + half_size = splitter_parent.width() // 2 + else: + half_size = splitter_parent.height() // 2 + self._splitter.setSizes([half_size, half_size]) + return True + + return super().eventFilter(object, event)