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
This commit is contained in:
Jaime van Kessel 2018-10-29 16:21:16 +01:00
parent d8dd9bf363
commit 0a3803d665
4 changed files with 39 additions and 5 deletions

24
cura/CuraView.py Normal file
View file

@ -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")

View file

@ -78,7 +78,7 @@ Item
height: childrenRect.height height: childrenRect.height
width: childrenRect.width 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 Cura.PrintSetupSelector

View file

@ -26,8 +26,8 @@ from UM.View.GL.OpenGL import OpenGL
from UM.View.GL.OpenGLContext import OpenGLContext from UM.View.GL.OpenGLContext import OpenGLContext
from UM.View.GL.ShaderProgram import ShaderProgram from UM.View.GL.ShaderProgram import ShaderProgram
from UM.View.View import View
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from cura.CuraView import CuraView
from cura.Scene.ConvexHullNode import ConvexHullNode from cura.Scene.ConvexHullNode import ConvexHullNode
from cura.CuraApplication import CuraApplication from cura.CuraApplication import CuraApplication
@ -48,15 +48,15 @@ catalog = i18nCatalog("cura")
## View used to display g-code paths. ## View used to display g-code paths.
class SimulationView(View): class SimulationView(CuraView):
# Must match SimulationView.qml # Must match SimulationView.qml
LAYER_VIEW_TYPE_MATERIAL_TYPE = 0 LAYER_VIEW_TYPE_MATERIAL_TYPE = 0
LAYER_VIEW_TYPE_LINE_TYPE = 1 LAYER_VIEW_TYPE_LINE_TYPE = 1
LAYER_VIEW_TYPE_FEEDRATE = 2 LAYER_VIEW_TYPE_FEEDRATE = 2
LAYER_VIEW_TYPE_THICKNESS = 3 LAYER_VIEW_TYPE_THICKNESS = 3
def __init__(self) -> None: def __init__(self, parent = None) -> None:
super().__init__() super().__init__(parent)
self._max_layers = 0 self._max_layers = 0
self._current_layer_num = 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"), 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")) 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: def _evaluateCompatibilityMode(self) -> bool:
return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode")) return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode"))

View file

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