ApplicationMenu.qml 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. // Copyright (c) 2018 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.7
  4. import QtQuick.Controls 1.4
  5. import QtQuick.Controls.Styles 1.4
  6. import QtQuick.Layouts 1.1
  7. import QtQuick.Dialogs 1.2
  8. import UM 1.3 as UM
  9. import Cura 1.1 as Cura
  10. import "../Menus"
  11. import "../Dialogs"
  12. Item
  13. {
  14. id: menu
  15. width: applicationMenu.width
  16. height: applicationMenu.height
  17. property alias window: applicationMenu.window
  18. UM.ApplicationMenu
  19. {
  20. id: applicationMenu
  21. Menu
  22. {
  23. id: fileMenu
  24. title: catalog.i18nc("@title:menu menubar:toplevel","&File")
  25. MenuItem
  26. {
  27. id: newProjectMenu
  28. action: Cura.Actions.newProject
  29. }
  30. MenuItem
  31. {
  32. id: openMenu
  33. action: Cura.Actions.open
  34. }
  35. RecentFilesMenu { }
  36. MenuItem
  37. {
  38. id: saveWorkspaceMenu
  39. text: catalog.i18nc("@title:menu menubar:file","&Save...")
  40. onTriggered:
  41. {
  42. var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" };
  43. if(UM.Preferences.getValue("cura/dialog_on_project_save"))
  44. {
  45. saveWorkspaceDialog.args = args
  46. saveWorkspaceDialog.open()
  47. }
  48. else
  49. {
  50. UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args)
  51. }
  52. }
  53. }
  54. MenuSeparator { }
  55. MenuItem
  56. {
  57. id: saveAsMenu
  58. text: catalog.i18nc("@title:menu menubar:file", "&Export...")
  59. onTriggered:
  60. {
  61. var localDeviceId = "local_file"
  62. UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"})
  63. }
  64. }
  65. MenuItem
  66. {
  67. id: exportSelectionMenu
  68. text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...")
  69. enabled: UM.Selection.hasSelection
  70. iconName: "document-save-as"
  71. onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"})
  72. }
  73. MenuSeparator { }
  74. MenuItem
  75. {
  76. id: reloadAllMenu
  77. action: Cura.Actions.reloadAll
  78. }
  79. MenuSeparator { }
  80. MenuItem { action: Cura.Actions.quit }
  81. }
  82. Menu
  83. {
  84. title: catalog.i18nc("@title:menu menubar:toplevel","&Edit")
  85. MenuItem { action: Cura.Actions.undo }
  86. MenuItem { action: Cura.Actions.redo }
  87. MenuSeparator { }
  88. MenuItem { action: Cura.Actions.selectAll }
  89. MenuItem { action: Cura.Actions.arrangeAll }
  90. MenuItem { action: Cura.Actions.deleteSelection }
  91. MenuItem { action: Cura.Actions.deleteAll }
  92. MenuItem { action: Cura.Actions.resetAllTranslation }
  93. MenuItem { action: Cura.Actions.resetAll }
  94. MenuSeparator { }
  95. MenuItem { action: Cura.Actions.groupObjects }
  96. MenuItem { action: Cura.Actions.mergeObjects }
  97. MenuItem { action: Cura.Actions.unGroupObjects }
  98. }
  99. ViewMenu { title: catalog.i18nc("@title:menu", "&View") }
  100. Menu
  101. {
  102. id: settingsMenu
  103. title: catalog.i18nc("@title:menu", "&Settings")
  104. PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") }
  105. Instantiator
  106. {
  107. model: Cura.ExtrudersModel { simpleNames: true }
  108. Menu {
  109. title: model.name
  110. NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index }
  111. MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index }
  112. MenuSeparator
  113. {
  114. visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials
  115. }
  116. MenuItem
  117. {
  118. text: catalog.i18nc("@action:inmenu", "Set as Active Extruder")
  119. onTriggered: Cura.MachineManager.setExtruderIndex(model.index)
  120. }
  121. MenuItem
  122. {
  123. text: catalog.i18nc("@action:inmenu", "Enable Extruder")
  124. onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true)
  125. visible: !Cura.MachineManager.getExtruder(model.index).isEnabled
  126. }
  127. MenuItem
  128. {
  129. text: catalog.i18nc("@action:inmenu", "Disable Extruder")
  130. onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false)
  131. visible: Cura.MachineManager.getExtruder(model.index).isEnabled
  132. enabled: Cura.MachineManager.numberExtrudersEnabled > 1
  133. }
  134. }
  135. onObjectAdded: settingsMenu.insertItem(index, object)
  136. onObjectRemoved: settingsMenu.removeItem(object)
  137. }
  138. // TODO Only show in dev mode. Remove check when feature ready
  139. BuildplateMenu
  140. {
  141. title: catalog.i18nc("@title:menu", "&Build plate")
  142. visible: CuraSDKVersion == "dev" && Cura.MachineManager.hasVariantBuildplates
  143. }
  144. ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile") }
  145. MenuSeparator { }
  146. MenuItem { action: Cura.Actions.configureSettingVisibility }
  147. }
  148. Menu
  149. {
  150. id: extensionMenu
  151. title: catalog.i18nc("@title:menu menubar:toplevel","E&xtensions")
  152. Instantiator
  153. {
  154. id: extensions
  155. model: UM.ExtensionModel { }
  156. Menu
  157. {
  158. id: sub_menu
  159. title: model.name;
  160. visible: actions != null
  161. enabled: actions != null
  162. Instantiator
  163. {
  164. model: actions
  165. MenuItem
  166. {
  167. text: model.text
  168. onTriggered: extensions.model.subMenuTriggered(name, model.text)
  169. }
  170. onObjectAdded: sub_menu.insertItem(index, object)
  171. onObjectRemoved: sub_menu.removeItem(object)
  172. }
  173. }
  174. onObjectAdded: extensionMenu.insertItem(index, object)
  175. onObjectRemoved: extensionMenu.removeItem(object)
  176. }
  177. }
  178. Menu
  179. {
  180. id: plugin_menu
  181. title: catalog.i18nc("@title:menu menubar:toplevel", "&Toolbox")
  182. MenuItem { action: Cura.Actions.browsePackages }
  183. }
  184. Menu
  185. {
  186. id: preferencesMenu
  187. title: catalog.i18nc("@title:menu menubar:toplevel","P&references")
  188. MenuItem { action: Cura.Actions.preferences }
  189. }
  190. Menu
  191. {
  192. id: helpMenu
  193. title: catalog.i18nc("@title:menu menubar:toplevel","&Help")
  194. MenuItem { action: Cura.Actions.showProfileFolder }
  195. MenuItem { action: Cura.Actions.documentation }
  196. MenuItem { action: Cura.Actions.reportBug }
  197. MenuSeparator { }
  198. MenuItem { action: Cura.Actions.about }
  199. }
  200. }
  201. // ###############################################################################################
  202. // Definition of other components that are linked to the menus
  203. // ###############################################################################################
  204. WorkspaceSummaryDialog
  205. {
  206. id: saveWorkspaceDialog
  207. property var args
  208. onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args)
  209. }
  210. MessageDialog
  211. {
  212. id: newProjectDialog
  213. modality: Qt.ApplicationModal
  214. title: catalog.i18nc("@title:window", "New project")
  215. text: catalog.i18nc("@info:question", "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings.")
  216. standardButtons: StandardButton.Yes | StandardButton.No
  217. icon: StandardIcon.Question
  218. onYes:
  219. {
  220. CuraApplication.deleteAll();
  221. Cura.Actions.resetProfile.trigger();
  222. }
  223. }
  224. UM.ExtensionModel {
  225. id: curaExtensions
  226. }
  227. // ###############################################################################################
  228. // Definition of all the connections
  229. // ###############################################################################################
  230. Connections
  231. {
  232. target: Cura.Actions.newProject
  233. onTriggered:
  234. {
  235. if(Printer.platformActivity || Cura.MachineManager.hasUserSettings)
  236. {
  237. newProjectDialog.visible = true
  238. }
  239. }
  240. }
  241. // show the plugin browser dialog
  242. Connections
  243. {
  244. target: Cura.Actions.browsePackages
  245. onTriggered: {
  246. curaExtensions.callExtensionMethod("Toolbox", "browsePackages")
  247. }
  248. }
  249. }