MachineSettingsPrinterTab.qml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  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. 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. forceUpdateOnChangeFunction: forceUpdateFunction
  197. }
  198. Cura.PrintHeadMinMaxTextField // "X max"
  199. {
  200. id: machineXMaxField
  201. settingStoreIndex: propertyStoreIndex
  202. labelText: catalog.i18nc("@label", "X max")
  203. labelFont: base.labelFont
  204. labelWidth: base.labelWidth
  205. controlWidth: base.controlWidth
  206. unitText: catalog.i18nc("@label", "mm")
  207. axisName: "x"
  208. axisMinOrMax: "max"
  209. allowNegativeValue: false
  210. forceUpdateOnChangeFunction: forceUpdateFunction
  211. }
  212. Cura.PrintHeadMinMaxTextField // "Y max"
  213. {
  214. id: machineYMaxField
  215. containerStackId: machineStackId
  216. settingKey: "machine_head_with_fans_polygon"
  217. settingStoreIndex: propertyStoreIndex
  218. labelText: catalog.i18nc("@label", "Y max")
  219. labelFont: base.labelFont
  220. labelWidth: base.labelWidth
  221. controlWidth: base.controlWidth
  222. unitText: catalog.i18nc("@label", "mm")
  223. axisName: "y"
  224. axisMinOrMax: "max"
  225. allowNegativeValue: false
  226. forceUpdateOnChangeFunction: forceUpdateFunction
  227. }
  228. Cura.NumericTextFieldWithUnit // "Gantry Height"
  229. {
  230. id: machineGantryHeightField
  231. containerStackId: machineStackId
  232. settingKey: "gantry_height"
  233. settingStoreIndex: propertyStoreIndex
  234. labelText: catalog.i18nc("@label", "Gantry Height")
  235. labelFont: base.labelFont
  236. labelWidth: base.labelWidth
  237. controlWidth: base.controlWidth
  238. unitText: catalog.i18nc("@label", "mm")
  239. forceUpdateOnChangeFunction: forceUpdateFunction
  240. }
  241. Cura.ComboBoxWithOptions // "Number of Extruders"
  242. {
  243. id: numberOfExtrudersComboBox
  244. containerStackId: machineStackId
  245. settingKey: "machine_extruder_count"
  246. settingStoreIndex: propertyStoreIndex
  247. labelText: catalog.i18nc("@label", "Number of Extruders")
  248. labelFont: base.labelFont
  249. labelWidth: base.labelWidth
  250. controlWidth: base.controlWidth
  251. forceUpdateOnChangeFunction: forceUpdateFunction
  252. // FIXME(Lipu): better document this.
  253. // This has something to do with UM2 and UM2+ regarding "has_material" and the gcode flavor settings.
  254. // I don't remember exactly what.
  255. afterOnEditingFinishedFunction: manager.updateHasMaterialsMetadata
  256. setValueFunction: manager.setMachineExtruderCount
  257. optionModel: ListModel
  258. {
  259. id: extruderCountModel
  260. Component.onCompleted:
  261. {
  262. update()
  263. }
  264. function update()
  265. {
  266. clear()
  267. for (var i = 1; i <= Cura.MachineManager.activeMachine.maxExtruderCount; i++)
  268. {
  269. // Use String as value. JavaScript only has Number. PropertyProvider.setPropertyValue()
  270. // takes a QVariant as value, and Number gets translated into a float. This will cause problem
  271. // for integer settings such as "Number of Extruders".
  272. append({ text: String(i), value: String(i) })
  273. }
  274. }
  275. }
  276. Connections
  277. {
  278. target: Cura.MachineManager
  279. onGlobalContainerChanged: extruderCountModel.update()
  280. }
  281. }
  282. }
  283. }
  284. Item // Start and End G-code
  285. {
  286. id: lowerBlock
  287. anchors.top: upperBlock.bottom
  288. anchors.bottom: parent.bottom
  289. anchors.left: parent.left
  290. anchors.right: parent.right
  291. anchors.margins: UM.Theme.getSize("default_margin").width
  292. Cura.GcodeTextArea // "Start G-code"
  293. {
  294. anchors.top: parent.top
  295. anchors.bottom: parent.bottom
  296. anchors.bottomMargin: UM.Theme.getSize("default_margin").height
  297. anchors.left: parent.left
  298. width: base.columnWidth - UM.Theme.getSize("default_margin").width
  299. labelText: catalog.i18nc("@title:label", "Start G-code")
  300. containerStackId: machineStackId
  301. settingKey: "machine_start_gcode"
  302. settingStoreIndex: propertyStoreIndex
  303. }
  304. Cura.GcodeTextArea // "End G-code"
  305. {
  306. anchors.top: parent.top
  307. anchors.bottom: parent.bottom
  308. anchors.bottomMargin: UM.Theme.getSize("default_margin").height
  309. anchors.right: parent.right
  310. width: base.columnWidth - UM.Theme.getSize("default_margin").width
  311. labelText: catalog.i18nc("@title:label", "End G-code")
  312. containerStackId: machineStackId
  313. settingKey: "machine_end_gcode"
  314. settingStoreIndex: propertyStoreIndex
  315. }
  316. }
  317. }