Move busy handling into LayerPass and cleanup

CURA-1601
This commit is contained in:
fieldOfView 2016-08-03 15:20:26 +02:00
parent 17b12b9048
commit 66f8a62e6c
3 changed files with 29 additions and 33 deletions

View file

@ -30,8 +30,6 @@ class LayerPass(RenderPass):
self._gl = OpenGL.getInstance().getBindingsObject() self._gl = OpenGL.getInstance().getBindingsObject()
self._scene = self._controller.getScene() self._scene = self._controller.getScene()
self._layer_view = None
self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged)
self._max_layers = 0 self._max_layers = 0
self._current_layer_num = 0 self._current_layer_num = 0
@ -41,6 +39,8 @@ class LayerPass(RenderPass):
self._activity = False self._activity = False
self._old_max_layers = 0 self._old_max_layers = 0
self._busy = False
Preferences.getInstance().addPreference("view/top_layer_count", 5) Preferences.getInstance().addPreference("view/top_layer_count", 5)
Preferences.getInstance().addPreference("view/only_show_top_layers", False) Preferences.getInstance().addPreference("view/only_show_top_layers", False)
Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) 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._solid_layers = int(Preferences.getInstance().getValue("view/top_layer_count"))
self._only_show_top_layers = bool(Preferences.getInstance().getValue("view/only_show_top_layers")) self._only_show_top_layers = bool(Preferences.getInstance().getValue("view/only_show_top_layers"))
def setLayerView(self, layerview): busyChanged = Signal()
self._layer_view = layerview
def isBusy(self):
return self._busy
def setBusy(self, busy):
if busy != self._busy:
self._busy = busy
self.busyChanged.emit()
def getActivity(self): def getActivity(self):
return self._activity return self._activity
@ -175,14 +182,14 @@ class LayerPass(RenderPass):
self._top_layers_job.finished.disconnect(self._updateCurrentLayerMesh) self._top_layers_job.finished.disconnect(self._updateCurrentLayerMesh)
self._top_layers_job.cancel() 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 = _CreateTopLayersJob(self._controller.getScene(), self._current_layer_num, self._solid_layers)
self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) self._top_layers_job.finished.connect(self._updateCurrentLayerMesh)
self._top_layers_job.start() self._top_layers_job.start()
def _updateCurrentLayerMesh(self, job): def _updateCurrentLayerMesh(self, job):
self._layer_view.setBusy(False) self.setBusy(False)
if not job.getResult(): if not job.getResult():
return return

View file

@ -6,7 +6,6 @@ from UM.View.View import View
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Resources import Resources from UM.Resources import Resources
from UM.Event import Event, KeyEvent from UM.Event import Event, KeyEvent
from UM.Signal import Signal
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Math.Color import Color from UM.Math.Color import Color
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
@ -39,20 +38,19 @@ class LayerView(View):
self._layerview_composite_shader = None self._layerview_composite_shader = None
self._old_composite_shader = None self._old_composite_shader = None
self._busy = False
def getLayerPass(self): 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 return self._layer_pass
busyChanged = Signal() ## Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created
# as this caused some issues.
def isBusy(self): def getProxy(self, engine, script_engine):
return self._busy return self._proxy
def setBusy(self, busy):
if busy != self._busy:
self._busy = busy
self.busyChanged.emit()
def beginRendering(self): def beginRendering(self):
scene = self.getController().getScene() scene = self.getController().getScene()
@ -72,11 +70,6 @@ class LayerView(View):
if node.getMeshData() and node.isVisible(): if node.getMeshData() and node.isVisible():
renderer.queueNode(node, transparent = True, shader = self._ghost_shader) 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): def endRendering(self):
pass pass
@ -85,19 +78,15 @@ class LayerView(View):
ctrl_is_active = modifiers == Qt.ControlModifier ctrl_is_active = modifiers == Qt.ControlModifier
if event.type == Event.KeyPressEvent and ctrl_is_active: if event.type == Event.KeyPressEvent and ctrl_is_active:
if event.key == KeyEvent.UpKey: if event.key == KeyEvent.UpKey:
self._layer_pass.setLayer(self._current_layer_num + 1) self.getLayerPass().setLayer(self._current_layer_num + 1)
return True return True
if event.key == KeyEvent.DownKey: if event.key == KeyEvent.DownKey:
self._layer_pass.setLayer(self._current_layer_num - 1) self.getLayerPass().setLayer(self._current_layer_num - 1)
return True return True
if event.type == Event.ViewActivateEvent: if event.type == Event.ViewActivateEvent:
if not self._layer_pass: # Make sure the LayerPass is created
# Currently the RenderPass constructor requires a size > 0 self.getLayerPass()
# 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)
if not self._layerview_composite_shader: if not self._layerview_composite_shader:
self._layerview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("LayerView"), "layerview_composite.shader")) self._layerview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("LayerView"), "layerview_composite.shader"))

View file

@ -39,7 +39,7 @@ class LayerViewProxy(QObject):
def busy(self): def busy(self):
active_view = self._controller.getActiveView() active_view = self._controller.getActiveView()
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
return active_view.isBusy() return active_view.getLayerPass().isBusy()
return False return False
@ -67,4 +67,4 @@ class LayerViewProxy(QObject):
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
active_view.getLayerPass().currentLayerNumChanged.connect(self._onLayerChanged) active_view.getLayerPass().currentLayerNumChanged.connect(self._onLayerChanged)
active_view.getLayerPass().maxLayersChanged.connect(self._onMaxLayersChanged) active_view.getLayerPass().maxLayersChanged.connect(self._onMaxLayersChanged)
active_view.busyChanged.connect(self._onBusyChanged) active_view.getLayerPass().busyChanged.connect(self._onBusyChanged)