Place InfillSlider in sperate file

CURA-9793
This commit is contained in:
c.lamboo 2022-11-29 10:32:47 +01:00
parent d9a2a3f5b7
commit 261adf06e7
2 changed files with 117 additions and 132 deletions

View file

@ -0,0 +1,116 @@
// 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
}
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" }
}