diff --git a/plugins/LayerView/LayerPass.py b/plugins/LayerView/LayerPass.py index e14bab996a..5c310da603 100644 --- a/plugins/LayerView/LayerPass.py +++ b/plugins/LayerView/LayerPass.py @@ -30,8 +30,6 @@ class LayerPass(RenderPass): self._gl = OpenGL.getInstance().getBindingsObject() self._scene = self._controller.getScene() - self._layer_view = None - self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) self._max_layers = 0 self._current_layer_num = 0 @@ -41,6 +39,8 @@ class LayerPass(RenderPass): self._activity = False self._old_max_layers = 0 + self._busy = False + Preferences.getInstance().addPreference("view/top_layer_count", 5) Preferences.getInstance().addPreference("view/only_show_top_layers", False) Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) @@ -48,8 +48,15 @@ class LayerPass(RenderPass): self._solid_layers = int(Preferences.getInstance().getValue("view/top_layer_count")) self._only_show_top_layers = bool(Preferences.getInstance().getValue("view/only_show_top_layers")) - def setLayerView(self, layerview): - self._layer_view = layerview + busyChanged = Signal() + + def isBusy(self): + return self._busy + + def setBusy(self, busy): + if busy != self._busy: + self._busy = busy + self.busyChanged.emit() def getActivity(self): return self._activity @@ -175,14 +182,14 @@ class LayerPass(RenderPass): self._top_layers_job.finished.disconnect(self._updateCurrentLayerMesh) self._top_layers_job.cancel() - self._layer_view.setBusy(True) + self.setBusy(True) self._top_layers_job = _CreateTopLayersJob(self._controller.getScene(), self._current_layer_num, self._solid_layers) self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) self._top_layers_job.start() def _updateCurrentLayerMesh(self, job): - self._layer_view.setBusy(False) + self.setBusy(False) if not job.getResult(): return diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index 550ffde9de..b06d37970b 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -6,7 +6,6 @@ from UM.View.View import View from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Resources import Resources from UM.Event import Event, KeyEvent -from UM.Signal import Signal from UM.Scene.Selection import Selection from UM.Math.Color import Color from UM.Scene.SceneNode import SceneNode @@ -39,20 +38,19 @@ class LayerView(View): self._layerview_composite_shader = None self._old_composite_shader = None - self._busy = False - def getLayerPass(self): + if not self._layer_pass: + # Currently the RenderPass constructor requires a size > 0 + # This should be fixed in RenderPass's constructor. + self._layer_pass = LayerPass.LayerPass(1, 1) + self.getRenderer().addRenderPass(self._layer_pass) + return self._layer_pass - busyChanged = Signal() - - def isBusy(self): - return self._busy - - def setBusy(self, busy): - if busy != self._busy: - self._busy = busy - self.busyChanged.emit() + ## Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created + # as this caused some issues. + def getProxy(self, engine, script_engine): + return self._proxy def beginRendering(self): scene = self.getController().getScene() @@ -72,11 +70,6 @@ class LayerView(View): if node.getMeshData() and node.isVisible(): renderer.queueNode(node, transparent = True, shader = self._ghost_shader) - ## Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created - # as this caused some issues. - def getProxy(self, engine, script_engine): - return self._proxy - def endRendering(self): pass @@ -85,19 +78,15 @@ class LayerView(View): ctrl_is_active = modifiers == Qt.ControlModifier if event.type == Event.KeyPressEvent and ctrl_is_active: if event.key == KeyEvent.UpKey: - self._layer_pass.setLayer(self._current_layer_num + 1) + self.getLayerPass().setLayer(self._current_layer_num + 1) return True if event.key == KeyEvent.DownKey: - self._layer_pass.setLayer(self._current_layer_num - 1) + self.getLayerPass().setLayer(self._current_layer_num - 1) return True if event.type == Event.ViewActivateEvent: - if not self._layer_pass: - # Currently the RenderPass constructor requires a size > 0 - # This should be fixed in RenderPass's constructor. - self._layer_pass = LayerPass.LayerPass(1, 1) - self._layer_pass.setLayerView(self) - self.getRenderer().addRenderPass(self._layer_pass) + # Make sure the LayerPass is created + self.getLayerPass() if not self._layerview_composite_shader: self._layerview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("LayerView"), "layerview_composite.shader")) diff --git a/plugins/LayerView/LayerViewProxy.py b/plugins/LayerView/LayerViewProxy.py index d770238393..32f1a27e4e 100644 --- a/plugins/LayerView/LayerViewProxy.py +++ b/plugins/LayerView/LayerViewProxy.py @@ -39,7 +39,7 @@ class LayerViewProxy(QObject): def busy(self): active_view = self._controller.getActiveView() if type(active_view) == LayerView.LayerView.LayerView: - return active_view.isBusy() + return active_view.getLayerPass().isBusy() return False @@ -67,4 +67,4 @@ class LayerViewProxy(QObject): if type(active_view) == LayerView.LayerView.LayerView: active_view.getLayerPass().currentLayerNumChanged.connect(self._onLayerChanged) active_view.getLayerPass().maxLayersChanged.connect(self._onMaxLayersChanged) - active_view.busyChanged.connect(self._onBusyChanged) + active_view.getLayerPass().busyChanged.connect(self._onBusyChanged)