Equalize browser panes on splitter double-click (#2175)

This commit is contained in:
Aristotelis 2022-11-03 03:13:48 +01:00 committed by GitHub
parent 0cfa8b8846
commit 20d2a0f33b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View file

@ -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

View file

@ -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)