CustomPrintSetup.qml 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. //Copyright (c) 2022 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.5 as UM
  7. import Cura 1.6 as Cura
  8. import ".."
  9. Item
  10. {
  11. id: customPrintSetup
  12. property real padding: UM.Theme.getSize("default_margin").width
  13. property bool multipleExtruders: extrudersModel.count > 1
  14. property var extrudersModel: CuraApplication.getExtrudersModel()
  15. Item
  16. {
  17. id: intent
  18. height: childrenRect.height
  19. anchors
  20. {
  21. top: parent.top
  22. topMargin: UM.Theme.getSize("default_margin").height
  23. left: parent.left
  24. leftMargin: parent.padding
  25. right: parent.right
  26. rightMargin: parent.padding
  27. }
  28. UM.Label
  29. {
  30. id: profileLabel
  31. anchors
  32. {
  33. top: parent.top
  34. bottom: parent.bottom
  35. left: parent.left
  36. right: intentSelection.left
  37. }
  38. text: catalog.i18nc("@label", "Profile")
  39. font: UM.Theme.getFont("medium")
  40. }
  41. NoIntentIcon
  42. {
  43. affected_extruders: Cura.MachineManager.extruderPositionsWithNonActiveIntent
  44. intent_type: Cura.MachineManager.activeIntentCategory
  45. anchors.right: intentSelection.left
  46. anchors.rightMargin: UM.Theme.getSize("narrow_margin").width
  47. width: Math.round(profileLabel.height * 0.5)
  48. anchors.verticalCenter: parent.verticalCenter
  49. height: width
  50. visible: affected_extruders.length
  51. }
  52. Button
  53. {
  54. id: intentSelection
  55. onClicked: menu.opened ? menu.close() : menu.open()
  56. anchors.right: parent.right
  57. width: UM.Theme.getSize("print_setup_big_item").width
  58. height: textLabel.contentHeight + 2 * UM.Theme.getSize("narrow_margin").height
  59. hoverEnabled: true
  60. contentItem: RowLayout
  61. {
  62. spacing: 0
  63. anchors.left: parent.left
  64. anchors.right: customisedSettings.left
  65. anchors.leftMargin: UM.Theme.getSize("default_margin").width
  66. UM.Label
  67. {
  68. id: textLabel
  69. text: Cura.MachineManager.activeQualityDisplayNameMap["main"]
  70. Layout.margins: 0
  71. Layout.maximumWidth: Math.floor(parent.width * 0.7) // Always leave >= 30% for the rest of the row.
  72. height: contentHeight
  73. elide: Text.ElideRight
  74. wrapMode: Text.NoWrap
  75. }
  76. UM.Label
  77. {
  78. text: activeQualityDetailText()
  79. color: UM.Theme.getColor("text_detail")
  80. Layout.margins: 0
  81. Layout.fillWidth: true
  82. height: contentHeight
  83. elide: Text.ElideRight
  84. wrapMode: Text.NoWrap
  85. function activeQualityDetailText()
  86. {
  87. var resultMap = Cura.MachineManager.activeQualityDisplayNameMap
  88. var resultSuffix = resultMap["suffix"]
  89. var result = ""
  90. if (Cura.MachineManager.isActiveQualityExperimental)
  91. {
  92. resultSuffix += " (Experimental)"
  93. }
  94. if (Cura.MachineManager.isActiveQualitySupported)
  95. {
  96. if (Cura.MachineManager.activeQualityLayerHeight > 0)
  97. {
  98. if (resultSuffix)
  99. {
  100. result += " - " + resultSuffix
  101. }
  102. result += " - "
  103. result += Cura.MachineManager.activeQualityLayerHeight + "mm"
  104. }
  105. }
  106. return result
  107. }
  108. }
  109. }
  110. background: UM.UnderlineBackground
  111. {
  112. id: backgroundItem
  113. liningColor: intentSelection.hovered ? UM.Theme.getColor("border_main") : UM.Theme.getColor("border_field_light")
  114. }
  115. UM.SimpleButton
  116. {
  117. id: customisedSettings
  118. visible: Cura.MachineManager.hasUserSettings
  119. width: UM.Theme.getSize("print_setup_icon").width
  120. height: UM.Theme.getSize("print_setup_icon").height
  121. anchors.verticalCenter: parent.verticalCenter
  122. anchors.right: downArrow.left
  123. anchors.rightMargin: UM.Theme.getSize("default_margin").width
  124. color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button");
  125. iconSource: UM.Theme.getIcon("StarFilled")
  126. onClicked:
  127. {
  128. forceActiveFocus();
  129. Cura.Actions.manageProfiles.trigger()
  130. }
  131. onEntered:
  132. {
  133. var content = catalog.i18nc("@tooltip", "Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.")
  134. base.showTooltip(intent, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content)
  135. }
  136. onExited: base.hideTooltip()
  137. }
  138. UM.RecolorImage
  139. {
  140. id: downArrow
  141. source: UM.Theme.getIcon("ChevronSingleDown")
  142. width: UM.Theme.getSize("standard_arrow").width
  143. height: UM.Theme.getSize("standard_arrow").height
  144. anchors
  145. {
  146. right: parent.right
  147. verticalCenter: parent.verticalCenter
  148. rightMargin: UM.Theme.getSize("default_margin").width
  149. }
  150. color: UM.Theme.getColor("setting_control_button")
  151. }
  152. }
  153. QualitiesWithIntentMenu
  154. {
  155. id: menu
  156. y: intentSelection.y + intentSelection.height
  157. x: intentSelection.x
  158. width: intentSelection.width
  159. }
  160. }
  161. UM.TabRow
  162. {
  163. id: tabBar
  164. visible: multipleExtruders // The tab row is only visible when there are more than 1 extruder
  165. anchors
  166. {
  167. top: intent.bottom
  168. topMargin: UM.Theme.getSize("default_margin").height
  169. left: parent.left
  170. leftMargin: parent.padding
  171. right: parent.right
  172. rightMargin: parent.padding
  173. }
  174. Repeater
  175. {
  176. id: repeater
  177. model: extrudersModel
  178. delegate: UM.TabRowButton
  179. {
  180. checked: model.index == 0
  181. contentItem: Item
  182. {
  183. Cura.ExtruderIcon
  184. {
  185. anchors.centerIn: parent
  186. materialColor: model.color
  187. extruderEnabled: model.enabled
  188. iconVariant: "default"
  189. height: parent.height
  190. width: height
  191. }
  192. }
  193. onClicked:
  194. {
  195. Cura.ExtruderManager.setActiveExtruderIndex(tabBar.currentIndex)
  196. }
  197. }
  198. }
  199. //When active extruder changes for some other reason, switch tabs.
  200. //Don't directly link currentIndex to Cura.ExtruderManager.activeExtruderIndex!
  201. //This causes a segfault in Qt 5.11. Something with VisualItemModel removing index -1. We have to use setCurrentIndex instead.
  202. Connections
  203. {
  204. target: Cura.ExtruderManager
  205. function onActiveExtruderChanged()
  206. {
  207. tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex);
  208. }
  209. }
  210. //When the model of the extruders is rebuilt, the list of extruders is briefly emptied and rebuilt.
  211. //This causes the currentIndex of the tab to be in an invalid position which resets it to 0.
  212. //Therefore we need to change it back to what it was: The active extruder index.
  213. Connections
  214. {
  215. target: repeater.model
  216. function onModelChanged()
  217. {
  218. tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex)
  219. }
  220. }
  221. }
  222. Rectangle
  223. {
  224. anchors
  225. {
  226. top: tabBar.visible ? tabBar.bottom : intent.bottom
  227. topMargin: -UM.Theme.getSize("default_lining").width
  228. left: parent.left
  229. leftMargin: parent.padding
  230. right: parent.right
  231. rightMargin: parent.padding
  232. bottom: parent.bottom
  233. }
  234. z: tabBar.z - 1
  235. // Don't show the border when only one extruder
  236. border.color: tabBar.visible ? UM.Theme.getColor("lining") : "transparent"
  237. border.width: UM.Theme.getSize("default_lining").width
  238. color: UM.Theme.getColor("main_background")
  239. Cura.SettingView
  240. {
  241. anchors
  242. {
  243. fill: parent
  244. topMargin: UM.Theme.getSize("default_margin").height
  245. leftMargin: UM.Theme.getSize("default_margin").width
  246. // Small space for the scrollbar
  247. rightMargin: UM.Theme.getSize("narrow_margin").width
  248. // Compensate for the negative margin in the parent
  249. bottomMargin: UM.Theme.getSize("default_lining").width
  250. }
  251. }
  252. }
  253. }