MachineSettingsAction.qml 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887
  1. // Copyright (c) 2016 Ultimaker B.V.
  2. // Cura is released under the terms of the AGPLv3 or higher.
  3. import QtQuick 2.2
  4. import QtQuick.Controls 1.1
  5. import QtQuick.Layouts 1.1
  6. import QtQuick.Window 2.1
  7. import UM 1.2 as UM
  8. import Cura 1.0 as Cura
  9. Cura.MachineAction
  10. {
  11. id: base
  12. property var extrudersModel: Cura.ExtrudersModel{}
  13. property int extruderTabsCount: 0
  14. Component.onCompleted:
  15. {
  16. // Populate extruder tabs after a short delay, because otherwise the tabs that are added when
  17. // the dialog is created are stuck.
  18. extruderTabsCountDelay.start();
  19. }
  20. Timer
  21. {
  22. id: extruderTabsCountDelay
  23. repeat: false
  24. interval: 1
  25. onTriggered: base.extruderTabsCount = (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0
  26. }
  27. Connections
  28. {
  29. target: dialog ? dialog : null
  30. ignoreUnknownSignals: true
  31. // Any which way this action dialog is dismissed, make sure it is properly finished
  32. onNextClicked: manager.onFinishAction()
  33. onBackClicked: manager.onFinishAction()
  34. onAccepted: manager.onFinishAction()
  35. onRejected: manager.onFinishAction()
  36. onClosing: manager.onFinishAction()
  37. }
  38. anchors.fill: parent;
  39. Item
  40. {
  41. id: bedLevelMachineAction
  42. anchors.fill: parent;
  43. UM.I18nCatalog { id: catalog; name: "cura"; }
  44. Label
  45. {
  46. id: pageTitle
  47. width: parent.width
  48. text: catalog.i18nc("@title", "Machine Settings")
  49. wrapMode: Text.WordWrap
  50. font.pointSize: 18;
  51. }
  52. TabView
  53. {
  54. id: settingsTabs
  55. height: parent.height - y
  56. width: parent.width
  57. anchors.left: parent.left
  58. anchors.top: pageTitle.bottom
  59. anchors.topMargin: UM.Theme.getSize("default_margin").height
  60. property real columnWidth: Math.floor((width - 3 * UM.Theme.getSize("default_margin").width) / 2)
  61. Tab
  62. {
  63. title: catalog.i18nc("@title:tab", "Printer");
  64. anchors.margins: UM.Theme.getSize("default_margin").width
  65. Column
  66. {
  67. spacing: UM.Theme.getSize("default_margin").height
  68. Row
  69. {
  70. width: parent.width
  71. spacing: UM.Theme.getSize("default_margin").height
  72. Column
  73. {
  74. width: settingsTabs.columnWidth
  75. spacing: UM.Theme.getSize("default_margin").height
  76. Label
  77. {
  78. text: catalog.i18nc("@label", "Printer Settings")
  79. font.bold: true
  80. }
  81. Grid
  82. {
  83. columns: 2
  84. columnSpacing: UM.Theme.getSize("default_margin").width
  85. rowSpacing: UM.Theme.getSize("default_lining").width
  86. Label
  87. {
  88. text: catalog.i18nc("@label", "X (Width)")
  89. }
  90. Loader
  91. {
  92. id: buildAreaWidthField
  93. sourceComponent: numericTextFieldWithUnit
  94. property var propertyProvider: machineWidthProvider
  95. property string unit: catalog.i18nc("@label", "mm")
  96. property bool forceUpdateOnChange: true
  97. }
  98. Label
  99. {
  100. text: catalog.i18nc("@label", "Y (Depth)")
  101. }
  102. Loader
  103. {
  104. id: buildAreaDepthField
  105. sourceComponent: numericTextFieldWithUnit
  106. property var propertyProvider: machineDepthProvider
  107. property string unit: catalog.i18nc("@label", "mm")
  108. property bool forceUpdateOnChange: true
  109. }
  110. Label
  111. {
  112. text: catalog.i18nc("@label", "Z (Height)")
  113. }
  114. Loader
  115. {
  116. id: buildAreaHeightField
  117. sourceComponent: numericTextFieldWithUnit
  118. property var propertyProvider: machineHeightProvider
  119. property string unit: catalog.i18nc("@label", "mm")
  120. property bool forceUpdateOnChange: true
  121. }
  122. }
  123. Column
  124. {
  125. Row
  126. {
  127. spacing: UM.Theme.getSize("default_margin").width
  128. Label
  129. {
  130. text: catalog.i18nc("@label", "Build Plate Shape")
  131. }
  132. ComboBox
  133. {
  134. id: shapeComboBox
  135. model: ListModel
  136. {
  137. id: shapesModel
  138. Component.onCompleted:
  139. {
  140. // Options come in as a string-representation of an OrderedDict
  141. var options = machineShapeProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/);
  142. if(options)
  143. {
  144. options = options[1].split("), (")
  145. for(var i = 0; i < options.length; i++)
  146. {
  147. var option = options[i].substring(1, options[i].length - 1).split("', '")
  148. shapesModel.append({text: option[1], value: option[0]});
  149. }
  150. }
  151. }
  152. }
  153. currentIndex:
  154. {
  155. var currentValue = machineShapeProvider.properties.value;
  156. var index = 0;
  157. for(var i = 0; i < shapesModel.count; i++)
  158. {
  159. if(shapesModel.get(i).value == currentValue) {
  160. index = i;
  161. break;
  162. }
  163. }
  164. return index
  165. }
  166. onActivated:
  167. {
  168. if(machineShapeProvider.properties.value != shapesModel.get(index).value)
  169. {
  170. machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value);
  171. manager.forceUpdate();
  172. }
  173. }
  174. }
  175. }
  176. CheckBox
  177. {
  178. id: centerIsZeroCheckBox
  179. text: catalog.i18nc("@option:check", "Machine Center is Zero")
  180. checked: String(machineCenterIsZeroProvider.properties.value).toLowerCase() != 'false'
  181. onClicked:
  182. {
  183. machineCenterIsZeroProvider.setPropertyValue("value", checked);
  184. manager.forceUpdate();
  185. }
  186. }
  187. CheckBox
  188. {
  189. id: heatedBedCheckBox
  190. text: catalog.i18nc("@option:check", "Heated Bed")
  191. checked: String(machineHeatedBedProvider.properties.value).toLowerCase() != 'false'
  192. onClicked: machineHeatedBedProvider.setPropertyValue("value", checked)
  193. }
  194. }
  195. Row
  196. {
  197. spacing: UM.Theme.getSize("default_margin").width
  198. Label
  199. {
  200. text: catalog.i18nc("@label", "GCode Flavor")
  201. }
  202. ComboBox
  203. {
  204. model: ListModel
  205. {
  206. id: flavorModel
  207. Component.onCompleted:
  208. {
  209. // Options come in as a string-representation of an OrderedDict
  210. var options = machineGCodeFlavorProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/);
  211. if(options)
  212. {
  213. options = options[1].split("), (")
  214. for(var i = 0; i < options.length; i++)
  215. {
  216. var option = options[i].substring(1, options[i].length - 1).split("', '")
  217. flavorModel.append({text: option[1], value: option[0]});
  218. }
  219. }
  220. }
  221. }
  222. currentIndex:
  223. {
  224. var currentValue = machineGCodeFlavorProvider.properties.value;
  225. var index = 0;
  226. for(var i = 0; i < flavorModel.count; i++)
  227. {
  228. if(flavorModel.get(i).value == currentValue) {
  229. index = i;
  230. break;
  231. }
  232. }
  233. return index
  234. }
  235. onActivated:
  236. {
  237. machineGCodeFlavorProvider.setPropertyValue("value", flavorModel.get(index).value);
  238. manager.updateHasMaterialsMetadata();
  239. }
  240. }
  241. }
  242. }
  243. Column
  244. {
  245. width: settingsTabs.columnWidth
  246. spacing: UM.Theme.getSize("default_margin").height
  247. Label
  248. {
  249. text: catalog.i18nc("@label", "Printhead Settings")
  250. font.bold: true
  251. }
  252. Grid
  253. {
  254. columns: 2
  255. columnSpacing: UM.Theme.getSize("default_margin").width
  256. rowSpacing: UM.Theme.getSize("default_lining").width
  257. Label
  258. {
  259. text: catalog.i18nc("@label", "X min")
  260. }
  261. TextField
  262. {
  263. id: printheadXMinField
  264. text: getHeadPolygonCoord("x", "min")
  265. validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
  266. onEditingFinished: setHeadPolygon()
  267. }
  268. Label
  269. {
  270. text: catalog.i18nc("@label", "Y min")
  271. }
  272. TextField
  273. {
  274. id: printheadYMinField
  275. text: getHeadPolygonCoord("y", "min")
  276. validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
  277. onEditingFinished: setHeadPolygon()
  278. }
  279. Label
  280. {
  281. text: catalog.i18nc("@label", "X max")
  282. }
  283. TextField
  284. {
  285. id: printheadXMaxField
  286. text: getHeadPolygonCoord("x", "max")
  287. validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
  288. onEditingFinished: setHeadPolygon()
  289. }
  290. Label
  291. {
  292. text: catalog.i18nc("@label", "Y max")
  293. }
  294. TextField
  295. {
  296. id: printheadYMaxField
  297. text: getHeadPolygonCoord("y", "max")
  298. validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
  299. onEditingFinished: setHeadPolygon()
  300. }
  301. Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
  302. Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
  303. Label
  304. {
  305. text: catalog.i18nc("@label", "Gantry height")
  306. }
  307. Loader
  308. {
  309. id: gantryHeightField
  310. sourceComponent: numericTextFieldWithUnit
  311. property var propertyProvider: gantryHeightProvider
  312. property string unit: catalog.i18nc("@label", "mm")
  313. property bool forceUpdateOnChange: false
  314. }
  315. Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
  316. Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
  317. Label
  318. {
  319. text: catalog.i18nc("@label", "Number of Extruders")
  320. visible: extruderCountComboBox.visible
  321. }
  322. ComboBox
  323. {
  324. id: extruderCountComboBox
  325. visible: manager.definedExtruderCount > 1
  326. model: ListModel
  327. {
  328. id: extruderCountModel
  329. Component.onCompleted:
  330. {
  331. for(var i = 0; i < manager.definedExtruderCount; i++)
  332. {
  333. extruderCountModel.append({text: String(i + 1), value: i});
  334. }
  335. }
  336. }
  337. currentIndex: machineExtruderCountProvider.properties.value - 1
  338. onActivated:
  339. {
  340. if(machineExtruderCountProvider.properties.value == index + 1)
  341. {
  342. return;
  343. }
  344. var extruder_material;
  345. if(index == 0 && Cura.MachineManager.hasMaterials)
  346. {
  347. // setting back to single extrusion
  348. extruder_material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeStackId];
  349. }
  350. machineExtruderCountProvider.setPropertyValue("value", index + 1);
  351. manager.forceUpdate();
  352. base.extruderTabsCount = (index > 0) ? index + 1 : 0;
  353. if(index > 0)
  354. {
  355. // multiextrusion; make sure one of these extruder stacks is active
  356. if(ExtruderManager.activeExtruderIndex == -1)
  357. {
  358. ExtruderManager.setActiveExtruderIndex(0);
  359. }
  360. }
  361. else
  362. {
  363. // single extrusion; make sure the machine stack is active
  364. if(ExtruderManager.activeExtruderIndex != -1)
  365. {
  366. ExtruderManager.setActiveExtruderIndex(-1);
  367. }
  368. if(extruder_material)
  369. {
  370. // restore material on global stack
  371. // MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines
  372. Cura.MachineManager.setActiveMaterial(extruder_material);
  373. }
  374. }
  375. }
  376. }
  377. Label
  378. {
  379. text: catalog.i18nc("@label", "Nozzle size")
  380. visible: nozzleSizeField.visible
  381. }
  382. Loader
  383. {
  384. id: nozzleSizeField
  385. visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1
  386. sourceComponent: numericTextFieldWithUnit
  387. property var propertyProvider: machineNozzleSizeProvider
  388. property string unit: catalog.i18nc("@label", "mm")
  389. property bool forceUpdateOnChange: false
  390. }
  391. }
  392. }
  393. }
  394. Row
  395. {
  396. spacing: UM.Theme.getSize("default_margin").width
  397. anchors.left: parent.left
  398. anchors.right: parent.right
  399. height: parent.height - y
  400. Column
  401. {
  402. height: parent.height
  403. width: settingsTabs.columnWidth
  404. Label
  405. {
  406. text: catalog.i18nc("@label", "Start Gcode")
  407. }
  408. TextArea
  409. {
  410. id: machineStartGcodeField
  411. width: parent.width
  412. height: parent.height - y
  413. font: UM.Theme.getFont("fixed")
  414. wrapMode: TextEdit.NoWrap
  415. text: machineStartGcodeProvider.properties.value
  416. onActiveFocusChanged:
  417. {
  418. if(!activeFocus)
  419. {
  420. machineStartGcodeProvider.setPropertyValue("value", machineStartGcodeField.text)
  421. }
  422. }
  423. }
  424. }
  425. Column {
  426. height: parent.height
  427. width: settingsTabs.columnWidth
  428. Label
  429. {
  430. text: catalog.i18nc("@label", "End Gcode")
  431. }
  432. TextArea
  433. {
  434. id: machineEndGcodeField
  435. width: parent.width
  436. height: parent.height - y
  437. font: UM.Theme.getFont("fixed")
  438. wrapMode: TextEdit.NoWrap
  439. text: machineEndGcodeProvider.properties.value
  440. onActiveFocusChanged:
  441. {
  442. if(!activeFocus)
  443. {
  444. machineEndGcodeProvider.setPropertyValue("value", machineEndGcodeField.text)
  445. }
  446. }
  447. }
  448. }
  449. }
  450. }
  451. }
  452. onCurrentIndexChanged:
  453. {
  454. if(currentIndex > 0)
  455. {
  456. contentItem.forceActiveFocus();
  457. ExtruderManager.setActiveExtruderIndex(currentIndex - 1);
  458. }
  459. }
  460. Repeater
  461. {
  462. id: extruderTabsRepeater
  463. model: base.extruderTabsCount
  464. Tab
  465. {
  466. title: base.extrudersModel.getItem(index).name
  467. anchors.margins: UM.Theme.getSize("default_margin").width
  468. Column
  469. {
  470. spacing: UM.Theme.getSize("default_margin").width
  471. Label
  472. {
  473. text: catalog.i18nc("@label", "Printer Settings")
  474. font.bold: true
  475. }
  476. Grid
  477. {
  478. columns: 2
  479. columnSpacing: UM.Theme.getSize("default_margin").width
  480. rowSpacing: UM.Theme.getSize("default_lining").width
  481. Label
  482. {
  483. text: catalog.i18nc("@label", "Nozzle size")
  484. visible: extruderNozzleSizeField.visible
  485. }
  486. Loader
  487. {
  488. id: extruderNozzleSizeField
  489. visible: !Cura.MachineManager.hasVariants
  490. sourceComponent: numericTextFieldWithUnit
  491. property var propertyProvider: extruderNozzleSizeProvider
  492. property string unit: catalog.i18nc("@label", "mm")
  493. property bool forceUpdateOnChange: false
  494. }
  495. Label
  496. {
  497. text: catalog.i18nc("@label", "Nozzle offset X")
  498. }
  499. Loader
  500. {
  501. id: extruderOffsetXField
  502. sourceComponent: numericTextFieldWithUnit
  503. property var propertyProvider: extruderOffsetXProvider
  504. property string unit: catalog.i18nc("@label", "mm")
  505. property bool forceUpdateOnChange: true
  506. }
  507. Label
  508. {
  509. text: catalog.i18nc("@label", "Nozzle offset Y")
  510. }
  511. Loader
  512. {
  513. id: extruderOffsetYField
  514. sourceComponent: numericTextFieldWithUnit
  515. property var propertyProvider: extruderOffsetYProvider
  516. property string unit: catalog.i18nc("@label", "mm")
  517. property bool forceUpdateOnChange: true
  518. }
  519. }
  520. Row
  521. {
  522. spacing: UM.Theme.getSize("default_margin").width
  523. anchors.left: parent.left
  524. anchors.right: parent.right
  525. height: parent.height - y
  526. Column
  527. {
  528. height: parent.height
  529. width: settingsTabs.columnWidth
  530. Label
  531. {
  532. text: catalog.i18nc("@label", "Extruder Start Gcode")
  533. }
  534. TextArea
  535. {
  536. id: extruderStartGcodeField
  537. width: parent.width
  538. height: parent.height - y
  539. font: UM.Theme.getFont("fixed")
  540. wrapMode: TextEdit.NoWrap
  541. text: extruderStartGcodeProvider.properties.value
  542. onActiveFocusChanged:
  543. {
  544. if(!activeFocus)
  545. {
  546. extruderStartGcodeProvider.setPropertyValue("value", extruderStartGcodeField.text)
  547. }
  548. }
  549. }
  550. }
  551. Column {
  552. height: parent.height
  553. width: settingsTabs.columnWidth
  554. Label
  555. {
  556. text: catalog.i18nc("@label", "Extruder End Gcode")
  557. }
  558. TextArea
  559. {
  560. id: extruderEndGcodeField
  561. width: parent.width
  562. height: parent.height - y
  563. font: UM.Theme.getFont("fixed")
  564. wrapMode: TextEdit.NoWrap
  565. text: extruderEndGcodeProvider.properties.value
  566. onActiveFocusChanged:
  567. {
  568. if(!activeFocus)
  569. {
  570. extruderEndGcodeProvider.setPropertyValue("value", extruderEndGcodeField.text)
  571. }
  572. }
  573. }
  574. }
  575. }
  576. }
  577. }
  578. }
  579. }
  580. }
  581. function getHeadPolygonCoord(axis, minMax)
  582. {
  583. var polygon = JSON.parse(machineHeadPolygonProvider.properties.value);
  584. var item = (axis == "x") ? 0 : 1
  585. var result = polygon[0][item];
  586. for(var i = 1; i < polygon.length; i++) {
  587. if (minMax == "min") {
  588. result = Math.min(result, polygon[i][item]);
  589. } else {
  590. result = Math.max(result, polygon[i][item]);
  591. }
  592. }
  593. return Math.abs(result);
  594. }
  595. function setHeadPolygon()
  596. {
  597. var polygon = [];
  598. polygon.push([-parseFloat(printheadXMinField.text), parseFloat(printheadYMaxField.text)]);
  599. polygon.push([-parseFloat(printheadXMinField.text),-parseFloat(printheadYMinField.text)]);
  600. polygon.push([ parseFloat(printheadXMaxField.text), parseFloat(printheadYMaxField.text)]);
  601. polygon.push([ parseFloat(printheadXMaxField.text),-parseFloat(printheadYMinField.text)]);
  602. var polygon_string = JSON.stringify(polygon);
  603. if(polygon != machineHeadPolygonProvider.properties.value)
  604. {
  605. machineHeadPolygonProvider.setPropertyValue("value", polygon_string);
  606. manager.forceUpdate();
  607. }
  608. }
  609. Component
  610. {
  611. id: numericTextFieldWithUnit
  612. Item {
  613. height: textField.height
  614. width: textField.width
  615. TextField
  616. {
  617. id: textField
  618. text: propertyProvider.properties.value
  619. validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ }
  620. onEditingFinished:
  621. {
  622. if (propertyProvider && text != propertyProvider.properties.value)
  623. {
  624. propertyProvider.setPropertyValue("value", text);
  625. if(forceUpdateOnChange)
  626. {
  627. var extruderIndex = ExtruderManager.activeExtruderIndex;
  628. manager.forceUpdate();
  629. if(ExtruderManager.activeExtruderIndex != extruderIndex)
  630. {
  631. ExtruderManager.setActiveExtruderIndex(extruderIndex)
  632. }
  633. }
  634. }
  635. }
  636. }
  637. Label
  638. {
  639. text: unit
  640. anchors.right: textField.right
  641. anchors.rightMargin: y - textField.y
  642. anchors.verticalCenter: textField.verticalCenter
  643. }
  644. }
  645. }
  646. UM.SettingPropertyProvider
  647. {
  648. id: machineWidthProvider
  649. containerStackId: Cura.MachineManager.activeMachineId
  650. key: "machine_width"
  651. watchedProperties: [ "value" ]
  652. storeIndex: manager.containerIndex
  653. }
  654. UM.SettingPropertyProvider
  655. {
  656. id: machineDepthProvider
  657. containerStackId: Cura.MachineManager.activeMachineId
  658. key: "machine_depth"
  659. watchedProperties: [ "value" ]
  660. storeIndex: manager.containerIndex
  661. }
  662. UM.SettingPropertyProvider
  663. {
  664. id: machineHeightProvider
  665. containerStackId: Cura.MachineManager.activeMachineId
  666. key: "machine_height"
  667. watchedProperties: [ "value" ]
  668. storeIndex: manager.containerIndex
  669. }
  670. UM.SettingPropertyProvider
  671. {
  672. id: machineShapeProvider
  673. containerStackId: Cura.MachineManager.activeMachineId
  674. key: "machine_shape"
  675. watchedProperties: [ "value", "options" ]
  676. storeIndex: manager.containerIndex
  677. }
  678. UM.SettingPropertyProvider
  679. {
  680. id: machineHeatedBedProvider
  681. containerStackId: Cura.MachineManager.activeMachineId
  682. key: "machine_heated_bed"
  683. watchedProperties: [ "value" ]
  684. storeIndex: manager.containerIndex
  685. }
  686. UM.SettingPropertyProvider
  687. {
  688. id: machineCenterIsZeroProvider
  689. containerStackId: Cura.MachineManager.activeMachineId
  690. key: "machine_center_is_zero"
  691. watchedProperties: [ "value" ]
  692. storeIndex: manager.containerIndex
  693. }
  694. UM.SettingPropertyProvider
  695. {
  696. id: machineGCodeFlavorProvider
  697. containerStackId: Cura.MachineManager.activeMachineId
  698. key: "machine_gcode_flavor"
  699. watchedProperties: [ "value", "options" ]
  700. storeIndex: manager.containerIndex
  701. }
  702. UM.SettingPropertyProvider
  703. {
  704. id: machineNozzleSizeProvider
  705. containerStackId: Cura.MachineManager.activeMachineId
  706. key: "machine_nozzle_size"
  707. watchedProperties: [ "value" ]
  708. storeIndex: manager.containerIndex
  709. }
  710. UM.SettingPropertyProvider
  711. {
  712. id: machineExtruderCountProvider
  713. containerStackId: Cura.MachineManager.activeMachineId
  714. key: "machine_extruder_count"
  715. watchedProperties: [ "value" ]
  716. storeIndex: manager.containerIndex
  717. }
  718. UM.SettingPropertyProvider
  719. {
  720. id: gantryHeightProvider
  721. containerStackId: Cura.MachineManager.activeMachineId
  722. key: "gantry_height"
  723. watchedProperties: [ "value" ]
  724. storeIndex: manager.containerIndex
  725. }
  726. UM.SettingPropertyProvider
  727. {
  728. id: machineHeadPolygonProvider
  729. containerStackId: Cura.MachineManager.activeMachineId
  730. key: "machine_head_with_fans_polygon"
  731. watchedProperties: [ "value" ]
  732. storeIndex: manager.containerIndex
  733. }
  734. UM.SettingPropertyProvider
  735. {
  736. id: machineStartGcodeProvider
  737. containerStackId: Cura.MachineManager.activeMachineId
  738. key: "machine_start_gcode"
  739. watchedProperties: [ "value" ]
  740. storeIndex: manager.containerIndex
  741. }
  742. UM.SettingPropertyProvider
  743. {
  744. id: machineEndGcodeProvider
  745. containerStackId: Cura.MachineManager.activeMachineId
  746. key: "machine_end_gcode"
  747. watchedProperties: [ "value" ]
  748. storeIndex: manager.containerIndex
  749. }
  750. UM.SettingPropertyProvider
  751. {
  752. id: extruderNozzleSizeProvider
  753. containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
  754. key: "machine_nozzle_size"
  755. watchedProperties: [ "value" ]
  756. storeIndex: manager.containerIndex
  757. }
  758. UM.SettingPropertyProvider
  759. {
  760. id: extruderOffsetXProvider
  761. containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
  762. key: "machine_nozzle_offset_x"
  763. watchedProperties: [ "value" ]
  764. storeIndex: manager.containerIndex
  765. }
  766. UM.SettingPropertyProvider
  767. {
  768. id: extruderOffsetYProvider
  769. containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
  770. key: "machine_nozzle_offset_y"
  771. watchedProperties: [ "value" ]
  772. storeIndex: manager.containerIndex
  773. }
  774. UM.SettingPropertyProvider
  775. {
  776. id: extruderStartGcodeProvider
  777. containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
  778. key: "machine_extruder_start_code"
  779. watchedProperties: [ "value" ]
  780. storeIndex: manager.containerIndex
  781. }
  782. UM.SettingPropertyProvider
  783. {
  784. id: extruderEndGcodeProvider
  785. containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : ""
  786. key: "machine_extruder_end_code"
  787. watchedProperties: [ "value" ]
  788. storeIndex: manager.containerIndex
  789. }
  790. }