Panel and Toolbar enable/disable items in View menu

This commit is contained in:
2026-07-26 14:39:27 +02:00
parent f37cc41ed0
commit 810f993830
3 changed files with 90 additions and 0 deletions

View File

@@ -1,10 +1,12 @@
from __future__ import annotations
import sys
from PySide6.QtWidgets import QApplication
from bedit_gui.controllers.document_controller import DocumentController
from bedit_gui.controllers.undo_controller import UndoController
from bedit_gui.controllers.view_menu_controller import ViewMenuController
from bedit_gui.controllers.window_state_controller import WindowStateController
from bedit_gui.documents import Document
from bedit_gui.views.main_window import MainWindow
@@ -20,6 +22,7 @@ def main() -> int:
window = MainWindow()
DocumentController(document, window)
UndoController(document, window)
ViewMenuController(window)
window_state_controller = WindowStateController(app, window)
window_state_controller.restore()
window.showMaximized()

View File

@@ -0,0 +1,49 @@
from __future__ import annotations
import re
from PySide6.QtCore import QObject
from PySide6.QtWidgets import QDockWidget, QMenu, QToolBar
from bedit_gui.views.main_window import MainWindow
class ViewMenuController(QObject):
"""Populate View submenus with synchronized visibility actions."""
def __init__(self, window: MainWindow) -> None:
super().__init__(window)
self.panels_menu = QMenu("Panels", window.ui.menuView)
self.toolbars_menu = QMenu("Toolbars", window.ui.menuView)
window.ui.actionPanels.setMenu(self.panels_menu)
window.ui.actionToolbars.setMenu(self.toolbars_menu)
self._populate(
self.panels_menu,
window.findChildren(QDockWidget),
)
self._populate(
self.toolbars_menu,
window.findChildren(QToolBar),
)
def _populate(
self,
menu: QMenu,
widgets: list[QDockWidget] | list[QToolBar],
) -> None:
for widget in sorted(widgets, key=self._label):
action = widget.toggleViewAction()
action.setText(self._label(widget))
menu.addAction(action)
@staticmethod
def _label(widget: QDockWidget | QToolBar) -> str:
title = widget.windowTitle().strip()
if title and title.lower() != "toolbar":
return title
name = re.sub(r"(DockWidget|Widget|ToolBar)$", "", widget.objectName())
return re.sub(r"(?<!^)(?=[A-Z])", " ", name).title()