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 ..changenotetype import change_notetype_dialog
from .card_info import BrowserCardInfo from .card_info import BrowserCardInfo
from .find_and_replace import FindAndReplaceDialog from .find_and_replace import FindAndReplaceDialog
from .layout import BrowserLayout from .layout import BrowserLayout, QSplitterHandleEventFilter
from .previewer import BrowserPreviewer as PreviewDialog from .previewer import BrowserPreviewer as PreviewDialog
from .previewer import Previewer from .previewer import Previewer
from .sidebar import SidebarTreeView from .sidebar import SidebarTreeView
@ -127,6 +127,8 @@ class Browser(QMainWindow):
self.form = aqt.forms.browser.Ui_Dialog() self.form = aqt.forms.browser.Ui_Dialog()
self.form.setupUi(self) self.form.setupUi(self)
self.form.splitter.setChildrenCollapsible(False) 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 # set if exactly 1 row is selected; used by the previewer
self.card: Card | None = None self.card: Card | None = None
self.current_card: Card | None = None self.current_card: Card | None = None

View file

@ -3,8 +3,30 @@
from enum import Enum from enum import Enum
from aqt.qt import QEvent, QObject, QSplitter, Qt
class BrowserLayout(Enum): class BrowserLayout(Enum):
AUTO = "auto" AUTO = "auto"
VERTICAL = "vertical" VERTICAL = "vertical"
HORIZONTAL = "horizontal" 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)