123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866 |
- // Copyright (c) 2016 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.Layouts 1.1
- import QtQuick.Window 2.1
- import UM 1.2 as UM
- import Cura 1.0 as Cura
- Cura.MachineAction
- {
- id: base
- property var extrudersModel: Cura.ExtrudersModel{}
- property int extruderTabsCount: 0
- Component.onCompleted:
- {
- // Populate extruder tabs after a short delay, because otherwise the tabs that are added when
- // the dialog is created are stuck.
- extruderTabsCountDelay.start();
- }
- Timer
- {
- id: extruderTabsCountDelay
- repeat: false
- interval: 1
- onTriggered: base.extruderTabsCount = (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0
- }
- Connections
- {
- target: dialog ? dialog : null
- ignoreUnknownSignals: true
- // Any which way this action dialog is dismissed, make sure it is properly finished
- onNextClicked: manager.onFinishAction()
- onBackClicked: manager.onFinishAction()
- onAccepted: manager.onFinishAction()
- onRejected: manager.onFinishAction()
- onClosing: manager.onFinishAction()
- }
- anchors.fill: parent;
- Item
- {
- id: bedLevelMachineAction
- anchors.fill: parent;
- UM.I18nCatalog { id: catalog; name: "cura"; }
- Label
- {
- id: pageTitle
- width: parent.width
- text: catalog.i18nc("@title", "Machine Settings")
- wrapMode: Text.WordWrap
- font.pointSize: 18;
- }
- TabView
- {
- id: settingsTabs
- height: parent.height - y
- width: parent.width
- anchors.left: parent.left
- anchors.top: pageTitle.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
- property real columnWidth: Math.floor((width - 3 * UM.Theme.getSize("default_margin").width) / 2)
- Tab
- {
- title: catalog.i18nc("@title:tab", "Printer");
- anchors.margins: UM.Theme.getSize("default_margin").width
- Column
- {
- spacing: UM.Theme.getSize("default_margin").height
- Row
- {
- width: parent.width
- spacing: UM.Theme.getSize("default_margin").height
- Column
- {
- width: settingsTabs.columnWidth
- spacing: UM.Theme.getSize("default_margin").height
- Label
- {
- text: catalog.i18nc("@label", "Printer Settings")
- font.bold: true
- }
- Grid
- {
- columns: 2
- columnSpacing: UM.Theme.getSize("default_margin").width
- rowSpacing: UM.Theme.getSize("default_lining").width
- Label
- {
- text: catalog.i18nc("@label", "X (Width)")
- }
- Loader
- {
- id: buildAreaWidthField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: machineWidthProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: true
- }
- Label
- {
- text: catalog.i18nc("@label", "Y (Depth)")
- }
- Loader
- {
- id: buildAreaDepthField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: machineDepthProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: true
- }
- Label
- {
- text: catalog.i18nc("@label", "Z (Height)")
- }
- Loader
- {
- id: buildAreaHeightField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: machineHeightProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: true
- }
- }
- Column
- {
- Row
- {
- spacing: UM.Theme.getSize("default_margin").width
- Label
- {
- text: catalog.i18nc("@label", "Build Plate Shape")
- }
- ComboBox
- {
- id: shapeComboBox
- model: ListModel
- {
- id: shapesModel
- Component.onCompleted:
- {
- // Options come in as a string-representation of an OrderedDict
- var options = machineShapeProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/);
- if(options)
- {
- options = options[1].split("), (")
- for(var i = 0; i < options.length; i++)
- {
- var option = options[i].substring(1, options[i].length - 1).split("', '")
- shapesModel.append({text: option[1], value: option[0]});
- }
- }
- }
- }
- currentIndex:
- {
- var currentValue = machineShapeProvider.properties.value;
- var index = 0;
- for(var i = 0; i < shapesModel.count; i++)
- {
- if(shapesModel.get(i).value == currentValue) {
- index = i;
- break;
- }
- }
- return index
- }
- onActivated:
- {
- if(machineShapeProvider.properties.value != shapesModel.get(index).value)
- {
- machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value);
- manager.forceUpdate();
- }
- }
- }
- }
- CheckBox
- {
- id: centerIsZeroCheckBox
- text: catalog.i18nc("@option:check", "Machine Center is Zero")
- checked: String(machineCenterIsZeroProvider.properties.value).toLowerCase() != 'false'
- onClicked:
- {
- machineCenterIsZeroProvider.setPropertyValue("value", checked);
- manager.forceUpdate();
- }
- }
- CheckBox
- {
- id: heatedBedCheckBox
- text: catalog.i18nc("@option:check", "Heated Bed")
- checked: String(machineHeatedBedProvider.properties.value).toLowerCase() != 'false'
- onClicked: machineHeatedBedProvider.setPropertyValue("value", checked)
- }
- }
- Row
- {
- spacing: UM.Theme.getSize("default_margin").width
- Label
- {
- text: catalog.i18nc("@label", "GCode Flavor")
- }
- ComboBox
- {
- model: ListModel
- {
- id: flavorModel
- Component.onCompleted:
- {
- // Options come in as a string-representation of an OrderedDict
- var options = machineGCodeFlavorProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/);
- if(options)
- {
- options = options[1].split("), (")
- for(var i = 0; i < options.length; i++)
- {
- var option = options[i].substring(1, options[i].length - 1).split("', '")
- flavorModel.append({text: option[1], value: option[0]});
- }
- }
- }
- }
- currentIndex:
- {
- var currentValue = machineGCodeFlavorProvider.properties.value;
- var index = 0;
- for(var i = 0; i < flavorModel.count; i++)
- {
- if(flavorModel.get(i).value == currentValue) {
- index = i;
- break;
- }
- }
- return index
- }
- onActivated:
- {
- machineGCodeFlavorProvider.setPropertyValue("value", flavorModel.get(index).value);
- manager.updateHasMaterialsMetadata();
- }
- }
- }
- }
- Column
- {
- width: settingsTabs.columnWidth
- spacing: UM.Theme.getSize("default_margin").height
- Label
- {
- text: catalog.i18nc("@label", "Printhead Settings")
- font.bold: true
- }
- Grid
- {
- columns: 2
- columnSpacing: UM.Theme.getSize("default_margin").width
- rowSpacing: UM.Theme.getSize("default_lining").width
- Label
- {
- text: catalog.i18nc("@label", "X min")
- }
- TextField
- {
- id: printheadXMinField
- text: getHeadPolygonCoord("x", "min")
- validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
- onEditingFinished: setHeadPolygon()
- }
- Label
- {
- text: catalog.i18nc("@label", "Y min")
- }
- TextField
- {
- id: printheadYMinField
- text: getHeadPolygonCoord("y", "min")
- validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
- onEditingFinished: setHeadPolygon()
- }
- Label
- {
- text: catalog.i18nc("@label", "X max")
- }
- TextField
- {
- id: printheadXMaxField
- text: getHeadPolygonCoord("x", "max")
- validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
- onEditingFinished: setHeadPolygon()
- }
- Label
- {
- text: catalog.i18nc("@label", "Y max")
- }
- TextField
- {
- id: printheadYMaxField
- text: getHeadPolygonCoord("y", "max")
- validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
- onEditingFinished: setHeadPolygon()
- }
- Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
- Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
- Label
- {
- text: catalog.i18nc("@label", "Gantry height")
- }
- Loader
- {
- id: gantryHeightField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: gantryHeightProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: false
- }
- Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
- Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
- Label
- {
- text: catalog.i18nc("@label", "Number of Extruders")
- visible: extruderCountComboBox.visible
- }
- ComboBox
- {
- id: extruderCountComboBox
- visible: manager.definedExtruderCount > 1
- model: ListModel
- {
- id: extruderCountModel
- Component.onCompleted:
- {
- for(var i = 0; i < manager.definedExtruderCount; i++)
- {
- extruderCountModel.append({text: String(i + 1), value: i});
- }
- }
- }
- currentIndex: machineExtruderCountProvider.properties.value - 1
- onActivated:
- {
- manager.setMachineExtruderCount(index + 1);
- base.extruderTabsCount = (index > 0) ? index + 1 : 0;
- }
- }
- Label
- {
- text: catalog.i18nc("@label", "Nozzle size")
- visible: nozzleSizeField.visible
- }
- Loader
- {
- id: nozzleSizeField
- visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: machineNozzleSizeProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: false
- }
- }
- }
- }
- Row
- {
- spacing: UM.Theme.getSize("default_margin").width
- anchors.left: parent.left
- anchors.right: parent.right
- height: parent.height - y
- Column
- {
- height: parent.height
- width: settingsTabs.columnWidth
- Label
- {
- text: catalog.i18nc("@label", "Start Gcode")
- font.bold: true
- }
- TextArea
- {
- id: machineStartGcodeField
- width: parent.width
- height: parent.height - y
- font: UM.Theme.getFont("fixed")
- text: machineStartGcodeProvider.properties.value
- onActiveFocusChanged:
- {
- if(!activeFocus)
- {
- machineStartGcodeProvider.setPropertyValue("value", machineStartGcodeField.text)
- }
- }
- Component.onCompleted:
- {
- wrapMode = TextEdit.NoWrap;
- }
- }
- }
- Column {
- height: parent.height
- width: settingsTabs.columnWidth
- Label
- {
- text: catalog.i18nc("@label", "End Gcode")
- font.bold: true
- }
- TextArea
- {
- id: machineEndGcodeField
- width: parent.width
- height: parent.height - y
- font: UM.Theme.getFont("fixed")
- text: machineEndGcodeProvider.properties.value
- onActiveFocusChanged:
- {
- if(!activeFocus)
- {
- machineEndGcodeProvider.setPropertyValue("value", machineEndGcodeField.text)
- }
- }
- Component.onCompleted:
- {
- wrapMode = TextEdit.NoWrap;
- }
- }
- }
- }
- function getHeadPolygonCoord(axis, minMax)
- {
- var polygon = JSON.parse(machineHeadPolygonProvider.properties.value);
- var item = (axis == "x") ? 0 : 1
- var result = polygon[0][item];
- for(var i = 1; i < polygon.length; i++) {
- if (minMax == "min") {
- result = Math.min(result, polygon[i][item]);
- } else {
- result = Math.max(result, polygon[i][item]);
- }
- }
- return Math.abs(result);
- }
- function setHeadPolygon()
- {
- var polygon = [];
- polygon.push([-parseFloat(printheadXMinField.text), parseFloat(printheadYMaxField.text)]);
- polygon.push([-parseFloat(printheadXMinField.text),-parseFloat(printheadYMinField.text)]);
- polygon.push([ parseFloat(printheadXMaxField.text), parseFloat(printheadYMaxField.text)]);
- polygon.push([ parseFloat(printheadXMaxField.text),-parseFloat(printheadYMinField.text)]);
- var polygon_string = JSON.stringify(polygon);
- if(polygon != machineHeadPolygonProvider.properties.value)
- {
- machineHeadPolygonProvider.setPropertyValue("value", polygon_string);
- manager.forceUpdate();
- }
- }
- }
- }
- onCurrentIndexChanged:
- {
- if(currentIndex > 0)
- {
- contentItem.forceActiveFocus();
- ExtruderManager.setActiveExtruderIndex(currentIndex - 1);
- }
- }
- Repeater
- {
- id: extruderTabsRepeater
- model: base.extruderTabsCount
- Tab
- {
- title: base.extrudersModel.getItem(index).name
- anchors.margins: UM.Theme.getSize("default_margin").width
- Column
- {
- spacing: UM.Theme.getSize("default_margin").width
- Label
- {
- text: catalog.i18nc("@label", "Nozzle Settings")
- font.bold: true
- }
- Grid
- {
- columns: 2
- columnSpacing: UM.Theme.getSize("default_margin").width
- rowSpacing: UM.Theme.getSize("default_lining").width
- Label
- {
- text: catalog.i18nc("@label", "Nozzle size")
- visible: extruderNozzleSizeField.visible
- }
- Loader
- {
- id: extruderNozzleSizeField
- visible: !Cura.MachineManager.hasVariants
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: extruderNozzleSizeProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: false
- }
- Label
- {
- text: catalog.i18nc("@label", "Nozzle offset X")
- }
- Loader
- {
- id: extruderOffsetXField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: extruderOffsetXProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: true
- }
- Label
- {
- text: catalog.i18nc("@label", "Nozzle offset Y")
- }
- Loader
- {
- id: extruderOffsetYField
- sourceComponent: numericTextFieldWithUnit
- property var propertyProvider: extruderOffsetYProvider
- property string unit: catalog.i18nc("@label", "mm")
- property bool forceUpdateOnChange: true
- }
- }
- Row
- {
- spacing: UM.Theme.getSize("default_margin").width
- anchors.left: parent.left
- anchors.right: parent.right
- height: parent.height - y
- Column
- {
- height: parent.height
- width: settingsTabs.columnWidth
- Label
- {
- text: catalog.i18nc("@label", "Extruder Start Gcode")
- font.bold: true
- }
- TextArea
- {
- id: extruderStartGcodeField
- width: parent.width
- height: parent.height - y
- font: UM.Theme.getFont("fixed")
- text: (extruderStartGcodeProvider.properties.value) ? extruderStartGcodeProvider.properties.value : ""
- onActiveFocusChanged:
- {
- if(!activeFocus)
- {
- extruderStartGcodeProvider.setPropertyValue("value", extruderStartGcodeField.text)
- }
- }
- Component.onCompleted:
- {
- wrapMode = TextEdit.NoWrap;
- }
- }
- }
- Column {
- height: parent.height
- width: settingsTabs.columnWidth
- Label
- {
- text: catalog.i18nc("@label", "Extruder End Gcode")
- font.bold: true
- }
- TextArea
- {
- id: extruderEndGcodeField
- width: parent.width
- height: parent.height - y
- font: UM.Theme.getFont("fixed")
- text: (extruderEndGcodeProvider.properties.value) ? extruderEndGcodeProvider.properties.value : ""
- onActiveFocusChanged:
- {
- if(!activeFocus)
- {
- extruderEndGcodeProvider.setPropertyValue("value", extruderEndGcodeField.text)
- }
- }
- Component.onCompleted:
- {
- wrapMode = TextEdit.NoWrap;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- Component
- {
- id: numericTextFieldWithUnit
- Item {
- height: textField.height
- width: textField.width
- TextField
- {
- id: textField
- text: (propertyProvider.properties.value) ? propertyProvider.properties.value : ""
- validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
- onEditingFinished:
- {
- if (propertyProvider && text != propertyProvider.properties.value)
- {
- propertyProvider.setPropertyValue("value", text);
- if(forceUpdateOnChange)
- {
- var extruderIndex = ExtruderManager.activeExtruderIndex;
- manager.forceUpdate();
- if(ExtruderManager.activeExtruderIndex != extruderIndex)
- {
- ExtruderManager.setActiveExtruderIndex(extruderIndex)
- }
- }
- }
- }
- }
- Label
- {
- text: unit
- anchors.right: textField.right
- anchors.rightMargin: y - textField.y
- anchors.verticalCenter: textField.verticalCenter
- }
- }
- }
- UM.SettingPropertyProvider
- {
- id: machineWidthProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_width"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineDepthProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_depth"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineHeightProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_height"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineShapeProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_shape"
- watchedProperties: [ "value", "options" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineHeatedBedProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_heated_bed"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineCenterIsZeroProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_center_is_zero"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineGCodeFlavorProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_gcode_flavor"
- watchedProperties: [ "value", "options" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineNozzleSizeProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_nozzle_size"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineExtruderCountProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_extruder_count"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: gantryHeightProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "gantry_height"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineHeadPolygonProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_head_with_fans_polygon"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineStartGcodeProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_start_gcode"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: machineEndGcodeProvider
- containerStackId: Cura.MachineManager.activeMachineId
- key: "machine_end_gcode"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: extruderNozzleSizeProvider
- containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
- key: "machine_nozzle_size"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: extruderOffsetXProvider
- containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
- key: "machine_nozzle_offset_x"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: extruderOffsetYProvider
- containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
- key: "machine_nozzle_offset_y"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: extruderStartGcodeProvider
- containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
- key: "machine_extruder_start_code"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- UM.SettingPropertyProvider
- {
- id: extruderEndGcodeProvider
- containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
- key: "machine_extruder_end_code"
- watchedProperties: [ "value" ]
- storeIndex: manager.containerIndex
- }
- }
|