Panel and Toolbar enable/disable items in View menu
This commit is contained in:
@@ -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()
|
||||
|
||||
49
src/bedit_gui/controllers/view_menu_controller.py
Normal file
49
src/bedit_gui/controllers/view_menu_controller.py
Normal 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()
|
||||
Reference in New Issue
Block a user