mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-14 10:17:52 -06:00
Jerry-rig single slider to replace dual slider design
This commit is contained in:
parent
1f61017946
commit
a0df6bf542
2 changed files with 139 additions and 37 deletions
|
@ -323,58 +323,160 @@ Item
|
|||
|
||||
}
|
||||
|
||||
Slider
|
||||
Item
|
||||
{
|
||||
id: sliderMinimumLayer
|
||||
width: UM.Theme.getSize("slider_layerview_size").width
|
||||
id: slider
|
||||
width: handleSize
|
||||
height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height
|
||||
anchors.right: layerViewMenu.right
|
||||
anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.8
|
||||
orientation: Qt.Vertical
|
||||
minimumValue: 0;
|
||||
maximumValue: UM.LayerView.numLayers-1;
|
||||
stepSize: 1
|
||||
anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width
|
||||
|
||||
property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize;
|
||||
property real handleSize: UM.Theme.getSize("slider_handle").width
|
||||
property real handleRadius: handleSize / 2
|
||||
property real minimumRangeHandleSize: UM.Theme.getSize("slider_handle").width / 2
|
||||
property real trackThickness: UM.Theme.getSize("slider_groove").width
|
||||
property real trackRadius: trackThickness / 2
|
||||
property real trackBorderWidth: UM.Theme.getSize("default_lining").width
|
||||
property color upperHandleColor: UM.Theme.getColor("slider_handle")
|
||||
property color lowerHandleColor: UM.Theme.getColor("slider_handle")
|
||||
property color rangeHandleColor: UM.Theme.getColor("slider_groove_fill")
|
||||
property color trackColor: UM.Theme.getColor("slider_groove")
|
||||
property color trackBorderColor: UM.Theme.getColor("slider_groove_border")
|
||||
|
||||
value: UM.LayerView.minimumLayer
|
||||
onValueChanged: {
|
||||
UM.LayerView.setMinimumLayer(value)
|
||||
if (value > UM.LayerView.currentLayer) {
|
||||
UM.LayerView.setCurrentLayer(value);
|
||||
property real to: UM.LayerView.numLayers
|
||||
property real from: 0
|
||||
property real minimumRange: 0
|
||||
property bool roundValues: true
|
||||
|
||||
property real upper:
|
||||
{
|
||||
var result = upperHandle.y / (height - (2 * handleSize + minimumRangeHandleSize));
|
||||
result = to + result * (from - (to - minimumRange));
|
||||
result = roundValues ? Math.round(result) | 0 : result;
|
||||
return result;
|
||||
}
|
||||
property real lower:
|
||||
{
|
||||
var result = (lowerHandle.y - (handleSize + minimumRangeHandleSize)) / (height - (2 * handleSize + minimumRangeHandleSize));
|
||||
result = to - minimumRange + result * (from - (to - minimumRange));
|
||||
result = roundValues ? Math.round(result) : result;
|
||||
return result;
|
||||
}
|
||||
property real range: upper - lower
|
||||
property var activeHandle: upperHandle
|
||||
|
||||
onLowerChanged:
|
||||
{
|
||||
UM.LayerView.setMinimumLayer(lower)
|
||||
}
|
||||
onUpperChanged:
|
||||
{
|
||||
UM.LayerView.setCurrentLayer(upper);
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.trackThickness
|
||||
height: parent.height - parent.handleSize
|
||||
radius: parent.trackRadius
|
||||
anchors.centerIn: parent
|
||||
color: parent.trackColor
|
||||
border.width: parent.trackBorderWidth;
|
||||
border.color: parent.trackBorderColor;
|
||||
}
|
||||
|
||||
Item {
|
||||
id: rangeHandle
|
||||
y: upperHandle.y + upperHandle.height
|
||||
width: parent.handleSize
|
||||
height: parent.minimumRangeHandleSize
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
property real value: parent.upper
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: parent.parent.trackThickness - 2 * parent.parent.trackBorderWidth
|
||||
height: parent.height + parent.parent.handleSize
|
||||
color: parent.parent.rangeHandleColor
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
drag.target: parent
|
||||
drag.axis: Drag.YAxis
|
||||
drag.minimumY: upperHandle.height
|
||||
drag.maximumY: parent.parent.height - (parent.height + lowerHandle.height)
|
||||
|
||||
onPressed: parent.parent.activeHandle = rangeHandle
|
||||
onPositionChanged:
|
||||
{
|
||||
upperHandle.y = parent.y - upperHandle.height
|
||||
lowerHandle.y = parent.y + parent.height
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
style: UM.Theme.styles.slider;
|
||||
}
|
||||
Rectangle {
|
||||
id: upperHandle
|
||||
y: parent.height - (parent.minimumRangeHandleSize + 2 * parent.handleSize)
|
||||
width: parent.handleSize
|
||||
height: parent.handleSize
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
radius: parent.handleRadius
|
||||
color: parent.upperHandleColor
|
||||
property real value: parent.upper
|
||||
|
||||
Slider
|
||||
{
|
||||
id: slider
|
||||
width: UM.Theme.getSize("slider_layerview_size").width
|
||||
height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height //UM.Theme.getSize("slider_layerview_size").height
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height
|
||||
anchors.right: layerViewMenu.right
|
||||
anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.2
|
||||
orientation: Qt.Vertical
|
||||
minimumValue: 0;
|
||||
maximumValue: UM.LayerView.numLayers;
|
||||
stepSize: 1
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize;
|
||||
drag.target: parent
|
||||
drag.axis: Drag.YAxis
|
||||
drag.minimumY: 0
|
||||
drag.maximumY: parent.parent.height - (2 * parent.parent.handleSize + parent.parent.minimumRangeHandleSize)
|
||||
|
||||
value: UM.LayerView.currentLayer
|
||||
onValueChanged: {
|
||||
UM.LayerView.setCurrentLayer(value);
|
||||
if (value < UM.LayerView.minimumLayer) {
|
||||
UM.LayerView.setMinimumLayer(value);
|
||||
onPressed: parent.parent.activeHandle = upperHandle
|
||||
onPositionChanged:
|
||||
{
|
||||
if(lowerHandle.y - (upperHandle.y + upperHandle.height) < parent.parent.minimumRangeHandleSize)
|
||||
{
|
||||
lowerHandle.y = upperHandle.y + upperHandle.height + parent.parent.minimumRangeHandleSize;
|
||||
}
|
||||
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
style: UM.Theme.styles.slider;
|
||||
Rectangle {
|
||||
id: lowerHandle
|
||||
y: parent.height - parent.handleSize
|
||||
width: parent.handleSize
|
||||
height: parent.handleSize
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
radius: parent.handleRadius
|
||||
color: parent.lowerHandleColor
|
||||
property real value: parent.lower
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
drag.target: parent
|
||||
drag.axis: Drag.YAxis
|
||||
drag.minimumY: upperHandle.height + parent.parent.minimumRangeHandleSize
|
||||
drag.maximumY: parent.parent.height - parent.height
|
||||
|
||||
onPressed: parent.parent.activeHandle = lowerHandle
|
||||
onPositionChanged:
|
||||
{
|
||||
if(lowerHandle.y - (upperHandle.y + upperHandle.height) < parent.parent.minimumRangeHandleSize)
|
||||
{
|
||||
upperHandle.y = lowerHandle.y - (upperHandle.height + parent.parent.minimumRangeHandleSize);
|
||||
}
|
||||
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue