Merge branch '3.0' of github.com:Ultimaker/Cura into 3.0

Contributes to issue CURA-4357.
This commit is contained in:
Ghostkeeper 2017-09-22 12:58:20 +02:00
commit 2020e355a2
No known key found for this signature in database
GPG key ID: C5F96EE2BC0F7E75
2 changed files with 132 additions and 143 deletions

View file

@ -40,110 +40,108 @@ Item
//
// Quality profile
//
Rectangle
Item
{
Timer {
id: qualitySliderChangeTimer
interval: 50
running: false
repeat: false
onTriggered: Cura.MachineManager.setActiveQuality(Cura.ProfilesModel.getItem(qualityRowSlider.value).id)
}
Component.onCompleted:
{
qualityRow.updateQualitySliderProperties()
}
Connections
{
target: Cura.MachineManager
onActiveQualityChanged:
{
qualityRow.updateQualitySliderProperties()
}
}
id: qualityRow
property var totalTicks: 0
property var availableTotalTicks: 0
property var qualitySliderStep: qualityRow.totalTicks != 0 ? (base.width * 0.55) / (qualityRow.totalTicks) : 0
property var qualitySliderSelectedValue: 0
property var sliderAvailableMin : 0
property var sliderAvailableMax : 0
property var sliderMarginRight : 0
function updateQualitySliderProperties()
{
qualityRow.totalTicks = Cura.ProfilesModel.rowCount() - 1 // minus one, because slider starts from 0
var availableMin = -1
var availableMax = -1
for (var i = 0; i <= Cura.ProfilesModel.rowCount(); i++)
{
//Find slider range, min and max value
if (availableMin == -1 && Cura.ProfilesModel.getItem(i).available)
{
availableMin = i
availableMax = i
}
else if(Cura.ProfilesModel.getItem(i).available)
{
availableMax = i
}
//Find selected value
if(Cura.MachineManager.activeQualityId == Cura.ProfilesModel.getItem(i).id)
{
qualitySliderSelectedValue = i
}
}
if(availableMin !=-1)
{
availableTotalTicks = availableMax - availableMin
}
else
{
availableTotalTicks = -1
}
qualitySliderStep = qualityRow.totalTicks != 0 ? (base.width * 0.55) / (qualityRow.totalTicks) : 0
if(availableMin == -1)
{
sliderMarginRight = base.width * 0.55
}
else if (availableMin == 0 && availableMax == 0)
{
sliderMarginRight = base.width * 0.55
}
else if(availableMin == availableMax)
{
sliderMarginRight = (qualityRow.totalTicks - availableMin) * qualitySliderStep
}
else if(availableMin != availableMax)
{
sliderMarginRight = (qualityRow.totalTicks - availableMax) * qualitySliderStep
}
qualityRow.sliderAvailableMin = availableMin
qualityRow.sliderAvailableMax = availableMax
}
height: UM.Theme.getSize("sidebar_margin").height
anchors.topMargin: UM.Theme.getSize("sidebar_margin").height
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width
anchors.right: parent.right
Timer
{
id: qualitySliderChangeTimer
interval: 50
running: false
repeat: false
onTriggered: Cura.MachineManager.setActiveQuality(Cura.ProfilesModel.getItem(qualitySlider.value).id)
}
Component.onCompleted: qualityModel.update()
Connections
{
target: Cura.MachineManager
onActiveQualityChanged: qualityModel.update()
}
ListModel
{
id: qualityModel
property var totalTicks: 0
property var availableTotalTicks: 0
property var activeQualityId: 0
property var qualitySliderStepWidth: 0
property var qualitySliderAvailableMin : 0
property var qualitySliderAvailableMax : 0
property var qualitySliderMarginRight : 0
function update () {
reset()
var availableMin = -1
var availableMax = -1
for (var i = 0; i <= Cura.ProfilesModel.rowCount(); i++) {
var qualityItem = Cura.ProfilesModel.getItem(i)
// Add each quality item to the UI quality model
qualityModel.append(qualityItem)
// Set selected value
if (Cura.MachineManager.activeQualityId == qualityItem.id) {
qualityModel.activeQualityId = i
}
// Set min available
if (qualityItem.available && availableMin == -1) {
availableMin = i
}
// Set max available
if (qualityItem.available) {
availableMax = i
}
}
// Set total available ticks for active slider part
if (availableMin != -1) {
qualityModel.availableTotalTicks = availableMax - availableMin
}
// Calculate slider values
calculateSliderStepWidth(qualityModel.totalTicks)
calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks)
qualityModel.qualitySliderAvailableMin = availableMin
qualityModel.qualitySliderAvailableMax = availableMax
}
function calculateSliderStepWidth (totalTicks) {
qualityModel.qualitySliderStepWidth = totalTicks != 0 ? (base.width * 0.55) / (totalTicks) : 0
}
function calculateSliderMargins (availableMin, availableMax, totalTicks) {
if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) {
qualityModel.qualitySliderMarginRight = base.width * 0.55
} else if (availableMin == availableMax) {
qualityModel.qualitySliderMarginRight = (totalTicks - availableMin) * qualitySliderStepWidth
} else {
qualityModel.qualitySliderMarginRight = (totalTicks - availableMax) * qualitySliderStepWidth
}
}
function reset () {
qualityModel.clear()
qualityModel.totalTicks = Cura.ProfilesModel.rowCount() - 1 // minus one, because slider starts from 0
qualityModel.availableTotalTicks = -1
}
}
Text
{
id: qualityRowTitle
@ -152,29 +150,32 @@ Item
color: UM.Theme.getColor("text")
}
//Show titles for the each quality slider ticks
// Show titles for the each quality slider ticks
Item
{
y: -5;
anchors.left: speedSlider.left
Repeater
{
model: qualityRow.totalTicks + 1
model: qualityModel
Text
{
anchors.verticalCenter: parent.verticalCenter
anchors.top: parent.top
anchors.topMargin: UM.Theme.getSize("sidebar_margin").height / 2
color: UM.Theme.getColor("text")
color: (Cura.MachineManager.activeMachine != null && Cura.ProfilesModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable")
text: Cura.MachineManager.activeMachine != null ? Cura.ProfilesModel.getItem(index).layer_height_without_unit : ""
width: 1
x:
{
if(index != qualityRow.totalTicks)
return (base.width * 0.55 / qualityRow.totalTicks) * index;
else
return (base.width * 0.55 / qualityRow.totalTicks) * index - 15;
x: {
// Make sure the text aligns correctly with each tick
if (index == 0) {
return (base.width * 0.55 / qualityModel.totalTicks) * index
} else if (index == qualityModel.totalTicks) {
return (base.width * 0.55 / qualityModel.totalTicks) * index - width
} else {
return (base.width * 0.55 / qualityModel.totalTicks) * index - (width / 2)
}
}
}
}
@ -197,8 +198,7 @@ Item
width: base.width * 0.55
height: 2
color: UM.Theme.getColor("quality_slider_unavailable")
//radius: parent.radius
anchors.verticalCenter: qualityRowSlider.verticalCenter
anchors.verticalCenter: qualitySlider.verticalCenter
x: 0
}
@ -206,51 +206,52 @@ Item
Repeater
{
id: qualityRepeater
model: qualityRow.totalTicks + 1
Rectangle {
model: qualityModel
Rectangle
{
anchors.verticalCenter: parent.verticalCenter
color: qualityRow.availableTotalTicks != 0 ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable")
color: Cura.ProfilesModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable")
width: 1
height: 6
y: 0
x: qualityRow.qualitySliderStep * index
x: qualityModel.qualitySliderStepWidth * index
}
}
Slider
{
id: qualityRowSlider
id: qualitySlider
height: UM.Theme.getSize("sidebar_margin").height
anchors.bottom: speedSlider.bottom
enabled: qualityRow.availableTotalTicks != 0
enabled: qualityModel.availableTotalTicks > 0
updateValueWhileDragging : false
minimumValue: qualityRow.sliderAvailableMin
maximumValue: qualityRow.sliderAvailableMax
minimumValue: qualityModel.qualitySliderAvailableMin
maximumValue: qualityModel.qualitySliderAvailableMax
stepSize: 1
value: qualityRow.qualitySliderSelectedValue
value: qualityModel.activeQualityId
width: qualityRow.qualitySliderStep * (qualityRow.availableTotalTicks)
width: qualityModel.qualitySliderStepWidth * qualityModel.availableTotalTicks
anchors.right: parent.right
anchors.rightMargin: qualityRow.sliderMarginRight
anchors.rightMargin: qualityModel.qualitySliderMarginRight
style: SliderStyle
{
//Draw Available line
groove: Rectangle {
implicitHeight: 2
anchors.verticalCenter: qualityRowSlider.verticalCenter
anchors.verticalCenter: qualitySlider.verticalCenter
color: UM.Theme.getColor("quality_slider_available")
radius: 1
}
handle: Item {
Rectangle {
id: qualityhandleButton
anchors.verticalCenter: qualityRowSlider.verticalCenter
anchors.verticalCenter: qualitySlider.verticalCenter
anchors.centerIn: parent
color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable")
implicitWidth: 10
@ -264,7 +265,7 @@ Item
if(Cura.MachineManager.activeMachine != null)
{
//Prevent updating during view initializing. Trigger only if the value changed by user
if(qualityRowSlider.value != qualityRow.qualitySliderSelectedValue)
if(qualitySlider.value != qualityModel.activeQualityId)
{
//start updating with short delay
qualitySliderChangeTimer.start();
@ -521,7 +522,7 @@ Item
Text {
id: gradualInfillLabel
anchors.left: enableGradualInfillCheckBox.right
anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width / 2 // FIXME better margin value
anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width / 2
text: catalog.i18nc("@label", "Enable gradual")
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")