Actions.qml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. // Copyright (c) 2023 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.5 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 printObjectBeforePrevious: printObjectBeforePreviousAction
  31. property alias printObjectAfterNext: printObjectAfterNextAction
  32. property alias multiplyObject: multiplyObjectAction
  33. property alias dropAll: dropAllAction
  34. property alias selectAll: selectAllAction
  35. property alias deleteAll: deleteAllAction
  36. property alias reloadAll: reloadAllAction
  37. property alias arrangeAll: arrangeAllAction
  38. property alias arrangeAllGrid: arrangeAllGridAction
  39. property alias resetAllTranslation: resetAllTranslationAction
  40. property alias resetAll: resetAllAction
  41. property alias addMachine: addMachineAction
  42. property alias configureMachines: settingsAction
  43. property alias addProfile: addProfileAction
  44. property alias updateProfile: updateProfileAction
  45. property alias resetProfile: resetProfileAction
  46. property alias manageProfiles: manageProfilesAction
  47. property alias manageMaterials: manageMaterialsAction
  48. property alias marketplaceMaterials: marketplaceMaterialsAction
  49. property alias preferences: preferencesAction
  50. property alias showProfileFolder: showProfileFolderAction
  51. property alias documentation: documentationAction
  52. property alias showTroubleshooting: showTroubleShootingAction
  53. property alias openSponsershipPage: openSponsershipPageAction
  54. property alias reportBug: reportBugAction
  55. property alias whatsNew: whatsNewAction
  56. property alias about: aboutAction
  57. property alias toggleFullScreen: toggleFullScreenAction
  58. property alias exitFullScreen: exitFullScreenAction
  59. property alias configureSettingVisibility: configureSettingVisibilityAction
  60. property alias browsePackages: browsePackagesAction
  61. property alias paste: pasteAction
  62. property alias copy: copyAction
  63. property alias cut: cutAction
  64. readonly property bool copy_paste_enabled: {
  65. const all_enabled_packages = CuraApplication.getPackageManager().allEnabledPackages;
  66. return all_enabled_packages.includes("3MFReader") && all_enabled_packages.includes("3MFWriter");
  67. }
  68. UM.I18nCatalog{id: catalog; name: "cura"}
  69. Action
  70. {
  71. id: showTroubleShootingAction
  72. onTriggered: Qt.openUrlExternally("https://ultimaker.com/en/troubleshooting?utm_source=cura&utm_medium=software&utm_campaign=dropdown-troubleshooting")
  73. text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting")
  74. }
  75. Action
  76. {
  77. id: openSponsershipPageAction
  78. onTriggered: Qt.openUrlExternally("https://ultimaker.com/software/ultimaker-cura/sponsor/")
  79. text: catalog.i18nc("@action:inmenu", "Sponsor Cura")
  80. }
  81. Action
  82. {
  83. id: toggleFullScreenAction
  84. shortcut: StandardKey.FullScreen
  85. text: catalog.i18nc("@action:inmenu", "Toggle Full Screen")
  86. icon.name: "view-fullscreen"
  87. }
  88. Action
  89. {
  90. id: exitFullScreenAction
  91. text: catalog.i18nc("@action:inmenu", "Exit Full Screen")
  92. icon.name: "view-fullscreen"
  93. }
  94. Action
  95. {
  96. id: undoAction
  97. text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo")
  98. icon.name: "edit-undo"
  99. shortcut: StandardKey.Undo
  100. onTriggered: CuraActions.undo()
  101. enabled: CuraActions.canUndo
  102. }
  103. Action
  104. {
  105. id: redoAction
  106. text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo")
  107. icon.name: "edit-redo"
  108. shortcut: StandardKey.Redo
  109. onTriggered: CuraActions.redo()
  110. enabled: CuraActions.canRedo
  111. }
  112. Action
  113. {
  114. id: quitAction
  115. //On MacOS, don't translate the "Quit" word.
  116. //Qt moves the "quit" entry to a different place, and if it got renamed can't find it again when it attempts to
  117. //delete the item upon closing the application, causing a crash.
  118. //In the new location, these items are translated automatically according to the system's language.
  119. //For more information, see:
  120. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  121. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  122. text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit")
  123. icon.name: "application-exit"
  124. shortcut: StandardKey.Quit
  125. }
  126. Action
  127. {
  128. id: view3DCameraAction
  129. text: catalog.i18nc("@action:inmenu menubar:view", "3D View")
  130. onTriggered: UM.Controller.setCameraRotation("3d", 0)
  131. }
  132. Action
  133. {
  134. id: viewFrontCameraAction
  135. text: catalog.i18nc("@action:inmenu menubar:view", "Front View")
  136. onTriggered: UM.Controller.setCameraRotation("home", 0)
  137. }
  138. Action
  139. {
  140. id: viewTopCameraAction
  141. text: catalog.i18nc("@action:inmenu menubar:view", "Top View")
  142. onTriggered: UM.Controller.setCameraRotation("y", 90)
  143. }
  144. Action
  145. {
  146. id: viewBottomCameraAction
  147. text: catalog.i18nc("@action:inmenu menubar:view", "Bottom View")
  148. onTriggered: UM.Controller.setCameraRotation("y", -90)
  149. }
  150. Action
  151. {
  152. id: viewLeftSideCameraAction
  153. text: catalog.i18nc("@action:inmenu menubar:view", "Left Side View")
  154. onTriggered: UM.Controller.setCameraRotation("x", 90)
  155. }
  156. Action
  157. {
  158. id: viewRightSideCameraAction
  159. text: catalog.i18nc("@action:inmenu menubar:view", "Right Side View")
  160. onTriggered: UM.Controller.setCameraRotation("x", -90)
  161. }
  162. Action
  163. {
  164. id: preferencesAction
  165. //On MacOS, don't translate the "Configure" word.
  166. //Qt moves the "configure" entry to a different place, and if it got renamed can't find it again when it
  167. //attempts to delete the item upon closing the application, causing a crash.
  168. //In the new location, these items are translated automatically according to the system's language.
  169. //For more information, see:
  170. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  171. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  172. text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...")
  173. icon.name: "configure"
  174. // on MacOS it us customary to assign the ctrl+, hotkey to open a general settings menu
  175. shortcut: (Qt.platform.os == "osx") ? "Ctrl+," : ""
  176. }
  177. Action
  178. {
  179. id: addMachineAction
  180. text: catalog.i18nc("@action:inmenu menubar:printer", "&Add Printer...")
  181. }
  182. Action
  183. {
  184. id: settingsAction
  185. text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...")
  186. icon.name: "configure"
  187. }
  188. Action
  189. {
  190. id: manageMaterialsAction
  191. text: catalog.i18nc("@action:inmenu", "Manage Materials...")
  192. icon.name: "configure"
  193. shortcut: "Ctrl+K"
  194. }
  195. Action
  196. {
  197. id: marketplaceMaterialsAction
  198. text: catalog.i18nc("@action:inmenu Marketplace is a brand name of UltiMaker's, so don't translate.", "Add more materials from Marketplace")
  199. }
  200. Action
  201. {
  202. id: updateProfileAction
  203. enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null
  204. text: catalog.i18nc("@action:inmenu menubar:profile", "&Update profile with current settings/overrides");
  205. onTriggered: Cura.ContainerManager.updateQualityChanges()
  206. }
  207. Action
  208. {
  209. id: resetProfileAction
  210. enabled: Cura.MachineManager.hasUserSettings
  211. text: catalog.i18nc("@action:inmenu menubar:profile", "&Discard current changes")
  212. onTriggered:
  213. {
  214. forceActiveFocus()
  215. Cura.ContainerManager.clearUserContainers()
  216. }
  217. }
  218. Action
  219. {
  220. id: addProfileAction
  221. enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings
  222. text: catalog.i18nc("@action:inmenu menubar:profile", "&Create profile from current settings/overrides...")
  223. }
  224. Action
  225. {
  226. id: manageProfilesAction
  227. text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...")
  228. icon.name: "configure"
  229. shortcut: "Ctrl+J"
  230. }
  231. Action
  232. {
  233. id: documentationAction
  234. text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation")
  235. icon.name: "help-contents"
  236. shortcut: StandardKey.Help
  237. onTriggered: CuraActions.openDocumentation()
  238. }
  239. Action {
  240. id: reportBugAction
  241. text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug")
  242. icon.name: "tools-report-bug"
  243. onTriggered: CuraActions.openBugReportPage()
  244. }
  245. Action
  246. {
  247. id: whatsNewAction
  248. text: catalog.i18nc("@action:inmenu menubar:help", "What's New")
  249. }
  250. Action
  251. {
  252. id: aboutAction
  253. //On MacOS, don't translate the "About" word.
  254. //Qt moves the "about" entry to a different place, and if it got renamed can't find it again when it
  255. //attempts to delete the item upon closing the application, causing a crash.
  256. //In the new location, these items are translated automatically according to the system's language.
  257. //For more information, see:
  258. //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
  259. //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
  260. text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About...")
  261. icon.name: "help-about"
  262. }
  263. Action
  264. {
  265. id: deleteSelectionAction
  266. text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected")
  267. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  268. icon.name: "edit-delete"
  269. shortcut: StandardKey.Delete | "Backspace"
  270. onTriggered: CuraActions.deleteSelection()
  271. }
  272. Action
  273. {
  274. id: centerSelectionAction
  275. text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected")
  276. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  277. icon.name: "align-vertical-center"
  278. onTriggered: CuraActions.centerSelection()
  279. }
  280. Action
  281. {
  282. id: copyAction
  283. text: catalog.i18nc("@action:inmenu menubar:edit", "Copy to clipboard")
  284. onTriggered: CuraActions.copy()
  285. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection && copy_paste_enabled
  286. shortcut: StandardKey.Copy
  287. }
  288. Action
  289. {
  290. id: pasteAction
  291. text: catalog.i18nc("@action:inmenu menubar:edit", "Paste from clipboard")
  292. onTriggered: CuraActions.paste()
  293. enabled: UM.Controller.toolsEnabled && copy_paste_enabled
  294. shortcut: StandardKey.Paste
  295. }
  296. Action
  297. {
  298. id: cutAction
  299. text: catalog.i18nc("@action:inmenu menubar:edit", "Cut")
  300. onTriggered: CuraActions.cut()
  301. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection && copy_paste_enabled
  302. shortcut: StandardKey.Cut
  303. }
  304. Action
  305. {
  306. id: multiplySelectionAction
  307. text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected")
  308. enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
  309. icon.name: "edit-duplicate"
  310. shortcut: "Ctrl+M"
  311. }
  312. Action
  313. {
  314. id: deleteObjectAction
  315. text: catalog.i18nc("@action:inmenu","Delete Model")
  316. enabled: UM.Controller.toolsEnabled
  317. icon.name: "edit-delete"
  318. }
  319. Action
  320. {
  321. id: centerObjectAction
  322. text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform")
  323. }
  324. Action
  325. {
  326. id: groupObjectsAction
  327. text: catalog.i18nc("@action:inmenu menubar:edit","&Group Models")
  328. enabled: UM.Selection.selectionCount > 1 ? true: false
  329. icon.name: "object-group"
  330. shortcut: "Ctrl+G"
  331. onTriggered: CuraApplication.groupSelected()
  332. }
  333. Action
  334. {
  335. id: reloadQmlAction
  336. onTriggered:
  337. {
  338. CuraApplication.reloadQML()
  339. }
  340. shortcut: "Shift+F5"
  341. }
  342. Action
  343. {
  344. id: unGroupObjectsAction
  345. text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models")
  346. enabled: UM.Selection.isGroupSelected
  347. icon.name: "object-ungroup"
  348. shortcut: "Ctrl+Shift+G"
  349. onTriggered: CuraApplication.ungroupSelected()
  350. }
  351. Action
  352. {
  353. id: printObjectBeforePreviousAction
  354. text: catalog.i18nc("@action:inmenu menubar:edit","Print Before") + " " + PrintOrderManager.previousNodeName
  355. enabled: PrintOrderManager.shouldEnablePrintBeforeAction
  356. icon.name: "print-before"
  357. shortcut: "PgUp"
  358. onTriggered: PrintOrderManager.swapSelectedAndPreviousNodes()
  359. }
  360. Action
  361. {
  362. id: printObjectAfterNextAction
  363. text: catalog.i18nc("@action:inmenu menubar:edit","Print After") + " " + PrintOrderManager.nextNodeName
  364. enabled: PrintOrderManager.shouldEnablePrintAfterAction
  365. icon.name: "print-after"
  366. shortcut: "PgDown"
  367. onTriggered: PrintOrderManager.swapSelectedAndNextNodes()
  368. }
  369. Action
  370. {
  371. id: mergeObjectsAction
  372. text: catalog.i18nc("@action:inmenu menubar:edit","&Merge Models")
  373. enabled: UM.Selection.selectionCount > 1 ? true: false
  374. icon.name: "merge"
  375. shortcut: "Ctrl+Alt+G"
  376. onTriggered: CuraApplication.mergeSelected()
  377. }
  378. Action
  379. {
  380. id: multiplyObjectAction
  381. text: catalog.i18nc("@action:inmenu","&Multiply Model...")
  382. icon.name: "edit-duplicate"
  383. }
  384. Action
  385. {
  386. id: selectAllAction
  387. text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models")
  388. enabled: UM.Controller.toolsEnabled
  389. icon.name: "edit-select-all"
  390. shortcut: "Ctrl+A"
  391. onTriggered: CuraApplication.selectAll()
  392. }
  393. Action
  394. {
  395. id: deleteAllAction
  396. text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate")
  397. enabled: UM.Controller.toolsEnabled
  398. icon.name: "edit-delete"
  399. shortcut: "Ctrl+D"
  400. onTriggered: CuraApplication.deleteAll()
  401. }
  402. Action
  403. {
  404. id: reloadAllAction
  405. text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models")
  406. icon.name: "document-revert"
  407. shortcut: "F5"
  408. onTriggered: CuraApplication.reloadAll()
  409. }
  410. Action
  411. {
  412. id: arrangeAllAction
  413. text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models")
  414. onTriggered: Printer.arrangeAll()
  415. shortcut: "Ctrl+R"
  416. }
  417. Action
  418. {
  419. id: arrangeAllGridAction
  420. text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models in a grid")
  421. onTriggered: Printer.arrangeAllInGrid()
  422. shortcut: "Shift+Ctrl+R"
  423. }
  424. Action
  425. {
  426. id: dropAllAction
  427. text: catalog.i18nc("@action:inmenu menubar:edit","Drop All Models to buildplate")
  428. shortcut: "Ctrl+B"
  429. onTriggered: CuraApplication.setWorkplaceDropToBuildplate()
  430. }
  431. Action
  432. {
  433. id: resetAllTranslationAction
  434. text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions")
  435. onTriggered: CuraApplication.resetAllTranslation()
  436. }
  437. Action
  438. {
  439. id: resetAllAction
  440. text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations")
  441. onTriggered: CuraApplication.resetAll()
  442. }
  443. Action
  444. {
  445. id: openAction
  446. property var fileProviderModel: CuraApplication.getFileProviderModel()
  447. text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)...")
  448. icon.name: "document-open"
  449. // Unassign the shortcut when there are more than one file providers, since then the file provider's shortcut is
  450. // enabled instead, and Ctrl+O is assigned to the local file provider
  451. shortcut: fileProviderModel.count == 1 ? StandardKey.Open : ""
  452. }
  453. Action
  454. {
  455. id: arrangeSelectionAction
  456. text: catalog.i18nc("@action:inmenu menubar:edit", "Arrange Selection")
  457. onTriggered: Printer.arrangeSelection()
  458. }
  459. Action
  460. {
  461. id: newProjectAction
  462. text: catalog.i18nc("@action:inmenu menubar:file","&New Project...")
  463. shortcut: StandardKey.New
  464. }
  465. Action
  466. {
  467. id: showProfileFolderAction
  468. text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder")
  469. }
  470. Action
  471. {
  472. id: configureSettingVisibilityAction
  473. text: catalog.i18nc("@action:menu", "Configure setting visibility...")
  474. icon.name: "configure"
  475. }
  476. Action
  477. {
  478. id: browsePackagesAction
  479. text: "&Marketplace"
  480. icon.name: "plugins_browse"
  481. }
  482. }