Browse Source

Move sidebar target for plugins to only middle section

ChrisTerBeke 7 years ago
parent
commit
e33288b7c8

+ 2 - 9
cura/CuraApplication.py

@@ -79,7 +79,6 @@ from cura.Settings.ExtruderStack import ExtruderStack
 from cura.Sidebar.SidebarController import SidebarController
 from cura.Sidebar.SidebarControllerProxy import SidebarControllerProxy
 from cura.Sidebar.SidebarViewModel import SidebarViewModel
-from cura.Settings.SettingsSidebarView import SettingsSidebarView
 
 from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS
 from UM.FlameProfiler import pyqtSlot
@@ -1319,16 +1318,10 @@ class CuraApplication(QtApplication):
     def _addProfileWriter(self, profile_writer):
         pass
 
-    ##  Create and register the default sidebar component (settings)
+    ## Set the default sidebar view to "default"
     def _setDefaultSidebarView(self):
-
-        # Register the default settings sidebar manually
-        settings_sidebar_view = SettingsSidebarView()
-        self._sidebar_controller.addSidebarView(settings_sidebar_view)
-
-        # Set the default sidebar view depending on user preferences.
         preferences = Preferences.getInstance()
-        preferences.addPreference("cura/active_sidebar_view", settings_sidebar_view.getPluginId())
+        preferences.addPreference("cura/active_sidebar_view", "default")
         active_sidebar_view = preferences.getValue("cura/active_sidebar_view")
         self._sidebar_controller.setActiveSidebarView(active_sidebar_view)
 

+ 0 - 28
cura/Settings/SettingsSidebarView.py

@@ -1,28 +0,0 @@
-# Copyright (c) 2017 Ultimaker B.V.
-from PyQt5.QtCore import QObject
-
-from UM.i18n import i18nCatalog
-
-from cura.Sidebar.SidebarView import SidebarView
-i18n_catalog = i18nCatalog("cura")
-
-class SettingsSidebarView(QObject, SidebarView):
-
-    def __init__(self, parent = None):
-        super().__init__(parent)
-
-    ##  As the default sidebar is not a plugin, we have a get plugin ID method to allow the sidebar view model to get the needed data.
-    def getPluginId(self):
-        return "default"
-
-    ##  As the default sidebar is not a plugin, we have a add meta data method here to allow the sidebar view model to get the needed data.
-    def getMetaData(self):
-        return {
-            "sidebar_view": {
-                "name": i18n_catalog.i18nc("@item:inmenu", "Print settings"),
-                "weight": 0
-            }
-        }
-
-    def getComponent(self):
-        return None

+ 8 - 1
cura/Sidebar/SidebarController.py

@@ -10,7 +10,7 @@ class SidebarController:
 
     def __init__(self, application):
         self._application = application
-        self._sidebar_views = {}
+        self._sidebar_views = {"default": {}}  # default is needed for the default settings sidebar
         self._active_sidebar_view = None
 
         # Register the sidebar_view plugin type so plugins can expose custom sidebar views.
@@ -51,6 +51,13 @@ class SidebarController:
     def getActiveSidebarView(self):
         return self._active_sidebar_view
 
+    ##  Get the ID of the active sidebar view.
+    def getActiveSidebarViewId(self):
+        if self._active_sidebar_view:
+            if hasattr(self._active_sidebar_view, "getPluginId"):
+                return self._active_sidebar_view.getPluginId()
+        return "default"
+
     ##  Change the active sidebar view to one of the registered views.
     def setActiveSidebarView(self, sidebar_view_id: str):
         if sidebar_view_id in self._sidebar_views:

+ 1 - 4
cura/Sidebar/SidebarControllerProxy.py

@@ -22,10 +22,7 @@ class SidebarControllerProxy(QObject):
 
     @pyqtProperty(str, notify = activeSidebarViewChanged)
     def activeSidebarId(self):
-        if self._controller.getActiveSidebarView() is not None:
-            return self._controller.getActiveSidebarView().getPluginId()
-        else:
-            return "default"
+        return self._controller.getActiveSidebarViewId()
 
     @pyqtSlot(str)
     def setActiveSidebarView(self, sidebar_view_id):

+ 12 - 4
cura/Sidebar/SidebarViewModel.py

@@ -34,10 +34,18 @@ class SidebarViewModel(ListModel):
             current_view_id = current_view.getPluginId()
 
         for sidebar_view_id, sidebar_view in sidebar_views.items():
-            if sidebar_view_id != "default":
-                sidebar_view_metadata = PluginRegistry.getInstance().getMetaData(sidebar_view_id).get("sidebar_view", {})
-            else:
-                sidebar_view_metadata = sidebar_view.getMetaData().get("sidebar_view", {})
+
+            # Override fields for default settings sidebar
+            if sidebar_view_id == "default":
+                items.append({
+                    "id": "default",
+                    "name": "Print settings",
+                    "weight": 0,
+                    "active": current_view_id == "default"
+                })
+                continue
+
+            sidebar_view_metadata = PluginRegistry.getInstance().getMetaData(sidebar_view_id).get("sidebar_view", {})
 
             # Skip view modes that are marked as not visible
             if "visible" in sidebar_view_metadata and not sidebar_view_metadata["visible"]:

+ 0 - 24
resources/qml/Cura.qml

@@ -395,30 +395,6 @@ UM.MainWindow
                     width: parent.width
                     z: 1
                     monitoringPrint: base.showPrintMonitor
-                    visible: Cura.SidebarController.activeSidebarId == "default"
-                }
-
-                // The sidebarRepeater exposes sidebar views provided by plugins.
-                // Whenever a plugin sidebar view is active (e.g. not "default"), that sidebar view is shown.
-                Repeater
-                {
-                    id: sidebarRepeater
-
-                    model: Cura.SidebarViewModel { }
-
-                    delegate: Loader
-                    {
-                        id: delegate
-                        asynchronous: true
-                        visible: model.active
-
-                        // dynamically get the component from the sidebar controller or set the default sidebar
-                        sourceComponent: {
-                            if (model.id !== "default") {
-                                return Cura.SidebarController.getSidebarComponent(model.id)
-                            }
-                        }
-                    }
                 }
             }
 

+ 37 - 15
resources/qml/Sidebar.qml

@@ -87,11 +87,19 @@ Rectangle
         }
     }
 
+    onCurrentModeIndexChanged:
+    {
+        UM.Preferences.setValue("cura/active_mode", currentModeIndex);
+        if(modesListModel.count > base.currentModeIndex)
+        {
+            sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "replace": true });
+        }
+    }
+
     SidebarHeader {
         id: header
         width: parent.width
-        visible: machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants
-
+        visible: (machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants) && Cura.SidebarController.activeSidebarId == "default"
         onShowTooltip: base.showTooltip(item, location, text)
         onHideTooltip: base.hideTooltip()
     }
@@ -99,22 +107,13 @@ Rectangle
     Rectangle {
         id: headerSeparator
         width: parent.width
-        visible: settingsModeSelection.visible && header.visible
+        visible: settingsModeSelection.visible && header.visible && Cura.SidebarController.activeSidebarId == "default"
         height: visible ? UM.Theme.getSize("sidebar_lining").height : 0
         color: UM.Theme.getColor("sidebar_lining")
         anchors.top: header.bottom
         anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0
     }
 
-    onCurrentModeIndexChanged:
-    {
-        UM.Preferences.setValue("cura/active_mode", currentModeIndex);
-        if(modesListModel.count > base.currentModeIndex)
-        {
-            sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "replace": true });
-        }
-    }
-
     Label {
         id: settingsModeLabel
         text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified");
@@ -125,7 +124,7 @@ Rectangle
         width: Math.floor(parent.width * 0.45)
         font: UM.Theme.getFont("large")
         color: UM.Theme.getColor("text")
-        visible: !monitoringPrint && !hideView
+        visible: !monitoringPrint && !hideView && Cura.SidebarController.activeSidebarId == "default"
     }
 
     Rectangle {
@@ -147,7 +146,7 @@ Rectangle
             }
         }
         anchors.topMargin: UM.Theme.getSize("sidebar_margin").height
-        visible: !monitoringPrint && !hideSettings && !hideView
+        visible: !monitoringPrint && !hideSettings && !hideView && Cura.SidebarController.activeSidebarId == "default"
         Component{
             id: wizardDelegate
             Button {
@@ -228,7 +227,7 @@ Rectangle
         anchors.topMargin: UM.Theme.getSize("sidebar_margin").height
         anchors.left: base.left
         anchors.right: base.right
-        visible: !monitoringPrint && !hideSettings
+        visible: !monitoringPrint && !hideSettings && Cura.SidebarController.activeSidebarId == "default"
 
         delegate: StackViewDelegate
         {
@@ -259,6 +258,29 @@ Rectangle
         }
     }
 
+    // The sidebarRepeater exposes sidebar views provided by plugins.
+    // Whenever a plugin sidebar view is active (e.g. not "default"), that sidebar view is shown.
+    Repeater
+    {
+        id: sidebarRepeater
+
+        model: Cura.SidebarViewModel { }
+
+        delegate: Loader
+        {
+            id: delegate
+            asynchronous: true
+            visible: model.active
+
+            // dynamically get the component from the sidebar controller or set the default sidebar
+            sourceComponent: {
+                if (model.id !== "default") {
+                    return Cura.SidebarController.getSidebarComponent(model.id)
+                }
+            }
+        }
+    }
+
     Loader
     {
         id: controlItem