Jerry-rig single slider to replace dual slider design

This commit is contained in:
fieldOfView 2017-03-06 14:23:53 +01:00
parent 1f61017946
commit a0df6bf542
2 changed files with 139 additions and 37 deletions

View file

@ -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
{