mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -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
|
id: slider
|
||||||
width: UM.Theme.getSize("slider_layerview_size").width
|
width: handleSize
|
||||||
height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height
|
height: parent.height - 2*UM.Theme.getSize("slider_layerview_margin").height
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height
|
anchors.topMargin: UM.Theme.getSize("slider_layerview_margin").height
|
||||||
anchors.right: layerViewMenu.right
|
anchors.right: layerViewMenu.right
|
||||||
anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.8
|
anchors.rightMargin: UM.Theme.getSize("slider_layerview_margin").width
|
||||||
orientation: Qt.Vertical
|
|
||||||
minimumValue: 0;
|
|
||||||
maximumValue: UM.LayerView.numLayers-1;
|
|
||||||
stepSize: 1
|
|
||||||
|
|
||||||
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
|
property real to: UM.LayerView.numLayers
|
||||||
onValueChanged: {
|
property real from: 0
|
||||||
UM.LayerView.setMinimumLayer(value)
|
property real minimumRange: 0
|
||||||
if (value > UM.LayerView.currentLayer) {
|
property bool roundValues: true
|
||||||
UM.LayerView.setCurrentLayer(value);
|
|
||||||
|
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
|
MouseArea {
|
||||||
{
|
anchors.fill: parent
|
||||||
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
|
|
||||||
|
|
||||||
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
|
onPressed: parent.parent.activeHandle = upperHandle
|
||||||
onValueChanged: {
|
onPositionChanged:
|
||||||
UM.LayerView.setCurrentLayer(value);
|
{
|
||||||
if (value < UM.LayerView.minimumLayer) {
|
if(lowerHandle.y - (upperHandle.y + upperHandle.height) < parent.parent.minimumRangeHandleSize)
|
||||||
UM.LayerView.setMinimumLayer(value);
|
{
|
||||||
|
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
|
Rectangle
|
||||||
{
|
{
|
||||||
|
|
|
@ -292,7 +292,7 @@
|
||||||
"slider_handle": [1.5, 1.5],
|
"slider_handle": [1.5, 1.5],
|
||||||
"slider_layerview_size": [1.0, 22.0],
|
"slider_layerview_size": [1.0, 22.0],
|
||||||
"slider_layerview_background": [4.0, 0.0],
|
"slider_layerview_background": [4.0, 0.0],
|
||||||
"slider_layerview_margin": [3.0, 1.0],
|
"slider_layerview_margin": [1.0, 1.0],
|
||||||
|
|
||||||
"layerview_menu_size": [16.5, 21.0],
|
"layerview_menu_size": [16.5, 21.0],
|
||||||
"layerview_menu_size_compatibility": [22, 23.0],
|
"layerview_menu_size_compatibility": [22, 23.0],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue