MachineSettingsPrinterTab.qml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. // Copyright (c) 2019 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.10
  4. import QtQuick.Controls 2.3
  5. import QtQuick.Layouts 1.3
  6. import UM 1.3 as UM
  7. import Cura 1.1 as Cura
  8. //
  9. // This the content in the "Printer" tab in the Machine Settings dialog.
  10. //
  11. Item
  12. {
  13. id: base
  14. UM.I18nCatalog { id: catalog; name: "cura" }
  15. property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0
  16. property int columnSpacing: 3 * screenScaleFactor
  17. property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes
  18. property int labelWidth: (columnWidth * 2 / 3 - UM.Theme.getSize("default_margin").width * 2) | 0
  19. property int controlWidth: (columnWidth / 3) | 0
  20. property var labelFont: UM.Theme.getFont("default")
  21. property string machineStackId: Cura.MachineManager.activeMachine.id
  22. property var forceUpdateFunction: manager.forceUpdate
  23. RowLayout
  24. {
  25. id: upperBlock
  26. anchors
  27. {
  28. top: parent.top
  29. left: parent.left
  30. right: parent.right
  31. margins: UM.Theme.getSize("default_margin").width
  32. }
  33. spacing: UM.Theme.getSize("default_margin").width
  34. // =======================================
  35. // Left-side column for "Printer Settings"
  36. // =======================================
  37. Column
  38. {
  39. Layout.fillWidth: true
  40. Layout.alignment: Qt.AlignTop
  41. spacing: base.columnSpacing
  42. Label // Title Label
  43. {
  44. text: catalog.i18nc("@title:label", "Printer Settings")
  45. font: UM.Theme.getFont("medium_bold")
  46. color: UM.Theme.getColor("text")
  47. renderType: Text.NativeRendering
  48. width: parent.width
  49. elide: Text.ElideRight
  50. }
  51. Cura.NumericTextFieldWithUnit // "X (Width)"
  52. {
  53. id: machineXWidthField
  54. containerStackId: machineStackId
  55. settingKey: "machine_width"
  56. settingStoreIndex: propertyStoreIndex
  57. labelText: catalog.i18nc("@label", "X (Width)")
  58. labelFont: base.labelFont
  59. labelWidth: base.labelWidth
  60. controlWidth: base.controlWidth
  61. unitText: catalog.i18nc("@label", "mm")
  62. forceUpdateOnChangeFunction: forceUpdateFunction
  63. }
  64. Cura.NumericTextFieldWithUnit // "Y (Depth)"
  65. {
  66. id: machineYDepthField
  67. containerStackId: machineStackId
  68. settingKey: "machine_depth"
  69. settingStoreIndex: propertyStoreIndex
  70. labelText: catalog.i18nc("@label", "Y (Depth)")
  71. labelFont: base.labelFont
  72. labelWidth: base.labelWidth
  73. controlWidth: base.controlWidth
  74. unitText: catalog.i18nc("@label", "mm")
  75. forceUpdateOnChangeFunction: forceUpdateFunction
  76. }
  77. Cura.NumericTextFieldWithUnit // "Z (Height)"
  78. {
  79. id: machineZHeightField
  80. containerStackId: machineStackId
  81. settingKey: "machine_height"
  82. settingStoreIndex: propertyStoreIndex
  83. labelText: catalog.i18nc("@label", "Z (Height)")
  84. labelFont: base.labelFont
  85. labelWidth: base.labelWidth
  86. controlWidth: base.controlWidth
  87. unitText: catalog.i18nc("@label", "mm")
  88. forceUpdateOnChangeFunction: forceUpdateFunction
  89. }
  90. Cura.ComboBoxWithOptions // "Build plate shape"
  91. {
  92. id: buildPlateShapeComboBox
  93. containerStackId: machineStackId
  94. settingKey: "machine_shape"
  95. settingStoreIndex: propertyStoreIndex
  96. labelText: catalog.i18nc("@label", "Build plate shape")
  97. labelFont: base.labelFont
  98. labelWidth: base.labelWidth
  99. controlWidth: base.controlWidth
  100. forceUpdateOnChangeFunction: forceUpdateFunction
  101. }
  102. Cura.SimpleCheckBox // "Origin at center"
  103. {
  104. id: originAtCenterCheckBox
  105. containerStackId: machineStackId
  106. settingKey: "machine_center_is_zero"
  107. settingStoreIndex: propertyStoreIndex
  108. labelText: catalog.i18nc("@label", "Origin at center")
  109. labelFont: base.labelFont
  110. labelWidth: base.labelWidth
  111. forceUpdateOnChangeFunction: forceUpdateFunction
  112. }
  113. Cura.SimpleCheckBox // "Heated bed"
  114. {
  115. id: heatedBedCheckBox
  116. containerStackId: machineStackId
  117. settingKey: "machine_heated_bed"
  118. settingStoreIndex: propertyStoreIndex
  119. labelText: catalog.i18nc("@label", "Heated bed")
  120. labelFont: base.labelFont
  121. labelWidth: base.labelWidth
  122. forceUpdateOnChangeFunction: forceUpdateFunction
  123. }
  124. Cura.SimpleCheckBox // "Heated build volume"
  125. {
  126. id: heatedVolumeCheckBox
  127. containerStackId: machineStackId
  128. settingKey: "machine_heated_build_volume"
  129. settingStoreIndex: propertyStoreIndex
  130. labelText: catalog.i18nc("@label", "Heated build volume")
  131. labelFont: base.labelFont
  132. labelWidth: base.labelWidth
  133. forceUpdateOnChangeFunction: forceUpdateFunction
  134. }
  135. Cura.ComboBoxWithOptions // "G-code flavor"
  136. {
  137. id: gcodeFlavorComboBox
  138. containerStackId: machineStackId
  139. settingKey: "machine_gcode_flavor"
  140. settingStoreIndex: propertyStoreIndex
  141. labelText: catalog.i18nc("@label", "G-code flavor")
  142. labelFont: base.labelFont
  143. labelWidth: base.labelWidth
  144. controlWidth: base.controlWidth
  145. forceUpdateOnChangeFunction: forceUpdateFunction
  146. // FIXME(Lipu): better document this.
  147. // This has something to do with UM2 and UM2+ regarding "has_material" and the gcode flavor settings.
  148. // I don't remember exactly what.
  149. afterOnEditingFinishedFunction: manager.updateHasMaterialsMetadata
  150. }
  151. }
  152. // =======================================
  153. // Right-side column for "Printhead Settings"
  154. // =======================================
  155. Column
  156. {
  157. Layout.fillWidth: true
  158. Layout.alignment: Qt.AlignTop
  159. spacing: base.columnSpacing
  160. Label // Title Label
  161. {
  162. text: catalog.i18nc("@title:label", "Printhead Settings")
  163. font: UM.Theme.getFont("medium_bold")
  164. color: UM.Theme.getColor("text")
  165. renderType: Text.NativeRendering
  166. width: parent.width
  167. elide: Text.ElideRight
  168. }
  169. Cura.PrintHeadMinMaxTextField // "X min"
  170. {
  171. id: machineXMinField
  172. settingStoreIndex: propertyStoreIndex
  173. labelText: catalog.i18nc("@label", "X min")
  174. labelFont: base.labelFont
  175. labelWidth: base.labelWidth
  176. controlWidth: base.controlWidth
  177. unitText: catalog.i18nc("@label", "mm")
  178. axisName: "x"
  179. axisMinOrMax: "min"
  180. allowNegativeValue: true
  181. allowPositiveValue: false
  182. forceUpdateOnChangeFunction: forceUpdateFunction
  183. }
  184. Cura.PrintHeadMinMaxTextField // "Y min"
  185. {
  186. id: machineYMinField
  187. settingStoreIndex: propertyStoreIndex
  188. labelText: catalog.i18nc("@label", "Y min")
  189. labelFont: base.labelFont
  190. labelWidth: base.labelWidth
  191. controlWidth: base.controlWidth
  192. unitText: catalog.i18nc("@label", "mm")
  193. axisName: "y"
  194. axisMinOrMax: "min"
  195. allowNegativeValue: true
  196. allowPositiveValue: false
  197. forceUpdateOnChangeFunction: forceUpdateFunction
  198. }
  199. Cura.PrintHeadMinMaxTextField // "X max"
  200. {
  201. id: machineXMaxField
  202. settingStoreIndex: propertyStoreIndex
  203. labelText: catalog.i18nc("@label", "X max")
  204. labelFont: base.labelFont
  205. labelWidth: base.labelWidth
  206. controlWidth: base.controlWidth
  207. unitText: catalog.i18nc("@label", "mm")
  208. axisName: "x"
  209. axisMinOrMax: "max"
  210. allowNegativeValue: false
  211. allowPositiveValue: true
  212. forceUpdateOnChangeFunction: forceUpdateFunction
  213. }
  214. Cura.PrintHeadMinMaxTextField // "Y max"
  215. {
  216. id: machineYMaxField
  217. containerStackId: machineStackId
  218. settingKey: "machine_head_with_fans_polygon"
  219. settingStoreIndex: propertyStoreIndex
  220. labelText: catalog.i18nc("@label", "Y max")
  221. labelFont: base.labelFont
  222. labelWidth: base.labelWidth
  223. controlWidth: base.controlWidth
  224. unitText: catalog.i18nc("@label", "mm")
  225. axisName: "y"
  226. axisMinOrMax: "max"
  227. allowNegativeValue: false
  228. allowPositiveValue: true
  229. forceUpdateOnChangeFunction: forceUpdateFunction
  230. }
  231. Cura.NumericTextFieldWithUnit // "Gantry Height"
  232. {
  233. id: machineGantryHeightField
  234. containerStackId: machineStackId
  235. settingKey: "gantry_height"
  236. settingStoreIndex: propertyStoreIndex
  237. labelText: catalog.i18nc("@label", "Gantry Height")
  238. labelFont: base.labelFont
  239. labelWidth: base.labelWidth
  240. controlWidth: base.controlWidth
  241. unitText: catalog.i18nc("@label", "mm")
  242. forceUpdateOnChangeFunction: forceUpdateFunction
  243. }
  244. Cura.ComboBoxWithOptions // "Number of Extruders"
  245. {
  246. id: numberOfExtrudersComboBox
  247. containerStackId: machineStackId
  248. settingKey: "machine_extruder_count"
  249. settingStoreIndex: propertyStoreIndex
  250. labelText: catalog.i18nc("@label", "Number of Extruders")
  251. labelFont: base.labelFont
  252. labelWidth: base.labelWidth
  253. controlWidth: base.controlWidth
  254. forceUpdateOnChangeFunction: forceUpdateFunction
  255. // FIXME(Lipu): better document this.
  256. // This has something to do with UM2 and UM2+ regarding "has_material" and the gcode flavor settings.
  257. // I don't remember exactly what.
  258. afterOnEditingFinishedFunction: manager.updateHasMaterialsMetadata
  259. setValueFunction: manager.setMachineExtruderCount
  260. optionModel: ListModel
  261. {
  262. id: extruderCountModel
  263. Component.onCompleted:
  264. {
  265. update()
  266. }
  267. function update()
  268. {
  269. clear()
  270. for (var i = 1; i <= Cura.MachineManager.activeMachine.maxExtruderCount; i++)
  271. {
  272. // Use String as value. JavaScript only has Number. PropertyProvider.setPropertyValue()
  273. // takes a QVariant as value, and Number gets translated into a float. This will cause problem
  274. // for integer settings such as "Number of Extruders".
  275. append({ text: String(i), value: String(i) })
  276. }
  277. }
  278. }
  279. Connections
  280. {
  281. target: Cura.MachineManager
  282. onGlobalContainerChanged: extruderCountModel.update()
  283. }
  284. }
  285. Cura.SimpleCheckBox // "Shared Heater"
  286. {
  287. id: sharedHeaterCheckBox
  288. containerStackId: machineStackId
  289. settingKey: "machine_extruders_share_heater"
  290. settingStoreIndex: propertyStoreIndex
  291. labelText: catalog.i18nc("@label", "Shared Heater")
  292. labelFont: base.labelFont
  293. labelWidth: base.labelWidth
  294. forceUpdateOnChangeFunction: forceUpdateFunction
  295. }
  296. }
  297. }
  298. RowLayout // Start and End G-code
  299. {
  300. id: lowerBlock
  301. spacing: UM.Theme.getSize("default_margin").width
  302. anchors
  303. {
  304. top: upperBlock.bottom
  305. bottom: parent.bottom
  306. left: parent.left
  307. right: parent.right
  308. margins: UM.Theme.getSize("default_margin").width
  309. }
  310. Cura.GcodeTextArea // "Start G-code"
  311. {
  312. Layout.fillWidth: true
  313. Layout.fillHeight: true
  314. labelText: catalog.i18nc("@title:label", "Start G-code")
  315. containerStackId: machineStackId
  316. settingKey: "machine_start_gcode"
  317. settingStoreIndex: propertyStoreIndex
  318. }
  319. Cura.GcodeTextArea // "End G-code"
  320. {
  321. Layout.fillWidth: true
  322. Layout.fillHeight: true
  323. labelText: catalog.i18nc("@title:label", "End G-code")
  324. containerStackId: machineStackId
  325. settingKey: "machine_end_gcode"
  326. settingStoreIndex: propertyStoreIndex
  327. }
  328. }
  329. }