Merge branch '3.5'

This commit is contained in:
Ghostkeeper 2018-09-18 17:30:08 +02:00
commit 28f743c9f4
No known key found for this signature in database
GPG key ID: 5252B696FB5E7C7A
2 changed files with 133 additions and 78 deletions

View file

@ -9,7 +9,8 @@ import QtQuick.Controls.Styles 1.1
import UM 1.0 as UM
import Cura 1.0 as Cura
Item {
Item
{
id: sliderRoot
// handle properties
@ -41,39 +42,47 @@ Item {
property bool layersVisible: true
property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation
function getUpperValueFromSliderHandle() {
function getUpperValueFromSliderHandle()
{
return upperHandle.getValue()
}
function setUpperValue(value) {
function setUpperValue(value)
{
upperHandle.setValue(value)
updateRangeHandle()
}
function getLowerValueFromSliderHandle() {
function getLowerValueFromSliderHandle()
{
return lowerHandle.getValue()
}
function setLowerValue(value) {
function setLowerValue(value)
{
lowerHandle.setValue(value)
updateRangeHandle()
}
function updateRangeHandle() {
function updateRangeHandle()
{
rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height)
}
// set the active handle to show only one label at a time
function setActiveHandle(handle) {
function setActiveHandle(handle)
{
activeHandle = handle
}
function normalizeValue(value) {
function normalizeValue(value)
{
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
}
// slider track
Rectangle {
Rectangle
{
id: track
width: sliderRoot.trackThickness
@ -87,7 +96,8 @@ Item {
}
// Range handle
Item {
Item
{
id: rangeHandle
y: upperHandle.y + upperHandle.height
@ -97,7 +107,8 @@ Item {
visible: sliderRoot.layersVisible
// set the new value when dragging
function onHandleDragged() {
function onHandleDragged()
{
sliderRoot.manuallyChanged = true
upperHandle.y = y - upperHandle.height
@ -111,7 +122,14 @@ Item {
UM.SimulationView.setMinimumLayer(lowerValue)
}
function setValue(value) {
function setValueManually(value)
{
sliderRoot.manuallyChanged = true
upperHandle.setValue(value)
}
function setValue(value)
{
var range = sliderRoot.upperValue - sliderRoot.lowerValue
value = Math.min(value, sliderRoot.maximumValue)
value = Math.max(value, sliderRoot.minimumValue + range)
@ -120,17 +138,20 @@ Item {
UM.SimulationView.setMinimumLayer(value - range)
}
Rectangle {
Rectangle
{
width: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth
height: parent.height + sliderRoot.handleSize
anchors.centerIn: parent
color: sliderRoot.rangeHandleColor
}
MouseArea {
MouseArea
{
anchors.fill: parent
drag {
drag
{
target: parent
axis: Drag.YAxis
minimumY: upperHandle.height
@ -141,7 +162,8 @@ Item {
onPressed: sliderRoot.setActiveHandle(rangeHandle)
}
SimulationSliderLabel {
SimulationSliderLabel
{
id: rangleHandleLabel
height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
@ -154,12 +176,13 @@ Item {
maximumValue: sliderRoot.maximumValue
value: sliderRoot.upperValue
busy: UM.SimulationView.busy
setValue: rangeHandle.setValue // connect callback functions
setValue: rangeHandle.setValueManually // connect callback functions
}
}
// Upper handle
Rectangle {
Rectangle
{
id: upperHandle
y: sliderRoot.height - (sliderRoot.minimumRangeHandleSize + 2 * sliderRoot.handleSize)
@ -170,11 +193,13 @@ Item {
color: upperHandleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.upperHandleColor
visible: sliderRoot.layersVisible
function onHandleDragged() {
function onHandleDragged()
{
sliderRoot.manuallyChanged = true
// don't allow the lower handle to be heigher than the upper handle
if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) {
if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize)
{
lowerHandle.y = y + height + sliderRoot.minimumRangeHandleSize
}
@ -186,15 +211,23 @@ Item {
}
// get the upper value based on the slider position
function getValue() {
function getValue()
{
var result = y / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize))
result = sliderRoot.maximumValue + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumValue))
result = sliderRoot.roundValues ? Math.round(result) : result
return result
}
function setValueManually(value)
{
sliderRoot.manuallyChanged = true
upperHandle.setValue(value)
}
// set the slider position based on the upper value
function setValue(value) {
function setValue(value)
{
// Normalize values between range, since using arrow keys will create out-of-the-range values
value = sliderRoot.normalizeValue(value)
@ -208,22 +241,16 @@ Item {
sliderRoot.updateRangeHandle()
}
Keys.onUpPressed:
{
sliderRoot.manuallyChanged = true
upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
}
Keys.onDownPressed:
{
sliderRoot.manuallyChanged = true
upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
}
Keys.onUpPressed: upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
// dragging
MouseArea {
MouseArea
{
anchors.fill: parent
drag {
drag
{
target: parent
axis: Drag.YAxis
minimumY: 0
@ -231,13 +258,15 @@ Item {
}
onPositionChanged: parent.onHandleDragged()
onPressed: {
onPressed:
{
sliderRoot.setActiveHandle(upperHandle)
upperHandleLabel.forceActiveFocus()
}
}
SimulationSliderLabel {
SimulationSliderLabel
{
id: upperHandleLabel
height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
@ -250,12 +279,13 @@ Item {
maximumValue: sliderRoot.maximumValue
value: sliderRoot.upperValue
busy: UM.SimulationView.busy
setValue: upperHandle.setValue // connect callback functions
setValue: upperHandle.setValueManually // connect callback functions
}
}
// Lower handle
Rectangle {
Rectangle
{
id: lowerHandle
y: sliderRoot.height - sliderRoot.handleSize
@ -267,11 +297,13 @@ Item {
visible: sliderRoot.layersVisible
function onHandleDragged() {
function onHandleDragged()
{
sliderRoot.manuallyChanged = true
// don't allow the upper handle to be lower than the lower handle
if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) {
if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize)
{
upperHandle.y = y - (upperHandle.heigth + sliderRoot.minimumRangeHandleSize)
}
@ -283,15 +315,24 @@ Item {
}
// get the lower value from the current slider position
function getValue() {
function getValue()
{
var result = (y - (sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize));
result = sliderRoot.maximumValue - sliderRoot.minimumRange + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumRange))
result = sliderRoot.roundValues ? Math.round(result) : result
return result
}
function setValueManually(value)
{
sliderRoot.manuallyChanged = true
lowerHandle.setValue(value)
}
// set the slider position based on the lower value
function setValue(value) {
function setValue(value)
{
// Normalize values between range, since using arrow keys will create out-of-the-range values
value = sliderRoot.normalizeValue(value)
@ -309,10 +350,12 @@ Item {
Keys.onDownPressed: lowerHandleLabel.setValue(lowerHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
// dragging
MouseArea {
MouseArea
{
anchors.fill: parent
drag {
drag
{
target: parent
axis: Drag.YAxis
minimumY: upperHandle.height + sliderRoot.minimumRangeHandleSize
@ -320,13 +363,15 @@ Item {
}
onPositionChanged: parent.onHandleDragged()
onPressed: {
onPressed:
{
sliderRoot.setActiveHandle(lowerHandle)
lowerHandleLabel.forceActiveFocus()
}
}
SimulationSliderLabel {
SimulationSliderLabel
{
id: lowerHandleLabel
height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
@ -339,7 +384,7 @@ Item {
maximumValue: sliderRoot.maximumValue
value: sliderRoot.lowerValue
busy: UM.SimulationView.busy
setValue: lowerHandle.setValue // connect callback functions
setValue: lowerHandle.setValueManually // connect callback functions
}
}
}
}

View file

@ -9,7 +9,8 @@ import QtQuick.Controls.Styles 1.1
import UM 1.0 as UM
import Cura 1.0 as Cura
Item {
Item
{
id: sliderRoot
// handle properties
@ -36,25 +37,30 @@ Item {
property bool pathsVisible: true
property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation
function getHandleValueFromSliderHandle () {
function getHandleValueFromSliderHandle()
{
return handle.getValue()
}
function setHandleValue (value) {
function setHandleValue(value)
{
handle.setValue(value)
updateRangeHandle()
}
function updateRangeHandle () {
function updateRangeHandle()
{
rangeHandle.width = handle.x - sliderRoot.handleSize
}
function normalizeValue(value) {
function normalizeValue(value)
{
return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue)
}
// slider track
Rectangle {
Rectangle
{
id: track
width: sliderRoot.width - sliderRoot.handleSize
@ -68,7 +74,8 @@ Item {
}
// Progress indicator
Item {
Item
{
id: rangeHandle
x: handle.width
@ -77,7 +84,8 @@ Item {
anchors.verticalCenter: sliderRoot.verticalCenter
visible: sliderRoot.pathsVisible
Rectangle {
Rectangle
{
height: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth
width: parent.width + sliderRoot.handleSize
anchors.centerIn: parent
@ -86,7 +94,8 @@ Item {
}
// Handle
Rectangle {
Rectangle
{
id: handle
x: sliderRoot.handleSize
@ -97,7 +106,8 @@ Item {
color: handleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.handleColor
visible: sliderRoot.pathsVisible
function onHandleDragged () {
function onHandleDragged()
{
sliderRoot.manuallyChanged = true
// update the range handle
@ -108,15 +118,23 @@ Item {
}
// get the value based on the slider position
function getValue () {
function getValue()
{
var result = x / (sliderRoot.width - sliderRoot.handleSize)
result = result * sliderRoot.maximumValue
result = sliderRoot.roundValues ? Math.round(result) : result
return result
}
function setValueManually(value)
{
sliderRoot.manuallyChanged = true
handle.setValue(value)
}
// set the slider position based on the value
function setValue (value) {
function setValue(value)
{
// Normalize values between range, since using arrow keys will create out-of-the-range values
value = sliderRoot.normalizeValue(value)
@ -130,35 +148,27 @@ Item {
sliderRoot.updateRangeHandle()
}
Keys.onRightPressed:
{
sliderRoot.manuallyChanged = true
handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
}
Keys.onLeftPressed:
{
sliderRoot.manuallyChanged = true
handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
}
Keys.onRightPressed: handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
// dragging
MouseArea {
MouseArea
{
anchors.fill: parent
drag {
drag
{
target: parent
axis: Drag.XAxis
minimumX: 0
maximumX: sliderRoot.width - sliderRoot.handleSize
}
onPressed: {
handleLabel.forceActiveFocus()
}
onPressed: handleLabel.forceActiveFocus()
onPositionChanged: parent.onHandleDragged()
}
SimulationSliderLabel {
SimulationSliderLabel
{
id: handleLabel
height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height
@ -172,7 +182,7 @@ Item {
maximumValue: sliderRoot.maximumValue
value: sliderRoot.handleValue
busy: UM.SimulationView.busy
setValue: handle.setValue // connect callback functions
setValue: handle.setValueManually // connect callback functions
}
}
}