diff --git a/cura/Sidebar/SidebarController.py b/cura/Sidebar/SidebarController.py new file mode 100644 index 0000000000..79e8d55c56 --- /dev/null +++ b/cura/Sidebar/SidebarController.py @@ -0,0 +1,48 @@ +# Copyright (c) 2017 Ultimaker B.V. +from UM.Logger import Logger +from UM.PluginRegistry import PluginRegistry +from UM.Signal import Signal +from .SidebarView import SidebarView +from typing import Optional + +# The sidebar controller manages available sidebar components and decides which one to display. +# The cura.qml file uses this controller to repeat over the sidebars and show the active index. +class SidebarController: + + def __init__(self, application): + self._application = application + self._sidebar_views = {} + self._active_sidebar_view = None + + PluginRegistry.addType("sidebar_view", self.addSidebarView) + + ## Emitted when the list of views changes. + sidebarViewsChanged = Signal() + + ## Emitted when the active view changes. + activeSidebarViewChanged = Signal() + + ## Get the active application instance. + def getApplication(self): + return self._application + + ## Add a sidebar view to the registry. + # It get's a unique name based on the plugin ID. + def addSidebarView(self, sidebar_view: SidebarView): + name = sidebar_view.getPluginId() + if name not in self._sidebar_views: + self._sidebar_views[name] = sidebar_view + self.sidebarViewsChanged.emit() + + ## Get a registered sidebar view by name. + # The name is the ID of the plugin that registered the view. + def getSidebarView(self, name: str) -> Optional[SidebarView]: + try: + return self._sidebar_views[name] + except KeyError: + Logger.log("e", "Unable to find %s in sidebar view list", name) + return None + + ## Change the active sidebar view to one of the registered views. + def setActiveSidebarView(self, name: str): + print("setting active sidebar view") diff --git a/cura/SidebarView.py b/cura/Sidebar/SidebarView.py similarity index 100% rename from cura/SidebarView.py rename to cura/Sidebar/SidebarView.py diff --git a/cura/Sidebar/__init__.py b/cura/Sidebar/__init__.py new file mode 100644 index 0000000000..e69de29bb2