mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-23 22:54:01 -06:00

Contributes to CURA-1278 * settings_rework: (224 commits) Improve slice trigger documentation Import Cura in materials preferences page so we can use the active definition id Add layer height to high quality profile so we have something that changes Update example XML material to use the right product names Filter available materials by the machine definition Show the add machine dialog when we do not have an active machine Create machine-specific material containers for machine specific overrides in XML material files When creating a new container stack, add empty containers for things where we cannot find containers Add preferred variant, material and quality to UM2+ definition Account for global container stack being None in the backend plugin Use the global stack instance variable and account for it potentially being None Store the global container stack as an instance property Added wildcard to filtering Per object settings filter now uses correct bool types (instead of strings) Removed stray = sign. Fix creating print job name Disable asynchronous loading of SettingItem when Qt Version < 5.5 Document QTbug Properly serialise all settings to g-code file Document GCodeWriter class ...
407 lines
15 KiB
QML
407 lines
15 KiB
QML
// Copyright (c) 2015 Ultimaker B.V.
|
|
// Cura is released under the terms of the AGPLv3 or higher.
|
|
|
|
import QtQuick 2.2
|
|
import QtQuick.Controls 1.1
|
|
import QtQuick.Controls.Styles 1.1
|
|
import QtQuick.Layouts 1.1
|
|
|
|
import UM 1.2 as UM
|
|
import Cura 1.0 as Cura
|
|
|
|
Item
|
|
{
|
|
id: base;
|
|
|
|
signal showTooltip(Item item, point location, string text);
|
|
signal hideTooltip();
|
|
|
|
property Action configureSettings;
|
|
property variant minimumPrintTime: PrintInformation.minimumPrintTime;
|
|
property variant maximumPrintTime: PrintInformation.maximumPrintTime;
|
|
|
|
Component.onCompleted: PrintInformation.enabled = true
|
|
Component.onDestruction: PrintInformation.enabled = false
|
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
|
|
|
Rectangle{
|
|
id: infillCellLeft
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
width: base.width/100* 35 - UM.Theme.getSize("default_margin").width
|
|
height: childrenRect.height
|
|
|
|
Label{
|
|
id: infillLabel
|
|
//: Infill selection label
|
|
text: catalog.i18nc("@label","Infill:");
|
|
font: UM.Theme.getFont("default");
|
|
color: UM.Theme.getColor("text");
|
|
anchors.top: parent.top
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
}
|
|
}
|
|
|
|
Flow {
|
|
id: infillCellRight
|
|
|
|
height: childrenRect.height;
|
|
width: base.width / 100 * 65
|
|
spacing: UM.Theme.getSize("default_margin").width
|
|
|
|
anchors.left: infillCellLeft.right
|
|
anchors.top: infillCellLeft.top
|
|
|
|
Repeater {
|
|
id: infillListView
|
|
property int activeIndex: {
|
|
var density = parseInt(infillDensity.properties.value)
|
|
for(var i = 0; i < infillModel.count; ++i)
|
|
{
|
|
if(density > infillModel.get(i).percentageMin && density <= infillModel.get(i).percentageMax )
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
model: infillModel;
|
|
|
|
Item {
|
|
width: childrenRect.width;
|
|
height: childrenRect.height;
|
|
|
|
Rectangle{
|
|
id: infillIconLining
|
|
|
|
width: (infillCellRight.width - 3 * UM.Theme.getSize("default_margin").width) / 4;
|
|
height: width
|
|
|
|
border.color: {
|
|
if(infillListView.activeIndex == index)
|
|
{
|
|
return UM.Theme.getColor("setting_control_selected")
|
|
}
|
|
else if(mousearea.containsMouse)
|
|
{
|
|
return UM.Theme.getColor("setting_control_border_highlight")
|
|
}
|
|
return UM.Theme.getColor("setting_control_border")
|
|
}
|
|
border.width: UM.Theme.getSize("default_lining").width
|
|
color: infillListView.activeIndex == index ? UM.Theme.getColor("setting_control_selected") : "transparent"
|
|
|
|
UM.RecolorImage {
|
|
id: infillIcon
|
|
anchors.fill: parent;
|
|
anchors.margins: UM.Theme.getSize("infill_button_margin").width
|
|
|
|
sourceSize.width: width
|
|
sourceSize.height: width
|
|
source: UM.Theme.getIcon(model.icon);
|
|
color: (infillListView.activeIndex == index) ? UM.Theme.getColor("text_white") : UM.Theme.getColor("text")
|
|
}
|
|
|
|
MouseArea {
|
|
id: mousearea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
onClicked: {
|
|
if (infillListView.activeIndex != index)
|
|
{
|
|
infillDensity.setPropertyValue("value", model.percentage)
|
|
}
|
|
}
|
|
onEntered: {
|
|
base.showTooltip(infillCellRight, Qt.point(-infillCellRight.x, 0), model.text);
|
|
}
|
|
onExited: {
|
|
base.hideTooltip();
|
|
}
|
|
}
|
|
}
|
|
Label{
|
|
id: infillLabel
|
|
anchors.top: infillIconLining.bottom
|
|
anchors.horizontalCenter: infillIconLining.horizontalCenter
|
|
color: infillListView.activeIndex == index ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_border")
|
|
text: name
|
|
}
|
|
}
|
|
}
|
|
|
|
ListModel {
|
|
id: infillModel
|
|
|
|
Component.onCompleted:
|
|
{
|
|
infillModel.append({
|
|
name: catalog.i18nc("@label", "Hollow"),
|
|
percentage: 0,
|
|
percentageMin: -1,
|
|
percentageMax: 0,
|
|
text: catalog.i18nc("@label", "No (0%) infill will leave your model hollow at the cost of low strength"),
|
|
icon: "hollow"
|
|
})
|
|
infillModel.append({
|
|
name: catalog.i18nc("@label", "Light"),
|
|
percentage: 20,
|
|
percentageMin: 0,
|
|
percentageMax: 30,
|
|
text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength"),
|
|
icon: "sparse"
|
|
})
|
|
infillModel.append({
|
|
name: catalog.i18nc("@label", "Dense"),
|
|
percentage: 50,
|
|
percentageMin: 30,
|
|
percentageMax: 70,
|
|
text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength"),
|
|
icon: "dense"
|
|
})
|
|
infillModel.append({
|
|
name: catalog.i18nc("@label", "Solid"),
|
|
percentage: 100,
|
|
percentageMin: 70,
|
|
percentageMax: 100,
|
|
text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid"),
|
|
icon: "solid"
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: helpersCellLeft
|
|
anchors.top: infillCellRight.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: parent.left
|
|
width: parent.width/100*35 - UM.Theme.getSize("default_margin").width
|
|
height: childrenRect.height
|
|
|
|
Label{
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
//: Helpers selection label
|
|
text: catalog.i18nc("@label:listbox","Helpers:");
|
|
font: UM.Theme.getFont("default");
|
|
color: UM.Theme.getColor("text");
|
|
}
|
|
}
|
|
Rectangle {
|
|
id: helpersCellRight
|
|
anchors.top: helpersCellLeft.top
|
|
anchors.left: helpersCellLeft.right
|
|
width: parent.width/100*65 - UM.Theme.getSize("default_margin").width
|
|
height: childrenRect.height
|
|
|
|
CheckBox{
|
|
id: brimCheckBox
|
|
property bool hovered_ex: false
|
|
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
|
|
//: Setting enable skirt adhesion checkbox
|
|
text: catalog.i18nc("@option:check","Generate Brim");
|
|
style: UM.Theme.styles.checkbox;
|
|
|
|
checked: platformAdhesionType.properties.value == "brim"
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
onClicked:
|
|
{
|
|
platformAdhesionType.setPropertyValue("value", !parent.checked ? "brim" : "skirt")
|
|
}
|
|
onEntered:
|
|
{
|
|
parent.hovered_ex = true
|
|
base.showTooltip(brimCheckBox, Qt.point(-helpersCellRight.x, 0),
|
|
catalog.i18nc("@label", "Enable printing a brim. This will add a single-layer-thick flat area around your object which is easy to cut off afterwards."));
|
|
}
|
|
onExited:
|
|
{
|
|
parent.hovered_ex = false
|
|
base.hideTooltip();
|
|
}
|
|
}
|
|
}
|
|
CheckBox{
|
|
id: supportCheckBox
|
|
property bool hovered_ex: false
|
|
|
|
anchors.top: brimCheckBox.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: parent.left
|
|
|
|
//: Setting enable support checkbox
|
|
text: catalog.i18nc("@option:check","Generate Support Structure");
|
|
style: UM.Theme.styles.checkbox;
|
|
|
|
checked: supportEnabled.properties.value == "True"
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
onClicked:
|
|
{
|
|
supportEnabled.setPropertyValue("value", !parent.checked)
|
|
}
|
|
onEntered:
|
|
{
|
|
parent.hovered_ex = true
|
|
base.showTooltip(supportCheckBox, Qt.point(-helpersCellRight.x, 0),
|
|
catalog.i18nc("@label", "Enable printing support structures. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air."));
|
|
}
|
|
onExited:
|
|
{
|
|
parent.hovered_ex = false
|
|
base.hideTooltip();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function populateExtruderModel()
|
|
{
|
|
// extruderModel.clear()
|
|
// var extruder_count = UM.MachineManager.getSettingValue("machine_extruder_count");
|
|
// for(var extruder = 0; extruder < extruder_count ; extruder++) {
|
|
// extruderModel.append({
|
|
// name: catalog.i18nc("@label", "Extruder %1").arg(extruder),
|
|
// text: catalog.i18nc("@label", "Extruder %1").arg(extruder),
|
|
// value: extruder
|
|
// })
|
|
// }
|
|
}
|
|
|
|
Rectangle {
|
|
id: multiExtrusionCell
|
|
anchors.top: helpersCellRight.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: parent.left
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
// Use both UM.ActiveProfile and UM.MachineManager to force UM.MachineManager.getSettingValue() to be reevaluated
|
|
// visible: UM.ActiveProfile.settingValues.getValue("machine_extruder_count") || (UM.MachineManager.getSettingValue("machine_extruder_count") > 1)
|
|
|
|
Label {
|
|
id: mainExtruderLabel
|
|
text: catalog.i18nc("@label:listbox","Print object with:")
|
|
font: UM.Theme.getFont("default")
|
|
color: UM.Theme.getColor("text")
|
|
width: base.width/100* 35 - 2*UM.Theme.getSize("default_margin").width
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
anchors.verticalCenter: mainExtruderCombobox.verticalCenter
|
|
}
|
|
ComboBox {
|
|
id: mainExtruderCombobox
|
|
model: extruderModel
|
|
anchors.top: parent.top
|
|
anchors.left: supportExtruderLabel.right
|
|
style: UM.Theme.styles.combobox
|
|
// currentIndex: UM.ActiveProfile.valid ? UM.ActiveProfile.settingValues.getValue("extruder_nr") : 0
|
|
onActivated: {
|
|
// UM.MachineManager.setSettingValue("extruder_nr", index)
|
|
}
|
|
}
|
|
|
|
Label {
|
|
id: supportExtruderLabel
|
|
visible: supportCheckBox.checked
|
|
text: catalog.i18nc("@label:listbox","Print support with:")
|
|
font: UM.Theme.getFont("default")
|
|
color: UM.Theme.getColor("text")
|
|
width: base.width/100* 35 - 2*UM.Theme.getSize("default_margin").width
|
|
height: visible ? mainExtruderLabel.height : 0
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
anchors.verticalCenter: supportExtruderCombobox.verticalCenter
|
|
}
|
|
ComboBox {
|
|
id: supportExtruderCombobox
|
|
visible: supportCheckBox.checked
|
|
model: extruderModel
|
|
height: visible ? mainExtruderCombobox.height : 0
|
|
anchors.top: mainExtruderCombobox.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: supportExtruderLabel.right
|
|
style: UM.Theme.styles.combobox
|
|
// currentIndex: UM.ActiveProfile.valid ? UM.ActiveProfile.settingValues.getValue("support_extruder_nr") : 0
|
|
onActivated: {
|
|
UM.MachineManager.setSettingValue("support_extruder_nr", index)
|
|
}
|
|
}
|
|
|
|
ListModel {
|
|
id: extruderModel
|
|
Component.onCompleted: populateExtruderModel()
|
|
}
|
|
// Connections
|
|
// {
|
|
// id: machineChange
|
|
// target: UM.MachineManager
|
|
// onActiveMachineInstanceChanged: populateExtruderModel()
|
|
// }
|
|
}
|
|
|
|
Rectangle {
|
|
id: tipsCell
|
|
anchors.top: multiExtrusionCell.visible? multiExtrusionCell.bottom : helpersCellRight.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
anchors.left: parent.left
|
|
width: parent.width
|
|
height: childrenRect.height
|
|
|
|
Label{
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
|
wrapMode: Text.WordWrap
|
|
//: Tips label
|
|
text: catalog.i18nc("@label","Need help improving your prints? Read the <a href='%1'>Ultimaker Troubleshooting Guides</a>").arg("https://ultimaker.com/en/troubleshooting");
|
|
font: UM.Theme.getFont("default");
|
|
color: UM.Theme.getColor("text");
|
|
linkColor: UM.Theme.getColor("text_link")
|
|
onLinkActivated: Qt.openUrlExternally(link)
|
|
}
|
|
}
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: infillDensity
|
|
|
|
containerStackId: Cura.MachineManager.activeMachineId
|
|
key: "infill_sparse_density"
|
|
watchedProperties: [ "value" ]
|
|
storeIndex: 0
|
|
|
|
onPropertiesChanged: console.log(properties.value)
|
|
}
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: platformAdhesionType
|
|
|
|
containerStackId: Cura.MachineManager.activeMachineId
|
|
key: "adhesion_type"
|
|
watchedProperties: [ "value" ]
|
|
storeIndex: 0
|
|
}
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: supportEnabled
|
|
|
|
containerStackId: Cura.MachineManager.activeMachineId
|
|
key: "support_enable"
|
|
watchedProperties: [ "value" ]
|
|
storeIndex: 0
|
|
}
|
|
}
|