MaterialMenu.qml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // Copyright (c) 2022 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.7
  4. import QtQuick.Controls 2.4
  5. import UM 1.5 as UM
  6. import Cura 1.0 as Cura
  7. Cura.Menu
  8. {
  9. id: materialMenu
  10. title: catalog.i18nc("@label:category menu label", "Material")
  11. property int extruderIndex: 0
  12. property string currentRootMaterialId:
  13. {
  14. var value = Cura.MachineManager.currentRootMaterialId[extruderIndex]
  15. return (value === undefined) ? "" : value
  16. }
  17. property var activeExtruder:
  18. {
  19. var activeMachine = Cura.MachineManager.activeMachine
  20. return (activeMachine === null) ? null : activeMachine.extruderList[extruderIndex]
  21. }
  22. property bool isActiveExtruderEnabled: (activeExtruder === null || activeExtruder === undefined) ? false : activeExtruder.isEnabled
  23. property string activeMaterialId: (activeExtruder === null || activeExtruder === undefined) ? "" : activeExtruder.material.id
  24. property bool updateModels: true
  25. Cura.FavoriteMaterialsModel
  26. {
  27. id: favoriteMaterialsModel
  28. extruderPosition: materialMenu.extruderIndex
  29. enabled: updateModels
  30. }
  31. Cura.GenericMaterialsModel
  32. {
  33. id: genericMaterialsModel
  34. extruderPosition: materialMenu.extruderIndex
  35. enabled: updateModels
  36. }
  37. Cura.MaterialBrandsModel
  38. {
  39. id: brandModel
  40. extruderPosition: materialMenu.extruderIndex
  41. enabled: updateModels
  42. }
  43. Cura.MenuItem
  44. {
  45. text: catalog.i18nc("@label:category menu label", "Favorites")
  46. enabled: false
  47. visible: favoriteMaterialsModel.items.length > 0
  48. }
  49. Instantiator
  50. {
  51. model: favoriteMaterialsModel
  52. delegate: Cura.MenuItem
  53. {
  54. text: model.brand + " " + model.name
  55. checkable: true
  56. enabled: isActiveExtruderEnabled
  57. checked: model.root_material_id === materialMenu.currentRootMaterialId
  58. onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
  59. }
  60. onObjectAdded: materialMenu.insertItem(index + 1, object)
  61. onObjectRemoved: materialMenu.removeItem(index)
  62. }
  63. Cura.MenuSeparator { visible: favoriteMaterialsModel.items.length > 0}
  64. Cura.Menu
  65. {
  66. id: genericMenu
  67. title: catalog.i18nc("@label:category menu label", "Generic")
  68. Instantiator
  69. {
  70. model: genericMaterialsModel
  71. delegate: Cura.MenuItem
  72. {
  73. text: model.name
  74. checkable: true
  75. enabled: isActiveExtruderEnabled
  76. checked: model.root_material_id === materialMenu.currentRootMaterialId
  77. onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
  78. }
  79. onObjectAdded: genericMenu.insertItem(index, object)
  80. onObjectRemoved: genericMenu.removeItem(index)
  81. }
  82. }
  83. Cura.MenuSeparator {}
  84. Instantiator
  85. {
  86. model: brandModel
  87. Cura.Menu
  88. {
  89. id: brandMenu
  90. title: brandName
  91. property string brandName: model.name
  92. property var brandMaterials: model.material_types
  93. Instantiator
  94. {
  95. model: brandMaterials
  96. delegate: Cura.Menu
  97. {
  98. id: brandMaterialsMenu
  99. title: materialName
  100. property string materialName: model.name
  101. property var brandMaterialColors: model.colors
  102. Instantiator
  103. {
  104. model: brandMaterialColors
  105. delegate: Cura.MenuItem
  106. {
  107. text: model.name
  108. checkable: true
  109. enabled: isActiveExtruderEnabled
  110. checked: model.id === materialMenu.activeMaterialId
  111. onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
  112. }
  113. onObjectAdded: brandMaterialsMenu.insertItem(index, object)
  114. onObjectRemoved: brandMaterialsMenu.removeItem(object)
  115. }
  116. }
  117. onObjectAdded: brandMenu.insertMenu(index, object)
  118. onObjectRemoved: brandMenu.removeMenu(object)
  119. }
  120. }
  121. onObjectAdded: materialMenu.insertMenu(index + 4, object)
  122. onObjectRemoved: materialMenu.removeMenu(object)
  123. }
  124. Cura.MenuSeparator {}
  125. Cura.MenuItem
  126. {
  127. action: Cura.Actions.manageMaterials
  128. }
  129. Cura.MenuSeparator {}
  130. Cura.MenuItem
  131. {
  132. action: Cura.Actions.marketplaceMaterials
  133. }
  134. }