Browse Source

Add CuraView, which does something similar to CuraStage

So instead of relying on strange activeViewProxy, it's up to the CuraView to provide a set of components.
These can subsequently be used by the active stage again.

CURA-5829
Jaime van Kessel 6 years ago
parent
commit
0a3803d665

+ 24 - 0
cura/CuraView.py

@@ -0,0 +1,24 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import pyqtProperty, QUrl
+
+from UM.View.View import View
+
+
+# Since Cura has a few pre-defined "space claims" for the locations of certain components, we've provided some structure
+# to indicate this.
+#   MainComponent works in the same way the MainComponent of a stage.
+#   the stageMenuComponent returns an item that should be used somehwere in the stage menu. It's up to the active stage
+#   to actually do something with this.
+class CuraView(View):
+    def __init__(self, parent = None) -> None:
+        super().__init__(parent)
+
+    @pyqtProperty(QUrl, constant = True)
+    def mainComponent(self) -> QUrl:
+        return self.getDisplayComponent("main")
+
+    @pyqtProperty(QUrl, constant = True)
+    def stageMenuComponent(self) -> QUrl:
+        return self.getDisplayComponent("menu")

+ 1 - 1
plugins/PreviewStage/PreviewMenu.qml

@@ -78,7 +78,7 @@ Item
             height: childrenRect.height
             width: childrenRect.width
 
-            source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : ""
+            source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : ""
         }
 
         Cura.PrintSetupSelector

+ 11 - 4
plugins/SimulationView/SimulationView.py

@@ -26,8 +26,8 @@ from UM.View.GL.OpenGL import OpenGL
 from UM.View.GL.OpenGLContext import OpenGLContext
 from UM.View.GL.ShaderProgram import ShaderProgram
 
-from UM.View.View import View
 from UM.i18n import i18nCatalog
+from cura.CuraView import CuraView
 from cura.Scene.ConvexHullNode import ConvexHullNode
 from cura.CuraApplication import CuraApplication
 
@@ -48,15 +48,15 @@ catalog = i18nCatalog("cura")
 
 
 ## View used to display g-code paths.
-class SimulationView(View):
+class SimulationView(CuraView):
     # Must match SimulationView.qml
     LAYER_VIEW_TYPE_MATERIAL_TYPE = 0
     LAYER_VIEW_TYPE_LINE_TYPE = 1
     LAYER_VIEW_TYPE_FEEDRATE = 2
     LAYER_VIEW_TYPE_THICKNESS = 3
 
-    def __init__(self) -> None:
-        super().__init__()
+    def __init__(self, parent = None) -> None:
+        super().__init__(parent)
 
         self._max_layers = 0
         self._current_layer_num = 0
@@ -113,6 +113,13 @@ class SimulationView(View):
         self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled"),
                                                   title = catalog.i18nc("@info:title", "Simulation View"))
 
+        Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
+
+    def _onEngineCreated(self) -> None:
+        menu_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("SimulationView"),
+                                           "SimulationView.qml")
+        self.addDisplayComponent("menu", menu_component_path)
+
     def _evaluateCompatibilityMode(self) -> bool:
         return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode"))
 

+ 3 - 0
plugins/SimulationView/__init__.py

@@ -8,6 +8,7 @@ from . import SimulationViewProxy, SimulationView
 
 catalog = i18nCatalog("cura")
 
+
 def getMetaData():
     return {
         "view": {
@@ -17,9 +18,11 @@ def getMetaData():
         }
     }
 
+
 def createSimulationViewProxy(engine, script_engine):
     return SimulationViewProxy.SimulationViewProxy()
 
+
 def register(app):
     simulation_view = SimulationView.SimulationView()
     qmlRegisterSingletonType(SimulationViewProxy.SimulationViewProxy, "UM", 1, 0, "SimulationView", simulation_view.getProxy)