2022-11-29 14:56:15 +01:00

137 lines
4.8 KiB
QML

// Copyright (c) 2022 UltiMaker
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 2.15
import UM 1.5 as UM
import Cura 1.0 as Cura
import QtQuick.Layouts 1.3
RowLayout
{
height: childrenRect.height
spacing: UM.Theme.getSize("default_margin").width
anchors
{
left: infillRowTitle.right
right: parent.right
verticalCenter: infillRowTitle.verticalCenter
}
UM.Label { Layout.fillWidth: false; text: "0" }
Slider
{
id: infillSlider
Layout.fillWidth: true
width: parent.width
from: 0; to: 100; stepSize: 1
// disable slider when gradual support is enabled
enabled: parseInt(infillSteps.properties.value) == 0
// set initial value from stack
value: parseInt(infillDensity.properties.value)
//Draw line
background: Rectangle
{
id: backgroundLine
height: UM.Theme.getSize("print_setup_slider_groove").height
width: parent.width - UM.Theme.getSize("print_setup_slider_handle").width
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
color: UM.Theme.getColor("lining")
Repeater
{
id: repeater
anchors.fill: parent
model: 11
Rectangle
{
color: UM.Theme.getColor("lining")
implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width
implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height
anchors.verticalCenter: parent.verticalCenter
x: Math.round(backgroundLine.width / (repeater.count - 1) * index - width / 2)
radius: Math.round(width / 2)
}
}
}
handle: Rectangle
{
id: handleButton
x: infillSlider.leftPadding + infillSlider.visualPosition * (infillSlider.availableWidth - width)
anchors.verticalCenter: parent.verticalCenter
implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width
implicitHeight: UM.Theme.getSize("print_setup_slider_handle").height
radius: Math.round(width / 2)
color: UM.Theme.getColor("main_background")
border.color: UM.Theme.getColor("primary")
border.width: UM.Theme.getSize("wide_lining").height
}
UM.PointingRectangle
{
arrowSize: UM.Theme.getSize("button_tooltip_arrow").width
width: childrenRect.width
height: childrenRect.height
target: Qt.point(handleButton.x + handleButton.width / 2, handleButton.y + handleButton.height / 2)
x: handleButton.x + Math.round((handleButton.width - width) / 2)
y: handleButton.y - height - UM.Theme.getSize("button_tooltip_arrow").height - UM.Theme.getSize("narrow_margin").height
color: UM.Theme.getColor("tooltip");
UM.Label
{
text: `${infillSlider.value}%`
horizontalAlignment: TextInput.AlignHCenter
leftPadding: UM.Theme.getSize("narrow_margin").width
rightPadding: UM.Theme.getSize("narrow_margin").width
color: UM.Theme.getColor("tooltip_text");
}
}
Connections
{
target: infillSlider
function onValueChanged()
{
// Work around, the `infillDensity.properties.value` is initially `undefined`. As
// `parseInt(infillDensity.properties.value)` is parsed as 0 and is initially set as
// the slider value. By setting this 0 value an update is triggered setting the actual
// infill value to 0.
if (isNaN(parseInt(infillDensity.properties.value)))
{
return;
}
// Don't update if the setting value, if the slider has the same value
if (parseInt(infillDensity.properties.value) == infillSlider.value)
{
return;
}
// Round the slider value to the nearest multiple of 10 (simulate step size of 10)
const roundedSliderValue = Math.round(infillSlider.value / 10) * 10;
// Update the slider value to represent the rounded value
infillSlider.value = roundedSliderValue;
Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", roundedSliderValue)
Cura.MachineManager.resetSettingForAllExtruders("infill_line_distance")
}
}
}
UM.Label { Layout.fillWidth: false; text: "100" }
}