Actions.qml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. // Copyright (c) 2022 UltiMaker
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. pragma Singleton
  4. import QtQuick 2.10
  5. import QtQuick.Controls 2.4
  6. import UM 1.1 as UM
  7. import Cura 1.0 as Cura
  8. Item
  9. {
  10. property alias newProject: newProjectAction
  11. property alias open: openAction
  12. property alias quit: quitAction
  13. property alias undo: undoAction
  14. property alias redo: redoAction
  15. property alias view3DCamera: view3DCameraAction
  16. property alias viewFrontCamera: viewFrontCameraAction
  17. property alias viewTopCamera: viewTopCameraAction
  18. property alias viewBottomCamera: viewBottomCameraAction
  19. property alias viewLeftSideCamera: viewLeftSideCameraAction
  20. property alias viewRightSideCamera: viewRightSideCameraAction
  21. property alias deleteSelection: deleteSelectionAction
  22. property alias centerSelection: centerSelectionAction
  23. property alias multiplySelection: multiplySelectionAction
  24. property alias deleteObject: deleteObjectAction
  25. property alias centerObject: centerObjectAction
  26. property alias groupObjects: groupObjectsAction
  27. property alias unGroupObjects:unGroupObjectsAction
  28. property alias mergeObjects: mergeObjectsAction
  29. //property alias unMergeObjects: unMergeObjectsAction
  30. property alias multiplyObject: multiplyObjectAction
  31. property alias selectAll: selectAllAction
  32. property alias deleteAll: deleteAllAction
  33. property alias reloadAll: reloadAllAction
  34. property alias arrangeAll: arrangeAllAction
  35. property alias arrangeSelection: arrangeSelectionAction
  36. property alias resetAllTranslation: resetAllTranslationAction
  37. property alias resetAll: resetAllAction
  38. property alias addMachine: addMachineAction
  39. property alias configureMachines: settingsAction
  40. property alias addProfile: addProfileAction
  41. property alias updateProfile: updateProfileAction
  42. property alias resetProfile: resetProfileAction
  43. property alias manageProfiles: manageProfilesAction
  44. property alias manageMaterials: manageMaterialsAction
  45. property alias marketplaceMaterials: marketplaceMaterialsAction
  46. property alias preferences: preferencesAction
  47. property alias showProfileFolder: showProfileFolderAction
  48. property alias documentation: documentationAction
  49. property alias showTroubleshooting: showTroubleShootingAction
  50. property alias reportBug: reportBugAction
  51. property alias whatsNew: whatsNewAction
  52. property alias about: aboutAction
  53. property alias toggleFullScreen: toggleFullScreenAction
  54. property alias exitFullScreen: exitFullScreenAction
  55. property alias configureSettingVisibility: configureSettingVisibilityAction
  56. property alias browsePackages: browsePackagesAction
  57. UM.I18nCatalog{id: catalog; name: "cura"}
  58. Action
  59. {
  60. id: showTroubleShootingAction
  61. onTriggered: Qt.openUrlExternally("https://ultimaker.com/en/troubleshooting?utm_source=cura&utm_medium=software&utm_campaign=dropdown-troubleshooting")
  62. text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting")
  63. }
  64. Action
  65. {
  66. id: toggleFullScreenAction
  67. shortcut: StandardKey.FullScreen
  68. text: catalog.i18nc("@action:inmenu", "Toggle Full Screen")
  69. icon.name: "view-fullscreen"
  70. }
  71. Action
  72. {
  73. id: exitFullScreenAction
  74. shortcut: StandardKey.Cancel
  75. text: catalog.i18nc("@action:inmenu", "Exit Full Screen")
  76. icon.name: "view-fullscreen"
  77. }
  78. Action
  79. {
  80. id: undoAction
  81. text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo")
  82. icon.name: "edit-undo"
  83. shortcut: StandardKey.Undo
  84. onTriggered: UM.OperationStack.undo()
  85. enabled: UM.OperationStack.canUndo
  86. }
  87. Action
  88. {
  89. id: redoAction
  90. text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo")
  91. icon.name: "edit-redo"
  92. shortcut: StandardKey.Redo
  93. onTriggered: UM.OperationStack.redo()
  94. enabled: UM.OperationStack.canRedo
  95. }
  96. Action
  97. {
  98. id: quitAction
  99. //On MacOS, don't translate the "Quit" word.
  100. //Qt moves the "quit" entry to a different place, and if it got renamed can't find it again when it attempts to
  101. //delete the item upon closing the application, causing a crash.
  102. //In the new location, these items are translated automatically according to the system's language.
  103. //For more information, see:
  104. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  105. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  106. text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit")
  107. icon.name: "application-exit"
  108. shortcut: StandardKey.Quit
  109. }
  110. Action
  111. {
  112. id: view3DCameraAction
  113. text: catalog.i18nc("@action:inmenu menubar:view", "3D View")
  114. onTriggered: UM.Controller.setCameraRotation("3d", 0)
  115. }
  116. Action
  117. {
  118. id: viewFrontCameraAction
  119. text: catalog.i18nc("@action:inmenu menubar:view", "Front View")
  120. onTriggered: UM.Controller.setCameraRotation("home", 0)
  121. }
  122. Action
  123. {
  124. id: viewTopCameraAction
  125. text: catalog.i18nc("@action:inmenu menubar:view", "Top View")
  126. onTriggered: UM.Controller.setCameraRotation("y", 90)
  127. }
  128. Action
  129. {
  130. id: viewBottomCameraAction
  131. text: catalog.i18nc("@action:inmenu menubar:view", "Bottom View")
  132. onTriggered: UM.Controller.setCameraRotation("y", -90)
  133. }
  134. Action
  135. {
  136. id: viewLeftSideCameraAction
  137. text: catalog.i18nc("@action:inmenu menubar:view", "Left Side View")
  138. onTriggered: UM.Controller.setCameraRotation("x", 90)
  139. }
  140. Action
  141. {
  142. id: viewRightSideCameraAction
  143. text: catalog.i18nc("@action:inmenu menubar:view", "Right Side View")
  144. onTriggered: UM.Controller.setCameraRotation("x", -90)
  145. }
  146. Action
  147. {
  148. id: preferencesAction
  149. //On MacOS, don't translate the "Configure" word.
  150. //Qt moves the "configure" entry to a different place, and if it got renamed can't find it again when it
  151. //attempts to delete the item upon closing the application, causing a crash.
  152. //In the new location, these items are translated automatically according to the system's language.
  153. //For more information, see:
  154. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  155. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  156. text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...")
  157. icon.name: "configure"
  158. // on MacOS it us customary to assign the ctrl+, hotkey to open a general settings menu
  159. shortcut: (Qt.platform.os == "osx") ? "Ctrl+," : ""
  160. }
  161. Action
  162. {
  163. id: addMachineAction
  164. text: catalog.i18nc("@action:inmenu menubar:printer", "&Add Printer...")
  165. }
  166. Action
  167. {
  168. id: settingsAction
  169. text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...")
  170. icon.name: "configure"
  171. }
  172. Action
  173. {
  174. id: manageMaterialsAction
  175. text: catalog.i18nc("@action:inmenu", "Manage Materials...")
  176. icon.name: "configure"
  177. shortcut: "Ctrl+K"
  178. }
  179. Action
  180. {
  181. id: marketplaceMaterialsAction
  182. text: catalog.i18nc("@action:inmenu Marketplace is a brand name of UltiMaker's, so don't translate.", "Add more materials from Marketplace")
  183. }
  184. Action
  185. {
  186. id: updateProfileAction
  187. enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null
  188. text: catalog.i18nc("@action:inmenu menubar:profile", "&Update profile with current settings/overrides");
  189. onTriggered: Cura.ContainerManager.updateQualityChanges()
  190. }
  191. Action
  192. {
  193. id: resetProfileAction
  194. enabled: Cura.MachineManager.hasUserSettings
  195. text: catalog.i18nc("@action:inmenu menubar:profile", "&Discard current changes")
  196. onTriggered:
  197. {
  198. forceActiveFocus()
  199. Cura.ContainerManager.clearUserContainers()
  200. }
  201. }
  202. Action
  203. {
  204. id: addProfileAction
  205. enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings
  206. text: catalog.i18nc("@action:inmenu menubar:profile", "&Create profile from current settings/overrides...")
  207. }
  208. Action
  209. {
  210. id: manageProfilesAction
  211. text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...")
  212. icon.name: "configure"
  213. shortcut: "Ctrl+J"
  214. }
  215. Action
  216. {
  217. id: documentationAction
  218. text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation")
  219. icon.name: "help-contents"
  220. shortcut: StandardKey.Help
  221. onTriggered: CuraActions.openDocumentation()
  222. }
  223. Action {
  224. id: reportBugAction
  225. text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug")
  226. icon.name: "tools-report-bug"
  227. onTriggered: CuraActions.openBugReportPage()
  228. }
  229. Action
  230. {
  231. id: whatsNewAction
  232. text: catalog.i18nc("@action:inmenu menubar:help", "What's New")
  233. }
  234. Action
  235. {
  236. id: aboutAction
  237. //On MacOS, don't translate the "About" word.
  238. //Qt moves the "about" entry to a different place, and if it got renamed can't find it again when it
  239. //attempts to delete the item upon closing the application, causing a crash.
  240. //In the new location, these items are translated automatically according to the system's language.
  241. //For more information, see:
  242. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  243. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  244. text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About...")
  245. icon.name: "help-about"
  246. }
  247. Action
  248. {
  249. id: deleteSelectionAction
  250. text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected")
  251. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  252. icon.name: "edit-delete"
  253. shortcut: StandardKey.Delete | "Backspace"
  254. onTriggered: CuraActions.deleteSelection()
  255. }
  256. Action
  257. {
  258. id: centerSelectionAction
  259. text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected")
  260. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  261. icon.name: "align-vertical-center"
  262. onTriggered: CuraActions.centerSelection()
  263. }
  264. Action
  265. {
  266. id: multiplySelectionAction
  267. text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected")
  268. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  269. icon.name: "edit-duplicate"
  270. shortcut: "Ctrl+M"
  271. }
  272. Action
  273. {
  274. id: deleteObjectAction
  275. text: catalog.i18nc("@action:inmenu","Delete Model")
  276. enabled: UM.Controller.toolsEnabled
  277. icon.name: "edit-delete"
  278. }
  279. Action
  280. {
  281. id: centerObjectAction
  282. text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform")
  283. }
  284. Action
  285. {
  286. id: groupObjectsAction
  287. text: catalog.i18nc("@action:inmenu menubar:edit","&Group Models")
  288. enabled: UM.Selection.selectionCount > 1 ? true: false
  289. icon.name: "object-group"
  290. shortcut: "Ctrl+G"
  291. onTriggered: CuraApplication.groupSelected()
  292. }
  293. Action
  294. {
  295. id: reloadQmlAction
  296. onTriggered:
  297. {
  298. CuraApplication.reloadQML()
  299. }
  300. shortcut: "Shift+F5"
  301. }
  302. Action
  303. {
  304. id: unGroupObjectsAction
  305. text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models")
  306. enabled: UM.Selection.isGroupSelected
  307. icon.name: "object-ungroup"
  308. shortcut: "Ctrl+Shift+G"
  309. onTriggered: CuraApplication.ungroupSelected()
  310. }
  311. Action
  312. {
  313. id: mergeObjectsAction
  314. text: catalog.i18nc("@action:inmenu menubar:edit","&Merge Models")
  315. enabled: UM.Selection.selectionCount > 1 ? true: false
  316. icon.name: "merge"
  317. shortcut: "Ctrl+Alt+G"
  318. onTriggered: CuraApplication.mergeSelected()
  319. }
  320. Action
  321. {
  322. id: multiplyObjectAction
  323. text: catalog.i18nc("@action:inmenu","&Multiply Model...")
  324. icon.name: "edit-duplicate"
  325. }
  326. Action
  327. {
  328. id: selectAllAction
  329. text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models")
  330. enabled: UM.Controller.toolsEnabled
  331. icon.name: "edit-select-all"
  332. shortcut: "Ctrl+A"
  333. onTriggered: CuraApplication.selectAll()
  334. }
  335. Action
  336. {
  337. id: deleteAllAction
  338. text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate")
  339. enabled: UM.Controller.toolsEnabled
  340. icon.name: "edit-delete"
  341. shortcut: "Ctrl+D"
  342. onTriggered: CuraApplication.deleteAll()
  343. }
  344. Action
  345. {
  346. id: reloadAllAction
  347. text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models")
  348. icon.name: "document-revert"
  349. shortcut: "F5"
  350. onTriggered: CuraApplication.reloadAll()
  351. }
  352. Action
  353. {
  354. id: arrangeAllAction
  355. text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models")
  356. onTriggered: Printer.arrangeAll()
  357. shortcut: "Ctrl+R"
  358. }
  359. Action
  360. {
  361. id: arrangeSelectionAction
  362. text: catalog.i18nc("@action:inmenu menubar:edit","Arrange Selection")
  363. onTriggered: Printer.arrangeSelection()
  364. }
  365. Action
  366. {
  367. id: resetAllTranslationAction
  368. text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions")
  369. onTriggered: CuraApplication.resetAllTranslation()
  370. }
  371. Action
  372. {
  373. id: resetAllAction
  374. text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations")
  375. onTriggered: CuraApplication.resetAll()
  376. }
  377. Action
  378. {
  379. id: openAction
  380. property var fileProviderModel: CuraApplication.getFileProviderModel()
  381. text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)...")
  382. icon.name: "document-open"
  383. // Unassign the shortcut when there are more than one file providers, since then the file provider's shortcut is
  384. // enabled instead, and Ctrl+O is assigned to the local file provider
  385. shortcut: fileProviderModel.count == 1 ? StandardKey.Open : ""
  386. }
  387. Action
  388. {
  389. id: newProjectAction
  390. text: catalog.i18nc("@action:inmenu menubar:file","&New Project...")
  391. shortcut: StandardKey.New
  392. }
  393. Action
  394. {
  395. id: showProfileFolderAction
  396. text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder")
  397. }
  398. Action
  399. {
  400. id: configureSettingVisibilityAction
  401. text: catalog.i18nc("@action:menu", "Configure setting visibility...")
  402. icon.name: "configure"
  403. }
  404. Action
  405. {
  406. id: browsePackagesAction
  407. text: "&Marketplace"
  408. icon.name: "plugins_browse"
  409. }
  410. }