MachineSettingsPrinterTab.qml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  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 UM 1.3 as UM
  6. import Cura 1.1 as Cura
  7. //
  8. // This the content in the "Printer" tab in the Machine Settings dialog.
  9. //
  10. Item
  11. {
  12. id: base
  13. UM.I18nCatalog { id: catalog; name: "cura" }
  14. anchors.left: parent.left
  15. anchors.right: parent.right
  16. anchors.top: parent.top
  17. property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0
  18. property int columnSpacing: 3 * screenScaleFactor
  19. property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes
  20. property int labelWidth: (columnWidth * 2 / 3 - UM.Theme.getSize("default_margin").width * 2) | 0
  21. property int controlWidth: (columnWidth / 3) | 0
  22. property var labelFont: UM.Theme.getFont("default")
  23. property string machineStackId: Cura.MachineManager.activeMachineId
  24. property var forceUpdateFunction: manager.forceUpdate
  25. Item
  26. {
  27. id: upperBlock
  28. anchors.top: parent.top
  29. anchors.left: parent.left
  30. anchors.right: parent.right
  31. anchors.margins: UM.Theme.getSize("default_margin").width
  32. height: childrenRect.height
  33. // =======================================
  34. // Left-side column for "Printer Settings"
  35. // =======================================
  36. Column
  37. {
  38. anchors.top: parent.top
  39. anchors.left: parent.left
  40. width: base.columnWidth
  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. anchors.top: parent.top
  158. anchors.right: parent.right
  159. width: base.columnWidth
  160. spacing: base.columnSpacing
  161. Label // Title Label
  162. {
  163. text: catalog.i18nc("@title:label", "Printhead Settings")
  164. font: UM.Theme.getFont("medium_bold")
  165. color: UM.Theme.getColor("text")
  166. renderType: Text.NativeRendering
  167. width: parent.width
  168. elide: Text.ElideRight
  169. }
  170. Cura.PrintHeadMinMaxTextField // "X min"
  171. {
  172. id: machineXMinField
  173. settingStoreIndex: propertyStoreIndex
  174. labelText: catalog.i18nc("@label", "X min")
  175. labelFont: base.labelFont
  176. labelWidth: base.labelWidth
  177. controlWidth: base.controlWidth
  178. unitText: catalog.i18nc("@label", "mm")
  179. axisName: "x"
  180. axisMinOrMax: "min"
  181. allowNegativeValue: true
  182. allowPositiveValue: false
  183. forceUpdateOnChangeFunction: forceUpdateFunction
  184. }
  185. Cura.PrintHeadMinMaxTextField // "Y min"
  186. {
  187. id: machineYMinField
  188. settingStoreIndex: propertyStoreIndex
  189. labelText: catalog.i18nc("@label", "Y min")
  190. labelFont: base.labelFont
  191. labelWidth: base.labelWidth
  192. controlWidth: base.controlWidth
  193. unitText: catalog.i18nc("@label", "mm")
  194. axisName: "y"
  195. axisMinOrMax: "min"
  196. allowNegativeValue: true
  197. allowPositiveValue: false
  198. forceUpdateOnChangeFunction: forceUpdateFunction
  199. }
  200. Cura.PrintHeadMinMaxTextField // "X max"
  201. {
  202. id: machineXMaxField
  203. settingStoreIndex: propertyStoreIndex
  204. labelText: catalog.i18nc("@label", "X max")
  205. labelFont: base.labelFont
  206. labelWidth: base.labelWidth
  207. controlWidth: base.controlWidth
  208. unitText: catalog.i18nc("@label", "mm")
  209. axisName: "x"
  210. axisMinOrMax: "max"
  211. allowNegativeValue: false
  212. allowPositiveValue: true
  213. forceUpdateOnChangeFunction: forceUpdateFunction
  214. }
  215. Cura.PrintHeadMinMaxTextField // "Y max"
  216. {
  217. id: machineYMaxField
  218. containerStackId: machineStackId
  219. settingKey: "machine_head_with_fans_polygon"
  220. settingStoreIndex: propertyStoreIndex
  221. labelText: catalog.i18nc("@label", "Y max")
  222. labelFont: base.labelFont
  223. labelWidth: base.labelWidth
  224. controlWidth: base.controlWidth
  225. unitText: catalog.i18nc("@label", "mm")
  226. axisName: "y"
  227. axisMinOrMax: "max"
  228. allowNegativeValue: false
  229. allowPositiveValue: true
  230. forceUpdateOnChangeFunction: forceUpdateFunction
  231. }
  232. Cura.NumericTextFieldWithUnit // "Gantry Height"
  233. {
  234. id: machineGantryHeightField
  235. containerStackId: machineStackId
  236. settingKey: "gantry_height"
  237. settingStoreIndex: propertyStoreIndex
  238. labelText: catalog.i18nc("@label", "Gantry Height")
  239. labelFont: base.labelFont
  240. labelWidth: base.labelWidth
  241. controlWidth: base.controlWidth
  242. unitText: catalog.i18nc("@label", "mm")
  243. forceUpdateOnChangeFunction: forceUpdateFunction
  244. }
  245. Cura.ComboBoxWithOptions // "Number of Extruders"
  246. {
  247. id: numberOfExtrudersComboBox
  248. containerStackId: machineStackId
  249. settingKey: "machine_extruder_count"
  250. settingStoreIndex: propertyStoreIndex
  251. labelText: catalog.i18nc("@label", "Number of Extruders")
  252. labelFont: base.labelFont
  253. labelWidth: base.labelWidth
  254. controlWidth: base.controlWidth
  255. forceUpdateOnChangeFunction: forceUpdateFunction
  256. // FIXME(Lipu): better document this.
  257. // This has something to do with UM2 and UM2+ regarding "has_material" and the gcode flavor settings.
  258. // I don't remember exactly what.
  259. afterOnEditingFinishedFunction: manager.updateHasMaterialsMetadata
  260. setValueFunction: manager.setMachineExtruderCount
  261. optionModel: ListModel
  262. {
  263. id: extruderCountModel
  264. Component.onCompleted:
  265. {
  266. update()
  267. }
  268. function update()
  269. {
  270. clear()
  271. for (var i = 1; i <= Cura.MachineManager.activeMachine.maxExtruderCount; i++)
  272. {
  273. // Use String as value. JavaScript only has Number. PropertyProvider.setPropertyValue()
  274. // takes a QVariant as value, and Number gets translated into a float. This will cause problem
  275. // for integer settings such as "Number of Extruders".
  276. append({ text: String(i), value: String(i) })
  277. }
  278. }
  279. }
  280. Connections
  281. {
  282. target: Cura.MachineManager
  283. onGlobalContainerChanged: extruderCountModel.update()
  284. }
  285. }
  286. }
  287. }
  288. Item // Start and End G-code
  289. {
  290. id: lowerBlock
  291. anchors.top: upperBlock.bottom
  292. anchors.bottom: parent.bottom
  293. anchors.left: parent.left
  294. anchors.right: parent.right
  295. anchors.margins: UM.Theme.getSize("default_margin").width
  296. Cura.GcodeTextArea // "Start G-code"
  297. {
  298. anchors.top: parent.top
  299. anchors.bottom: parent.bottom
  300. anchors.bottomMargin: UM.Theme.getSize("default_margin").height
  301. anchors.left: parent.left
  302. width: base.columnWidth - UM.Theme.getSize("default_margin").width
  303. labelText: catalog.i18nc("@title:label", "Start G-code")
  304. containerStackId: machineStackId
  305. settingKey: "machine_start_gcode"
  306. settingStoreIndex: propertyStoreIndex
  307. }
  308. Cura.GcodeTextArea // "End G-code"
  309. {
  310. anchors.top: parent.top
  311. anchors.bottom: parent.bottom
  312. anchors.bottomMargin: UM.Theme.getSize("default_margin").height
  313. anchors.right: parent.right
  314. width: base.columnWidth - UM.Theme.getSize("default_margin").width
  315. labelText: catalog.i18nc("@title:label", "End G-code")
  316. containerStackId: machineStackId
  317. settingKey: "machine_end_gcode"
  318. settingStoreIndex: propertyStoreIndex
  319. }
  320. }
  321. }