Browse Source

Adds layer count

Brings back the layer count, the min & max. And it does not display these untill Cura is done slicing.

Fixes #117
Tamara Hogenhout 9 years ago
parent
commit
53a94c23e1

+ 9 - 3
plugins/LayerView/LayerView.py

@@ -27,9 +27,13 @@ class LayerView(View):
         self._max_layers = 10
         self._current_layer_num = 10
         self._current_layer_mesh = None
+        self._activity = False
 
         self._solid_layers = 5
 
+    def getActivity(self):
+        return self._activity
+
     def getCurrentLayer(self):
         return self._current_layer_num
     
@@ -114,13 +118,14 @@ class LayerView(View):
 
             self._current_layer_mesh = None
             self.currentLayerNumChanged.emit()
-    
+
     currentLayerNumChanged = Signal()
-    
+
     def calculateMaxLayers(self):
         scene = self.getController().getScene()
         renderer = self.getRenderer()
         if renderer and self._material:
+            self._activity = True
             renderer.setRenderSelection(False)
             self._old_max_layers = self._max_layers
             ## Recalculate num max layers
@@ -138,10 +143,11 @@ class LayerView(View):
             if new_max_layers > 0 and new_max_layers != self._old_max_layers:
                 self._max_layers = new_max_layers
                 self.maxLayersChanged.emit()
+                self._current_layer_num = self._max_layers
 
                 # This makes sure we update the current layer
                 self.setLayer(int(self._max_layers * (self._current_layer_num / self._old_max_layers)))
-    
+
     maxLayersChanged = Signal()
     
     ##  Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created

+ 2 - 1
plugins/LayerView/LayerView.qml

@@ -18,6 +18,7 @@ Item
         width: 10
         height: 250
         anchors.right : parent.right
+        anchors.rightMargin: UM.Theme.sizes.default_margin.width * 2
         orientation: Qt.Vertical
         minimumValue: 0;
         maximumValue: UM.LayerView.numLayers;
@@ -26,6 +27,6 @@ Item
         value: UM.LayerView.currentLayer
         onValueChanged: UM.LayerView.setCurrentLayer(value)
 
-        style: UM.Theme.styles.slider;
+        style: UM.LayerView.getLayerActivity ? UM.Theme.styles.layerViewSlider : UM.Theme.styles.slider
     }
 }

+ 11 - 1
plugins/LayerView/LayerViewProxy.py

@@ -11,7 +11,13 @@ class LayerViewProxy(QObject):
     
     currentLayerChanged = pyqtSignal()
     maxLayersChanged = pyqtSignal()
-    
+    activityChanged = pyqtSignal()
+
+    @pyqtProperty(bool, notify = activityChanged)
+    def getLayerActivity(self):
+        active_view = self._controller.getActiveView()
+        return active_view.getActivity()
+
     @pyqtProperty(int, notify = maxLayersChanged)
     def numLayers(self):
         active_view = self._controller.getActiveView()
@@ -30,9 +36,13 @@ class LayerViewProxy(QObject):
         active_view = self._controller.getActiveView()
         if type(active_view) == LayerView.LayerView.LayerView:
             active_view.setLayer(layer_num)
+
+    def _layerActivityChanged(self):
+        self.activityChanged.emit()
             
     def _onLayerChanged(self):
         self.currentLayerChanged.emit()
+        self._layerActivityChanged()
         
     def _onMaxLayersChanged(self):
         self.maxLayersChanged.emit()

+ 67 - 0
resources/themes/cura/styles.qml

@@ -272,6 +272,7 @@ QtObject {
             }
 
             handle: UM.AngledCornerRectangle {
+                id: scrollViewHandle
                 implicitWidth: UM.Theme.sizes.scrollbar.width;
 
                 cornerSize: UM.Theme.sizes.scrollbar.width;
@@ -367,6 +368,72 @@ QtObject {
         }
     }
 
+        property Component layerViewSlider: Component {
+        SliderStyle {
+            groove: Rectangle {
+                id: layerSliderGroove
+                implicitWidth: control.width;
+                implicitHeight: UM.Theme.sizes.slider_groove.height;
+
+                color: UM.Theme.colors.slider_groove;
+                border.width: 1;
+                border.color: UM.Theme.colors.slider_groove_border;
+                Rectangle {
+                    anchors {
+                        left: parent.left;
+                        top: parent.top;
+                        bottom: parent.bottom;
+                    }
+                    color: UM.Theme.colors.slider_groove_fill;
+                    width: (control.value / (control.maximumValue - control.minimumValue)) * parent.width;
+                }
+                Label {
+                    id: maxValueLabel
+                    text: control.maximumValue + 1
+                    transformOrigin: Item.BottomLeft
+                    rotation: 90
+                    x: parent.x + parent.width - maxValueLabel.height
+                    y: parent.y
+                }
+                Label {
+                    id: minValueLabel
+                    text: '1'
+                    transformOrigin: Item.BottomLeft
+                    rotation: 90
+                    x: parent.x
+                    y: parent.y
+                }
+            }
+            handle: Rectangle {
+                id: layerSliderControl
+                width: UM.Theme.sizes.slider_handle.width;
+                height: UM.Theme.sizes.slider_handle.height;
+                color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
+                Behavior on color { ColorAnimation { duration: 50; } }
+                Label {
+                    id: valueLabel
+                    text: control.value + 1
+                    anchors.bottom: layerSliderControl.bottom
+                    anchors.right: layerSliderControl.left
+                    anchors.bottomMargin: parent.width + UM.Theme.sizes.default_margin.width
+                    transformOrigin: Item.BottomRight
+                    rotation: 90
+                    Rectangle {
+                        width: (parent.width + UM.Theme.sizes.tooltip_margins.width) < 35 ? 35 : parent.width + UM.Theme.sizes.tooltip_margins.width
+                        height: parent.height + UM.Theme.sizes.tooltip_margins.height
+                        anchors.verticalCenter: parent.verticalCenter
+                        anchors.horizontalCenter: parent.horizontalCenter
+                        z: parent.z - 1
+                        color: UM.Theme.colors.slider_text_background
+                        border.width: 1
+                        border.color: UM.Theme.colors.slider_groove_fill;
+
+                    }
+                }
+            }
+        }
+    }
+
     property Component text_field: Component {
         TextFieldStyle {
             textColor: UM.Theme.colors.setting_control_text;

+ 1 - 0
resources/themes/cura/theme.json

@@ -100,6 +100,7 @@
         "slider_groove_fill": [160, 163, 171, 255],
         "slider_handle": [12, 169, 227, 255],
         "slider_handle_hover": [34, 150, 190, 255],
+        "slider_text_background": [255, 255, 255, 255],
 
         "checkbox": [255, 255, 255, 255],
         "checkbox_hover": [245, 245, 245, 255],