Merge pull request #11236 from Ultimaker/CURA-8683_replace_controls_windows_and_menus

Switch out the file, view and edit menu for controls 2
This commit is contained in:
Jaime van Kessel 2022-01-13 09:08:37 +01:00 committed by GitHub
commit 97bf50d56c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 523 additions and 603 deletions

View File

@ -4,69 +4,68 @@
pragma Singleton pragma Singleton
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 1.1 import QtQuick.Controls 2.4
import QtQuick.Controls 2.3 as Controls2
import UM 1.1 as UM import UM 1.1 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Item Item
{ {
property alias newProject: newProjectAction; property alias newProject: newProjectAction
property alias open: openAction; property alias open: openAction
property alias quit: quitAction; property alias quit: quitAction
property alias undo: undoAction; property alias undo: undoAction
property alias redo: redoAction; property alias redo: redoAction
property alias view3DCamera: view3DCameraAction; property alias view3DCamera: view3DCameraAction
property alias viewFrontCamera: viewFrontCameraAction; property alias viewFrontCamera: viewFrontCameraAction
property alias viewTopCamera: viewTopCameraAction; property alias viewTopCamera: viewTopCameraAction
property alias viewBottomCamera: viewBottomCameraAction; property alias viewBottomCamera: viewBottomCameraAction
property alias viewLeftSideCamera: viewLeftSideCameraAction; property alias viewLeftSideCamera: viewLeftSideCameraAction
property alias viewRightSideCamera: viewRightSideCameraAction; property alias viewRightSideCamera: viewRightSideCameraAction
property alias deleteSelection: deleteSelectionAction; property alias deleteSelection: deleteSelectionAction
property alias centerSelection: centerSelectionAction; property alias centerSelection: centerSelectionAction
property alias multiplySelection: multiplySelectionAction; property alias multiplySelection: multiplySelectionAction
property alias deleteObject: deleteObjectAction; property alias deleteObject: deleteObjectAction
property alias centerObject: centerObjectAction; property alias centerObject: centerObjectAction
property alias groupObjects: groupObjectsAction; property alias groupObjects: groupObjectsAction
property alias unGroupObjects:unGroupObjectsAction; property alias unGroupObjects:unGroupObjectsAction
property alias mergeObjects: mergeObjectsAction; property alias mergeObjects: mergeObjectsAction
//property alias unMergeObjects: unMergeObjectsAction; //property alias unMergeObjects: unMergeObjectsAction
property alias multiplyObject: multiplyObjectAction; property alias multiplyObject: multiplyObjectAction
property alias selectAll: selectAllAction; property alias selectAll: selectAllAction
property alias deleteAll: deleteAllAction; property alias deleteAll: deleteAllAction
property alias reloadAll: reloadAllAction; property alias reloadAll: reloadAllAction
property alias arrangeAllBuildPlates: arrangeAllBuildPlatesAction; property alias arrangeAllBuildPlates: arrangeAllBuildPlatesAction
property alias arrangeAll: arrangeAllAction; property alias arrangeAll: arrangeAllAction
property alias arrangeSelection: arrangeSelectionAction; property alias arrangeSelection: arrangeSelectionAction
property alias resetAllTranslation: resetAllTranslationAction; property alias resetAllTranslation: resetAllTranslationAction
property alias resetAll: resetAllAction; property alias resetAll: resetAllAction
property alias addMachine: addMachineAction; property alias addMachine: addMachineAction
property alias configureMachines: settingsAction; property alias configureMachines: settingsAction
property alias addProfile: addProfileAction; property alias addProfile: addProfileAction
property alias updateProfile: updateProfileAction; property alias updateProfile: updateProfileAction
property alias resetProfile: resetProfileAction; property alias resetProfile: resetProfileAction
property alias manageProfiles: manageProfilesAction; property alias manageProfiles: manageProfilesAction
property alias manageMaterials: manageMaterialsAction; property alias manageMaterials: manageMaterialsAction
property alias marketplaceMaterials: marketplaceMaterialsAction; property alias marketplaceMaterials: marketplaceMaterialsAction
property alias preferences: preferencesAction; property alias preferences: preferencesAction
property alias showProfileFolder: showProfileFolderAction; property alias showProfileFolder: showProfileFolderAction
property alias documentation: documentationAction; property alias documentation: documentationAction
property alias showTroubleshooting: showTroubleShootingAction property alias showTroubleshooting: showTroubleShootingAction
property alias reportBug: reportBugAction; property alias reportBug: reportBugAction
property alias whatsNew: whatsNewAction property alias whatsNew: whatsNewAction
property alias about: aboutAction; property alias about: aboutAction
property alias toggleFullScreen: toggleFullScreenAction; property alias toggleFullScreen: toggleFullScreenAction
property alias exitFullScreen: exitFullScreenAction property alias exitFullScreen: exitFullScreenAction
property alias configureSettingVisibility: configureSettingVisibilityAction property alias configureSettingVisibility: configureSettingVisibilityAction
@ -80,7 +79,7 @@ Item
{ {
id: showTroubleShootingAction id: showTroubleShootingAction
onTriggered: Qt.openUrlExternally("https://ultimaker.com/en/troubleshooting?utm_source=cura&utm_medium=software&utm_campaign=dropdown-troubleshooting") onTriggered: Qt.openUrlExternally("https://ultimaker.com/en/troubleshooting?utm_source=cura&utm_medium=software&utm_campaign=dropdown-troubleshooting")
text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting Guide"); text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting Guide")
} }
Action Action
@ -88,7 +87,7 @@ Item
id: toggleFullScreenAction id: toggleFullScreenAction
shortcut: StandardKey.FullScreen shortcut: StandardKey.FullScreen
text: catalog.i18nc("@action:inmenu", "Toggle Full Screen") text: catalog.i18nc("@action:inmenu", "Toggle Full Screen")
iconName: "view-fullscreen" icon.name: "view-fullscreen"
} }
Action Action
@ -96,27 +95,27 @@ Item
id: exitFullScreenAction id: exitFullScreenAction
shortcut: StandardKey.Cancel shortcut: StandardKey.Cancel
text: catalog.i18nc("@action:inmenu", "Exit Full Screen") text: catalog.i18nc("@action:inmenu", "Exit Full Screen")
iconName: "view-fullscreen" icon.name: "view-fullscreen"
} }
Action Action
{ {
id: undoAction; id: undoAction
text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo"); text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo")
iconName: "edit-undo"; icon.name: "edit-undo"
shortcut: StandardKey.Undo; shortcut: StandardKey.Undo
onTriggered: UM.OperationStack.undo(); onTriggered: UM.OperationStack.undo()
enabled: UM.OperationStack.canUndo; enabled: UM.OperationStack.canUndo
} }
Action Action
{ {
id: redoAction; id: redoAction
text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo"); text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo")
iconName: "edit-redo"; icon.name: "edit-redo"
shortcut: StandardKey.Redo; shortcut: StandardKey.Redo
onTriggered: UM.OperationStack.redo(); onTriggered: UM.OperationStack.redo()
enabled: UM.OperationStack.canRedo; enabled: UM.OperationStack.canRedo
} }
Action Action
@ -131,7 +130,7 @@ Item
//- https://doc.qt.io/qt-5/macos-issues.html#menu-bar //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
//- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit") text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit")
iconName: "application-exit" icon.name: "application-exit"
shortcut: StandardKey.Quit shortcut: StandardKey.Quit
} }
@ -188,7 +187,7 @@ Item
//- https://doc.qt.io/qt-5/macos-issues.html#menu-bar //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
//- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...") text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...")
iconName: "configure" icon.name: "configure"
} }
Action Action
@ -201,14 +200,14 @@ Item
{ {
id: settingsAction id: settingsAction
text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...") text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...")
iconName: "configure" icon.name: "configure"
} }
Action Action
{ {
id: manageMaterialsAction id: manageMaterialsAction
text: catalog.i18nc("@action:inmenu", "Manage Materials...") text: catalog.i18nc("@action:inmenu", "Manage Materials...")
iconName: "configure" icon.name: "configure"
shortcut: "Ctrl+K" shortcut: "Ctrl+K"
} }
@ -220,64 +219,64 @@ Item
Action Action
{ {
id: updateProfileAction; id: updateProfileAction
enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null
text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings/overrides"); text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings/overrides")
onTriggered: Cura.ContainerManager.updateQualityChanges(); onTriggered: Cura.ContainerManager.updateQualityChanges()
} }
Action Action
{ {
id: resetProfileAction; id: resetProfileAction
enabled: Cura.MachineManager.hasUserSettings enabled: Cura.MachineManager.hasUserSettings
text: catalog.i18nc("@action:inmenu menubar:profile", "&Discard current changes"); text: catalog.i18nc("@action:inmenu menubar:profile", "&Discard current changes")
onTriggered: onTriggered:
{ {
forceActiveFocus(); forceActiveFocus()
Cura.ContainerManager.clearUserContainers(); Cura.ContainerManager.clearUserContainers()
} }
} }
Action Action
{ {
id: addProfileAction; id: addProfileAction
enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings
text: catalog.i18nc("@action:inmenu menubar:profile", "&Create profile from current settings/overrides..."); text: catalog.i18nc("@action:inmenu menubar:profile", "&Create profile from current settings/overrides...")
} }
Action Action
{ {
id: manageProfilesAction id: manageProfilesAction
text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...") text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...")
iconName: "configure" icon.name: "configure"
shortcut: "Ctrl+J" shortcut: "Ctrl+J"
} }
Action Action
{ {
id: documentationAction; id: documentationAction
text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation"); text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation")
iconName: "help-contents"; icon.name: "help-contents"
shortcut: StandardKey.Help; shortcut: StandardKey.Help
onTriggered: CuraActions.openDocumentation(); onTriggered: CuraActions.openDocumentation()
} }
Action { Action {
id: reportBugAction; id: reportBugAction
text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug"); text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug")
iconName: "tools-report-bug"; icon.name: "tools-report-bug"
onTriggered: CuraActions.openBugReportPage(); onTriggered: CuraActions.openBugReportPage()
} }
Action Action
{ {
id: whatsNewAction; id: whatsNewAction
text: catalog.i18nc("@action:inmenu menubar:help", "What's New"); text: catalog.i18nc("@action:inmenu menubar:help", "What's New")
} }
Action Action
{ {
id: aboutAction; id: aboutAction
//On MacOS, don't translate the "About" word. //On MacOS, don't translate the "About" word.
//Qt moves the "about" entry to a different place, and if it got renamed can't find it again when it //Qt moves the "about" entry to a different place, and if it got renamed can't find it again when it
@ -286,60 +285,60 @@ Item
//For more information, see: //For more information, see:
//- https://doc.qt.io/qt-5/macos-issues.html#menu-bar //- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
//- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar //- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About..."); text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About...")
iconName: "help-about"; icon.name: "help-about"
} }
Action Action
{ {
id: deleteSelectionAction; id: deleteSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected"); text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
iconName: "edit-delete"; icon.name: "edit-delete"
shortcut: StandardKey.Delete | "Backspace" shortcut: StandardKey.Delete | "Backspace"
onTriggered: CuraActions.deleteSelection(); onTriggered: CuraActions.deleteSelection()
} }
Action Action
{ {
id: centerSelectionAction; id: centerSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected"); text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
iconName: "align-vertical-center"; icon.name: "align-vertical-center"
onTriggered: CuraActions.centerSelection(); onTriggered: CuraActions.centerSelection()
} }
Action Action
{ {
id: multiplySelectionAction; id: multiplySelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected"); text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
iconName: "edit-duplicate"; icon.name: "edit-duplicate"
shortcut: "Ctrl+M" shortcut: "Ctrl+M"
} }
Action Action
{ {
id: deleteObjectAction; id: deleteObjectAction
text: catalog.i18nc("@action:inmenu","Delete Model"); text: catalog.i18nc("@action:inmenu","Delete Model")
enabled: UM.Controller.toolsEnabled; enabled: UM.Controller.toolsEnabled
iconName: "edit-delete"; icon.name: "edit-delete"
} }
Action Action
{ {
id: centerObjectAction; id: centerObjectAction
text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform"); text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform")
} }
Action Action
{ {
id: groupObjectsAction id: groupObjectsAction
text: catalog.i18nc("@action:inmenu menubar:edit","&Group Models"); text: catalog.i18nc("@action:inmenu menubar:edit","&Group Models")
enabled: UM.Selection.selectionCount > 1 ? true: false enabled: UM.Selection.selectionCount > 1 ? true: false
iconName: "object-group" icon.name: "object-group"
shortcut: "Ctrl+G"; shortcut: "Ctrl+G"
onTriggered: CuraApplication.groupSelected(); onTriggered: CuraApplication.groupSelected()
} }
Action Action
@ -355,132 +354,132 @@ Item
Action Action
{ {
id: unGroupObjectsAction id: unGroupObjectsAction
text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models"); text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models")
enabled: UM.Selection.isGroupSelected enabled: UM.Selection.isGroupSelected
iconName: "object-ungroup" icon.name: "object-ungroup"
shortcut: "Ctrl+Shift+G"; shortcut: "Ctrl+Shift+G"
onTriggered: CuraApplication.ungroupSelected(); onTriggered: CuraApplication.ungroupSelected()
} }
Action Action
{ {
id: mergeObjectsAction id: mergeObjectsAction
text: catalog.i18nc("@action:inmenu menubar:edit","&Merge Models"); text: catalog.i18nc("@action:inmenu menubar:edit","&Merge Models")
enabled: UM.Selection.selectionCount > 1 ? true: false enabled: UM.Selection.selectionCount > 1 ? true: false
iconName: "merge"; icon.name: "merge"
shortcut: "Ctrl+Alt+G"; shortcut: "Ctrl+Alt+G"
onTriggered: CuraApplication.mergeSelected(); onTriggered: CuraApplication.mergeSelected()
} }
Action Action
{ {
id: multiplyObjectAction; id: multiplyObjectAction
text: catalog.i18nc("@action:inmenu","&Multiply Model..."); text: catalog.i18nc("@action:inmenu","&Multiply Model...")
iconName: "edit-duplicate" icon.name: "edit-duplicate"
} }
Action Action
{ {
id: selectAllAction; id: selectAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models"); text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models")
enabled: UM.Controller.toolsEnabled; enabled: UM.Controller.toolsEnabled
iconName: "edit-select-all"; icon.name: "edit-select-all"
shortcut: "Ctrl+A"; shortcut: "Ctrl+A"
onTriggered: CuraApplication.selectAll(); onTriggered: CuraApplication.selectAll()
} }
Action Action
{ {
id: deleteAllAction; id: deleteAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate"); text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate")
enabled: UM.Controller.toolsEnabled; enabled: UM.Controller.toolsEnabled
iconName: "edit-delete"; icon.name: "edit-delete"
shortcut: "Ctrl+D"; shortcut: "Ctrl+D"
onTriggered: CuraApplication.deleteAll(); onTriggered: CuraApplication.deleteAll()
} }
Action Action
{ {
id: reloadAllAction; id: reloadAllAction
text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models"); text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models")
iconName: "document-revert"; icon.name: "document-revert"
shortcut: "F5" shortcut: "F5"
onTriggered: CuraApplication.reloadAll(); onTriggered: CuraApplication.reloadAll()
} }
Action Action
{ {
id: arrangeAllBuildPlatesAction; id: arrangeAllBuildPlatesAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models To All Build Plates"); text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models To All Build Plates")
onTriggered: Printer.arrangeObjectsToAllBuildPlates(); onTriggered: Printer.arrangeObjectsToAllBuildPlates()
} }
Action Action
{ {
id: arrangeAllAction; id: arrangeAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models"); text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models")
onTriggered: Printer.arrangeAll(); onTriggered: Printer.arrangeAll()
shortcut: "Ctrl+R"; shortcut: "Ctrl+R"
} }
Action Action
{ {
id: arrangeSelectionAction; id: arrangeSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange Selection"); text: catalog.i18nc("@action:inmenu menubar:edit","Arrange Selection")
onTriggered: Printer.arrangeSelection(); onTriggered: Printer.arrangeSelection()
} }
Action Action
{ {
id: resetAllTranslationAction; id: resetAllTranslationAction
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions"); text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions")
onTriggered: CuraApplication.resetAllTranslation(); onTriggered: CuraApplication.resetAllTranslation()
} }
Action Action
{ {
id: resetAllAction; id: resetAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations"); text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations")
onTriggered: CuraApplication.resetAll(); onTriggered: CuraApplication.resetAll()
} }
Action Action
{ {
id: openAction; id: openAction
property var fileProviderModel: CuraApplication.getFileProviderModel() property var fileProviderModel: CuraApplication.getFileProviderModel()
text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)..."); text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)...")
iconName: "document-open"; icon.name: "document-open"
// Unassign the shortcut when there are more than one file providers, since then the file provider's shortcut is // Unassign the shortcut when there are more than one file providers, since then the file provider's shortcut is
// enabled instead, and Ctrl+O is assigned to the local file provider // enabled instead, and Ctrl+O is assigned to the local file provider
shortcut: fileProviderModel.count == 1 ? StandardKey.Open : ""; shortcut: fileProviderModel.count == 1 ? StandardKey.Open : ""
} }
Action Action
{ {
id: newProjectAction id: newProjectAction
text: catalog.i18nc("@action:inmenu menubar:file","&New Project..."); text: catalog.i18nc("@action:inmenu menubar:file","&New Project...")
shortcut: StandardKey.New shortcut: StandardKey.New
} }
Action Action
{ {
id: showProfileFolderAction; id: showProfileFolderAction
text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder"); text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder")
} }
Action Action
{ {
id: configureSettingVisibilityAction id: configureSettingVisibilityAction
text: catalog.i18nc("@action:menu", "Configure setting visibility..."); text: catalog.i18nc("@action:menu", "Configure setting visibility...")
iconName: "configure" icon.name: "configure"
} }
Action Action
{ {
id: browsePackagesAction id: browsePackagesAction
text: catalog.i18nc("@action:menu", "&Marketplace") text: catalog.i18nc("@action:menu", "&Marketplace")
iconName: "plugins_browse" icon.name: "plugins_browse"
} }
} }

View File

@ -6,8 +6,8 @@ import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2 import QtQuick.Dialogs 1.2
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import QtQuick.Controls 2.15 as NewControls
import UM 1.3 as UM import UM 1.5 as UM
import Cura 1.1 as Cura import Cura 1.1 as Cura
import "Dialogs" import "Dialogs"
@ -160,7 +160,6 @@ UM.MainWindow
ApplicationMenu ApplicationMenu
{ {
id: applicationMenu id: applicationMenu
window: base
} }
Item Item

View File

@ -2,11 +2,10 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2 import QtQuick.Dialogs 1.2
import UM 1.3 as UM import UM 1.5 as UM
import Cura 1.1 as Cura import Cura 1.1 as Cura
import "../Menus" import "../Menus"
@ -15,37 +14,19 @@ import "../Dialogs"
Item Item
{ {
id: menu id: menu
width: applicationMenu.width width: parent.width
height: applicationMenu.height height: applicationMenu.height
property alias window: applicationMenu.window
UM.ApplicationMenu MenuBar
{ {
id: applicationMenu id: applicationMenu
width: parent.width
FileMenu {}
FileMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&File") } EditMenu {}
ViewMenu {}
Menu background: Rectangle {}
{
title: catalog.i18nc("@title:menu menubar:toplevel", "&Edit")
MenuItem { action: Cura.Actions.undo }
MenuItem { action: Cura.Actions.redo }
MenuSeparator { }
MenuItem { action: Cura.Actions.selectAll }
MenuItem { action: Cura.Actions.arrangeAll }
MenuItem { action: Cura.Actions.multiplySelection }
MenuItem { action: Cura.Actions.deleteSelection }
MenuItem { action: Cura.Actions.deleteAll }
MenuItem { action: Cura.Actions.resetAllTranslation }
MenuItem { action: Cura.Actions.resetAll }
MenuSeparator { }
MenuItem { action: Cura.Actions.groupObjects }
MenuItem { action: Cura.Actions.mergeObjects }
MenuItem { action: Cura.Actions.unGroupObjects }
}
ViewMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") }
SettingsMenu SettingsMenu
{ {
@ -59,92 +40,14 @@ Item
title: (Qt.platform.os == "osx") ? "&Settings" : catalog.i18nc("@title:menu menubar:toplevel", "&Settings") title: (Qt.platform.os == "osx") ? "&Settings" : catalog.i18nc("@title:menu menubar:toplevel", "&Settings")
} }
Menu ExtensionMenu {}
{
id: extensionMenu
title: catalog.i18nc("@title:menu menubar:toplevel", "E&xtensions")
Instantiator PreferencesMenu {}
{
id: extensions
model: UM.ExtensionModel { }
Menu HelpMenu {}
{
id: sub_menu
title: model.name;
visible: actions != null
enabled: actions != null
Instantiator
{
model: actions
Loader
{
property var extensionsModel: extensions.model
property var modelText: model.text
property var extensionName: name
sourceComponent: modelText.trim() == "" ? extensionsMenuSeparator : extensionsMenuItem
} }
onObjectAdded: sub_menu.insertItem(index, object.item)
onObjectRemoved: sub_menu.removeItem(object.item)
}
}
onObjectAdded: extensionMenu.insertItem(index, object)
onObjectRemoved: extensionMenu.removeItem(object)
}
}
Menu
{
id: preferencesMenu
//On MacOS, don't translate the "Preferences" word.
//Qt moves the "preferences" entry to a different place, and if it got renamed can't find it again when it
//attempts to delete the item upon closing the application, causing a crash.
//In the new location, these items are translated automatically according to the system's language.
//For more information, see:
//- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
//- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
title: (Qt.platform.os == "osx") ? "&Preferences" : catalog.i18nc("@title:menu menubar:toplevel", "P&references")
MenuItem { action: Cura.Actions.preferences }
}
Menu
{
id: helpMenu
title: catalog.i18nc("@title:menu menubar:toplevel", "&Help")
MenuItem { action: Cura.Actions.showProfileFolder }
MenuItem { action: Cura.Actions.showTroubleshooting}
MenuItem { action: Cura.Actions.documentation }
MenuItem { action: Cura.Actions.reportBug }
MenuSeparator { }
MenuItem { action: Cura.Actions.whatsNew }
MenuItem { action: Cura.Actions.about }
}
}
Component
{
id: extensionsMenuItem
MenuItem
{
text: modelText
onTriggered: extensionsModel.subMenuTriggered(extensionName, modelText)
}
}
Component
{
id: extensionsMenuSeparator
MenuSeparator {}
}
// ############################################################################################### // ###############################################################################################
@ -174,11 +77,6 @@ Item
} }
} }
UM.ExtensionModel
{
id: curaExtensions
}
// ############################################################################################### // ###############################################################################################
// Definition of all the connections // Definition of all the connections
// ############################################################################################### // ###############################################################################################

View File

@ -3,7 +3,6 @@
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import UM 1.5 as UM import UM 1.5 as UM
@ -19,7 +18,7 @@ Cura.ExpandablePopup
id: base id: base
property var extrudersModel: CuraApplication.getExtrudersModel() property var extrudersModel: CuraApplication.getExtrudersModel()
property var activeMachine: Cura.MachineManager.activeMachine
UM.I18nCatalog UM.I18nCatalog
{ {
id: catalog id: catalog
@ -33,7 +32,7 @@ Cura.ExpandablePopup
} }
contentPadding: UM.Theme.getSize("default_lining").width contentPadding: UM.Theme.getSize("default_lining").width
enabled: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasMaterials || Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasVariantBuildplates : false; //Only let it drop down if there is any configuration that you could change. enabled: activeMachine ? activeMachine.hasMaterials || activeMachine.hasVariants || activeMachine.hasVariantBuildplates : false; //Only let it drop down if there is any configuration that you could change.
headerItem: Item headerItem: Item
{ {
@ -44,7 +43,7 @@ Cura.ExpandablePopup
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
width: parent.width - UM.Theme.getSize("standard_arrow").width width: parent.width - UM.Theme.getSize("standard_arrow").width
visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasMaterials : false visible: activeMachine ? activeMachine.hasMaterials : false
Repeater Repeater
{ {
model: extrudersModel model: extrudersModel
@ -56,9 +55,9 @@ Cura.ExpandablePopup
Layout.maximumWidth: Math.round(parent.width / extrudersModel.count) Layout.maximumWidth: Math.round(parent.width / extrudersModel.count)
Layout.fillHeight: true Layout.fillHeight: true
property var extruderStack: Cura.MachineManager.activeMachine.extruders[model.index] property var extruderStack: activeMachine ? activeMachine.extruders[model.index]: null
property bool valueWarning: !Cura.ExtruderManager.getExtruderHasQualityForMaterial(extruderStack) property bool valueWarning: !Cura.ExtruderManager.getExtruderHasQualityForMaterial(extruderStack)
property bool valueError: Cura.ContainerManager.getContainerMetaDataEntry(extruderStack.material.id, "compatible", "") != "True" property bool valueError: activeMachine ? Cura.ContainerManager.getContainerMetaDataEntry(extruderStack.material.id, "compatible", "") != "True" : false
// Extruder icon. Shows extruder index and has the same color as the active material. // Extruder icon. Shows extruder index and has the same color as the active material.
Cura.ExtruderIcon Cura.ExtruderIcon
@ -224,7 +223,7 @@ Cura.ExpandablePopup
{ {
id: variantLabel id: variantLabel
visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasVariants : false visible: activeMachine ? activeMachine.hasVariants : false
text: model.variant text: model.variant
elide: Text.ElideRight elide: Text.ElideRight
@ -243,7 +242,7 @@ Cura.ExpandablePopup
elide: Text.ElideRight elide: Text.ElideRight
font: UM.Theme.getFont("medium") font: UM.Theme.getFont("medium")
visible: Cura.MachineManager.activeMachine ? !Cura.MachineManager.activeMachine.hasMaterials && (Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasVariantBuildplates) : false visible: activeMachine ? !activeMachine.hasMaterials && (activeMachine.hasVariants || activeMachine.hasVariantBuildplates) : false
anchors anchors
{ {
@ -268,7 +267,7 @@ Cura.ExpandablePopup
onVisibleChanged: onVisibleChanged:
{ {
is_connected = Cura.MachineManager.activeMachine.hasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate. is_connected = activeMachine.hasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate.
// If the printer is not connected or does not have configurations, we switch always to the custom mode. If is connected instead, the auto mode // If the printer is not connected or does not have configurations, we switch always to the custom mode. If is connected instead, the auto mode
// or the previous state is selected // or the previous state is selected

View File

@ -35,7 +35,7 @@ Item
} }
} }
//Printer type selector. // Printer type selector.
Item Item
{ {
id: printerTypeSelectorRow id: printerTypeSelectorRow
@ -64,17 +64,18 @@ Item
anchors.left: parent.left anchors.left: parent.left
} }
OldControls.ToolButton Button
{ {
id: printerTypeSelector id: printerTypeSelector
text: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.definition.name: "" text: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.definition.name: ""
tooltip: text
height: UM.Theme.getSize("print_setup_big_item").height height: UM.Theme.getSize("print_setup_big_item").height
width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width
anchors.right: parent.right anchors.right: parent.right
style: UM.Theme.styles.print_setup_header_button onClicked: menu.open()
//style: UM.Theme.styles.print_setup_header_button
menu: Cura.PrinterTypeMenu { } Cura.PrinterTypeMenu { id: menu}
} }
} }

View File

@ -2,11 +2,11 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import QtQuick.Dialogs 1.2 import QtQuick.Dialogs 1.2
import QtQuick.Window 2.1 import QtQuick.Window 2.1
import UM 1.2 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
@ -18,79 +18,59 @@ Menu
property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel() property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel()
// Selection-related actions. // Selection-related actions.
MenuItem { action: Cura.Actions.centerSelection; } UM.MenuItem { action: Cura.Actions.centerSelection; }
MenuItem { action: Cura.Actions.deleteSelection; } UM.MenuItem { action: Cura.Actions.deleteSelection; }
MenuItem { action: Cura.Actions.multiplySelection; } UM.MenuItem { action: Cura.Actions.multiplySelection; }
// Extruder selection - only visible if there is more than 1 extruder // Extruder selection - only visible if there is more than 1 extruder
MenuSeparator { visible: base.shouldShowExtruders } MenuSeparator { visible: base.shouldShowExtruders }
MenuItem { id: extruderHeader; text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount); enabled: false; visible: base.shouldShowExtruders } UM.MenuItem
{
id: extruderHeader
text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount)
enabled: false
visible: base.shouldShowExtruders
height: visible ? implicitHeight: 0
}
Instantiator Instantiator
{ {
model: CuraApplication.getExtrudersModel() model: CuraApplication.getExtrudersModel()
MenuItem { UM.MenuItem
{
text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant) text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant)
visible: base.shouldShowExtruders visible: base.shouldShowExtruders
height: visible ? implicitHeight: 0
enabled: UM.Selection.hasSelection && model.enabled enabled: UM.Selection.hasSelection && model.enabled
checkable: true checkable: true
checked: Cura.ExtruderManager.selectedObjectExtruders.indexOf(model.id) != -1 checked: Cura.ExtruderManager.selectedObjectExtruders.indexOf(model.id) != -1
onTriggered: CuraActions.setExtruderForSelection(model.id) onTriggered: CuraActions.setExtruderForSelection(model.id)
shortcut: "Ctrl+" + (model.index + 1) shortcut: "Ctrl+" + (model.index + 1)
} }
onObjectAdded: base.insertItem(index, object) // Add it to the fifth position (and above) as we want it to be added after the extruder header.
onObjectAdded: base.insertItem(index + 5, object)
onObjectRemoved: base.removeItem(object) onObjectRemoved: base.removeItem(object)
} }
MenuSeparator {
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
}
Instantiator
{
model: base.multiBuildPlateModel
MenuItem {
enabled: UM.Selection.hasSelection
text: base.multiBuildPlateModel.getItem(index).name;
onTriggered: CuraActions.setBuildPlateForSelection(base.multiBuildPlateModel.getItem(index).buildPlateNumber);
checkable: true
checked: base.multiBuildPlateModel.selectionBuildPlates.indexOf(base.multiBuildPlateModel.getItem(index).buildPlateNumber) != -1;
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
}
onObjectAdded: base.insertItem(index, object);
onObjectRemoved: base.removeItem(object);
}
MenuItem {
enabled: UM.Selection.hasSelection
text: "New build plate";
onTriggered: {
CuraActions.setBuildPlateForSelection(base.multiBuildPlateModel.maxBuildPlate + 1);
checked = false;
}
checkable: true
checked: false
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
}
// Global actions // Global actions
MenuSeparator {} MenuSeparator {}
MenuItem { action: Cura.Actions.selectAll; } UM.MenuItem { action: Cura.Actions.selectAll }
MenuItem { action: Cura.Actions.arrangeAll; } UM.MenuItem { action: Cura.Actions.arrangeAll }
MenuItem { action: Cura.Actions.deleteAll; } UM.MenuItem { action: Cura.Actions.deleteAll }
MenuItem { action: Cura.Actions.reloadAll; } UM.MenuItem { action: Cura.Actions.reloadAll }
MenuItem { action: Cura.Actions.resetAllTranslation; } UM.MenuItem { action: Cura.Actions.resetAllTranslation }
MenuItem { action: Cura.Actions.resetAll; } UM.MenuItem { action: Cura.Actions.resetAll }
// Group actions // Group actions
MenuSeparator {} MenuSeparator {}
MenuItem { action: Cura.Actions.groupObjects; } UM.MenuItem { action: Cura.Actions.groupObjects }
MenuItem { action: Cura.Actions.mergeObjects; } UM.MenuItem { action: Cura.Actions.mergeObjects }
MenuItem { action: Cura.Actions.unGroupObjects; } UM.MenuItem { action: Cura.Actions.unGroupObjects }
Connections Connections
{ {
target: UM.Controller target: UM.Controller
function onContextMenuRequested() { base.popup(); } function onContextMenuRequested() { base.popup() }
} }
Connections Connections
@ -146,31 +126,9 @@ Menu
{ {
id: copiesField id: copiesField
focus: true focus: true
minimumValue: 1 from: 1
maximumValue: 99 to: 99
} }
} }
} }
// Find the index of an item in the list of child items of this menu.
//
// This is primarily intended as a helper function so we do not have to
// hard-code the position of the extruder selection actions.
//
// \param item The item to find the index of.
//
// \return The index of the item or -1 if it was not found.
function findItemIndex(item)
{
for(var i in base.items)
{
if(base.items[i] == item)
{
return i;
}
}
return -1;
}
UM.I18nCatalog { id: catalog; name: "cura" }
} }

View File

@ -0,0 +1,28 @@
// Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 2.1
import UM 1.6 as UM
import Cura 1.0 as Cura
Menu
{
title: catalog.i18nc("@title:menu menubar:toplevel", "&Edit")
UM.MenuItem { action: Cura.Actions.undo }
UM.MenuItem { action: Cura.Actions.redo }
MenuSeparator { }
UM.MenuItem { action: Cura.Actions.selectAll }
UM.MenuItem { action: Cura.Actions.arrangeAll }
UM.MenuItem { action: Cura.Actions.multiplySelection }
UM.MenuItem { action: Cura.Actions.deleteSelection }
UM.MenuItem { action: Cura.Actions.deleteAll }
UM.MenuItem { action: Cura.Actions.resetAllTranslation }
UM.MenuItem { action: Cura.Actions.resetAll }
MenuSeparator { }
UM.MenuItem { action: Cura.Actions.groupObjects }
UM.MenuItem { action: Cura.Actions.mergeObjects }
UM.MenuItem { action: Cura.Actions.unGroupObjects }
}

View File

@ -0,0 +1,64 @@
// Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 2.4
import UM 1.5 as UM
import Cura 1.0 as Cura
Menu
{
id: extensionMenu
title: catalog.i18nc("@title:menu menubar:toplevel", "E&xtensions")
Component
{
id: extensionsMenuItem
UM.MenuItem
{
text: modelText
onTriggered: extensionsModel.subMenuTriggered(extensionName, modelText)
}
}
Component
{
id: extensionsMenuSeparator
MenuSeparator {}
}
Instantiator
{
id: extensions
model: UM.ExtensionModel { }
UM.Menu
{
id: sub_menu
title: model.name
shouldBeVisible: actions !== undefined
enabled: actions != null
Instantiator
{
model: actions
Loader
{
property var extensionsModel: extensions.model
property var modelText: model.text
property var extensionName: name
sourceComponent: modelText.trim() == "" ? extensionsMenuSeparator : extensionsMenuItem
}
onObjectAdded: sub_menu.insertItem(index, object.item)
onObjectRemoved: sub_menu.removeItem(object.item)
}
}
onObjectAdded: extensionMenu.insertMenu(index, object)
onObjectRemoved: extensionMenu.removeMenu(object)
}
}

View File

@ -1,8 +1,8 @@
// Copyright (c) 2018 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import UM 1.6 as UM import UM 1.6 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
@ -13,31 +13,34 @@ Menu
title: catalog.i18nc("@title:menu menubar:toplevel", "&File") title: catalog.i18nc("@title:menu menubar:toplevel", "&File")
property var fileProviderModel: CuraApplication.getFileProviderModel() property var fileProviderModel: CuraApplication.getFileProviderModel()
MenuItem
UM.MenuItem
{ {
id: newProjectMenu id: newProjectMenu
action: Cura.Actions.newProject action: Cura.Actions.newProject
} }
MenuItem UM.MenuItem
{ {
id: openMenu id: openMenu
action: Cura.Actions.open action: Cura.Actions.open
visible: (base.fileProviderModel.count == 1) visible: base.fileProviderModel.count == 1
height: visible ? implicitHeight: 0
} }
OpenFilesMenu OpenFilesMenu
{ {
id: openFilesMenu id: openFilesMenu
visible: (base.fileProviderModel.count > 1)
shouldBeVisible: base.fileProviderModel.count > 1
} }
RecentFilesMenu { } RecentFilesMenu { }
MenuItem UM.MenuItem
{ {
id: saveWorkspaceMenu id: saveWorkspaceMenu
shortcut: visible ? StandardKey.Save : "" shortcut: StandardKey.Save
text: catalog.i18nc("@title:menu menubar:file", "&Save Project...") text: catalog.i18nc("@title:menu menubar:file", "&Save Project...")
visible: saveProjectMenu.model.count == 1 visible: saveProjectMenu.model.count == 1
enabled: UM.WorkspaceFileHandler.enabled enabled: UM.WorkspaceFileHandler.enabled
@ -62,13 +65,13 @@ Menu
{ {
id: saveProjectMenu id: saveProjectMenu
model: projectOutputDevicesModel model: projectOutputDevicesModel
visible: model.count > 1 shouldBeVisible: model.count > 1
enabled: UM.WorkspaceFileHandler.enabled enabled: UM.WorkspaceFileHandler.enabled
} }
MenuSeparator { } MenuSeparator { }
MenuItem UM.MenuItem
{ {
id: saveAsMenu id: saveAsMenu
text: catalog.i18nc("@title:menu menubar:file", "&Export...") text: catalog.i18nc("@title:menu menubar:file", "&Export...")
@ -79,18 +82,18 @@ Menu
} }
} }
MenuItem UM.MenuItem
{ {
id: exportSelectionMenu id: exportSelectionMenu
text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...") text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...")
enabled: UM.Selection.hasSelection enabled: UM.Selection.hasSelection
iconName: "document-save-as" icon.name: "document-save-as"
onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"})
} }
MenuSeparator { } MenuSeparator { }
MenuItem UM.MenuItem
{ {
id: reloadAllMenu id: reloadAllMenu
action: Cura.Actions.reloadAll action: Cura.Actions.reloadAll
@ -98,5 +101,5 @@ Menu
MenuSeparator { } MenuSeparator { }
MenuItem { action: Cura.Actions.quit } UM.MenuItem { action: Cura.Actions.quit }
} }

View File

@ -0,0 +1,23 @@
// Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 2.4
import UM 1.5 as UM
import Cura 1.0 as Cura
Menu
{
id: helpMenu
title: catalog.i18nc("@title:menu menubar:toplevel", "&Help")
UM.MenuItem { action: Cura.Actions.showProfileFolder }
UM.MenuItem { action: Cura.Actions.showTroubleshooting}
UM.MenuItem { action: Cura.Actions.documentation }
UM.MenuItem { action: Cura.Actions.reportBug }
MenuSeparator { }
UM.MenuItem { action: Cura.Actions.whatsNew }
UM.MenuItem { action: Cura.Actions.about }
}

View File

@ -1,25 +0,0 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.4
import UM 1.2 as UM
import Cura 1.0 as Cura
Instantiator
{
model: Cura.GlobalStacksModel {}
MenuItem
{
text: model.name
checkable: true
checked: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id == model.id: false
exclusiveGroup: group
visible: !model.hasRemoteConnection
onTriggered: Cura.MachineManager.setActiveMachine(model.id)
}
onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object)
}

View File

@ -1,15 +1,15 @@
//Copyright (c) 2020 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
//Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import UM 1.2 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu UM.Menu
{ {
id: menu id: materialMenu
title: catalog.i18nc("@label:category menu label", "Material") title: catalog.i18nc("@label:category menu label", "Material")
property int extruderIndex: 0 property int extruderIndex: 0
@ -25,50 +25,50 @@ Menu
} }
property bool isActiveExtruderEnabled: (activeExtruder === null || activeExtruder === undefined) ? false : activeExtruder.isEnabled property bool isActiveExtruderEnabled: (activeExtruder === null || activeExtruder === undefined) ? false : activeExtruder.isEnabled
property string activeMaterialId: (activeExtruder === null || activeExtruder === undefined) ? false : activeExtruder.material.id property string activeMaterialId: (activeExtruder === null || activeExtruder === undefined) ? "" : activeExtruder.material.id
property bool updateModels: true property bool updateModels: true
Cura.FavoriteMaterialsModel Cura.FavoriteMaterialsModel
{ {
id: favoriteMaterialsModel id: favoriteMaterialsModel
extruderPosition: menu.extruderIndex extruderPosition: materialMenu.extruderIndex
enabled: updateModels enabled: updateModels
} }
Cura.GenericMaterialsModel Cura.GenericMaterialsModel
{ {
id: genericMaterialsModel id: genericMaterialsModel
extruderPosition: menu.extruderIndex extruderPosition: materialMenu.extruderIndex
enabled: updateModels enabled: updateModels
} }
Cura.MaterialBrandsModel Cura.MaterialBrandsModel
{ {
id: brandModel id: brandModel
extruderPosition: menu.extruderIndex extruderPosition: materialMenu.extruderIndex
enabled: updateModels enabled: updateModels
} }
MenuItem UM.MenuItem
{ {
text: catalog.i18nc("@label:category menu label", "Favorites") text: catalog.i18nc("@label:category menu label", "Favorites")
enabled: false enabled: false
visible: favoriteMaterialsModel.items.length > 0 visible: favoriteMaterialsModel.items.length > 0
height: visible ? implicitHeight: 0
} }
Instantiator Instantiator
{ {
model: favoriteMaterialsModel model: favoriteMaterialsModel
delegate: MenuItem delegate: UM.MenuItem
{ {
text: model.brand + " " + model.name text: model.brand + " " + model.name
checkable: true checkable: true
enabled: isActiveExtruderEnabled enabled: isActiveExtruderEnabled
checked: model.root_material_id === menu.currentRootMaterialId checked: model.root_material_id === materialMenu.currentRootMaterialId
onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
exclusiveGroup: favoriteGroup // One favorite and one item from the others can be active at the same time.
} }
onObjectAdded: menu.insertItem(index, object) onObjectAdded: materialMenu.insertItem(index, object)
onObjectRemoved: menu.removeItem(index) onObjectRemoved: materialMenu.removeItem(index)
} }
MenuSeparator {} MenuSeparator {}
@ -81,13 +81,12 @@ Menu
Instantiator Instantiator
{ {
model: genericMaterialsModel model: genericMaterialsModel
delegate: MenuItem delegate: UM.MenuItem
{ {
text: model.name text: model.name
checkable: true checkable: true
enabled: isActiveExtruderEnabled enabled: isActiveExtruderEnabled
checked: model.root_material_id === menu.currentRootMaterialId checked: model.root_material_id === materialMenu.currentRootMaterialId
exclusiveGroup: group
onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
} }
onObjectAdded: genericMenu.insertItem(index, object) onObjectAdded: genericMenu.insertItem(index, object)
@ -100,7 +99,7 @@ Menu
Instantiator Instantiator
{ {
model: brandModel model: brandModel
Menu UM.Menu
{ {
id: brandMenu id: brandMenu
title: brandName title: brandName
@ -120,47 +119,37 @@ Menu
Instantiator Instantiator
{ {
model: brandMaterialColors model: brandMaterialColors
delegate: MenuItem delegate: UM.MenuItem
{ {
text: model.name text: model.name
checkable: true checkable: true
enabled: isActiveExtruderEnabled enabled: isActiveExtruderEnabled
checked: model.id === menu.activeMaterialId checked: model.id === materialMenu.activeMaterialId
exclusiveGroup: group
onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
} }
onObjectAdded: brandMaterialsMenu.insertItem(index, object) onObjectAdded: brandMaterialsMenu.insertItem(index, object)
onObjectRemoved: brandMaterialsMenu.removeItem(object) onObjectRemoved: brandMaterialsMenu.removeItem(object)
} }
} }
onObjectAdded: brandMenu.insertItem(index, object) onObjectAdded: brandMenu.insertMenu(index, object)
onObjectRemoved: brandMenu.removeItem(object) onObjectRemoved: brandMenu.removeMenu(object)
} }
} }
onObjectAdded: menu.insertItem(index, object) onObjectAdded: materialMenu.insertMenu(index, object)
onObjectRemoved: menu.removeItem(object) onObjectRemoved: materialMenu.removeMenu(object)
}
ExclusiveGroup
{
id: group
}
ExclusiveGroup
{
id: favoriteGroup
} }
MenuSeparator {} MenuSeparator {}
MenuItem UM.MenuItem
{ {
action: Cura.Actions.manageMaterials action: Cura.Actions.manageMaterials
} }
MenuSeparator {} MenuSeparator {}
MenuItem UM.MenuItem
{ {
action: Cura.Actions.marketplaceMaterials action: Cura.Actions.marketplaceMaterials
} }

View File

@ -1,32 +0,0 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.4
import UM 1.2 as UM
import Cura 1.0 as Cura
Instantiator
{
model: Cura.GlobalStacksModel {}
MenuItem
{
property string connectGroupName:
{
if("group_name" in model.metadata)
{
return model.metadata["group_name"]
}
return ""
}
text: connectGroupName
checkable: true
visible: model.hasRemoteConnection
checked: Cura.MachineManager.activeMachineNetworkGroupName == connectGroupName
exclusiveGroup: group
onTriggered: Cura.MachineManager.setActiveMachine(model.id)
}
onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object)
}

View File

@ -1,15 +1,15 @@
// Copyright (c) 2017 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import UM 1.2 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu UM.Menu
{ {
id: menu id: nozzleMenu
title: "Nozzle" title: "Nozzle"
property int extruderIndex: 0 property int extruderIndex: 0
@ -23,38 +23,34 @@ Menu
{ {
model: nozzleModel model: nozzleModel
MenuItem UM.MenuItem
{ {
text: model.hotend_name text: model.hotend_name
checkable: true checkable: true
checked: { property var activeMachine: Cura.MachineManager.activeMachine
var activeMachine = Cura.MachineManager.activeMachine checked:
{
if (activeMachine === null) if (activeMachine === null)
{ {
return false return false
} }
var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] var extruder = activeMachine.extruderList[extruderIndex]
return (extruder === undefined) ? false : (extruder.variant.name == model.hotend_name) return (extruder === undefined) ? false : (extruder.variant.name == model.hotend_name)
} }
exclusiveGroup: group
enabled: enabled:
{ {
var activeMachine = Cura.MachineManager.activeMachine
if (activeMachine === null) if (activeMachine === null)
{ {
return false return false
} }
var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] var extruder = activeMachine.extruderList[extruderIndex]
return (extruder === undefined) ? false : extruder.isEnabled return (extruder === undefined) ? false : extruder.isEnabled
} }
onTriggered: { onTriggered: Cura.MachineManager.setVariant(nozzleMenu.extruderIndex, model.container_node)
Cura.MachineManager.setVariant(menu.extruderIndex, model.container_node);
}
} }
onObjectAdded: menu.insertItem(index, object); onObjectAdded: nozzleMenu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object); onObjectRemoved: nozzleMenu.removeItem(object)
} }
ExclusiveGroup { id: group }
} }

View File

@ -1,25 +1,24 @@
// Copyright (c) 2020 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import UM 1.6 as UM import UM 1.6 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
import "../Dialogs" import "../Dialogs"
Menu UM.Menu
{ {
id: openFilesMenu id: openFilesMenu
title: catalog.i18nc("@title:menu menubar:file", "Open File(s)...") title: catalog.i18nc("@title:menu menubar:file", "Open File(s)...")
iconName: "document-open-recent";
Instantiator Instantiator
{ {
id: fileProviders id: fileProviders
model: CuraApplication.getFileProviderModel() model: CuraApplication.getFileProviderModel()
MenuItem UM.MenuItem
{ {
text: text:
{ {
@ -39,6 +38,7 @@ Menu
// Unassign the shortcuts when the submenu is invisible (i.e. when there is only one file provider) to avoid ambiguous shortcuts. // Unassign the shortcuts when the submenu is invisible (i.e. when there is only one file provider) to avoid ambiguous shortcuts.
// When there is a single file provider, the openAction is assigned with the Ctrl+O shortcut instead. // When there is a single file provider, the openAction is assigned with the Ctrl+O shortcut instead.
shortcut: openFilesMenu.visible ? model.shortcut : "" shortcut: openFilesMenu.visible ? model.shortcut : ""
visible: openFilesMenu.visible
} }
onObjectAdded: openFilesMenu.insertItem(index, object) onObjectAdded: openFilesMenu.insertItem(index, object)
onObjectRemoved: openFilesMenu.removeItem(object) onObjectRemoved: openFilesMenu.removeItem(object)

View File

@ -0,0 +1,25 @@
// Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 2.4
import UM 1.5 as UM
import Cura 1.0 as Cura
Menu
{
id: preferencesMenu
//On MacOS, don't translate the "Preferences" word.
//Qt moves the "preferences" entry to a different place, and if it got renamed can't find it again when it
//attempts to delete the item upon closing the application, causing a crash.
//In the new location, these items are translated automatically according to the system's language.
//For more information, see:
//- https://doc.qt.io/qt-5/macos-issues.html#menu-bar
//- https://doc.qt.io/qt-5/qmenubar.html#qmenubar-as-a-global-menu-bar
title: (Qt.platform.os == "osx") ? "&Preferences" : catalog.i18nc("@title:menu menubar:toplevel", "P&references")
UM.MenuItem { action: Cura.Actions.preferences }
}

View File

@ -1,60 +1,84 @@
// Copyright (c) 2018 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import UM 1.2 as UM import UM 1.6 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
{ {
id: menu id: menu
// TODO Enable custom style to the menu
// style: MenuStyle
// {
// frame: Rectangle
// {
// color: "white"
// }
// }
MenuItem UM.MenuItem
{ {
id: networkEnabledPrinterItem
text: catalog.i18nc("@label:category menu label", "Network enabled printers") text: catalog.i18nc("@label:category menu label", "Network enabled printers")
enabled: false enabled: false
visible: networkPrinterMenu.count > 0 visible: networKPrinterInstantiator.count > 0
} }
NetworkPrinterMenu Instantiator
{ {
id: networkPrinterMenu id: networKPrinterInstantiator
model: Cura.GlobalStacksModel {filterOnlineOnly: true}
UM.MenuItem
{
property string connectGroupName:
{
if("group_name" in model.metadata)
{
return model.metadata["group_name"]
}
return ""
}
text: connectGroupName
checkable: true
checked: Cura.MachineManager.activeMachineNetworkGroupName == connectGroupName
onTriggered: Cura.MachineManager.setActiveMachine(model.id)
}
onObjectAdded: menu.insertItem(2, object)
onObjectRemoved: menu.removeItem(object)
} }
MenuSeparator MenuSeparator
{ {
visible: networkPrinterMenu.count > 0 visible: networKPrinterInstantiator.count > 0
} }
MenuItem UM.MenuItem
{
text: catalog.i18nc("@label:category menu label", "Local printers")
enabled: false
visible: localPrinterMenu.count > 0
}
LocalPrinterMenu
{ {
id: localPrinterMenu id: localPrinterMenu
text: catalog.i18nc("@label:category menu label", "Local printers")
enabled: false
visible: localPrinterInstantiator.count > 0
} }
ExclusiveGroup { id: group; } Instantiator
{
id: localPrinterInstantiator
model: Cura.GlobalStacksModel {}
UM.MenuItem
{
text: model.name
checkable: true
checked: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id == model.id: false
visible: !model.hasRemoteConnection
height: visible ? implicitHeight: 0
onTriggered: Cura.MachineManager.setActiveMachine(model.id)
}
// A bit hackish, but we have 2 items at the end, put them before that
onObjectAdded: menu.insertItem(menu.count - 2, object)
onObjectRemoved: menu.removeItem(object)
}
MenuSeparator MenuSeparator
{ {
visible: localPrinterMenu.count > 0 visible: localPrinterInstantiator.count > 0
} }
MenuItem { action: Cura.Actions.addMachine; } UM.MenuItem { action: Cura.Actions.addMachine }
MenuItem { action: Cura.Actions.configureMachines; } UM.MenuItem { action: Cura.Actions.configureMachines }
} }

View File

@ -2,9 +2,9 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import UM 1.3 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
@ -18,12 +18,11 @@ Menu
id: printerTypeInstantiator id: printerTypeInstantiator
model: outputDevice != null ? outputDevice.connectedPrintersTypeCount : [] model: outputDevice != null ? outputDevice.connectedPrintersTypeCount : []
MenuItem UM.MenuItem
{ {
text: modelData.machine_type text: modelData.machine_type
checkable: true checkable: true
checked: Cura.MachineManager.activeMachine.definition.name == modelData.machine_type checked: Cura.MachineManager.activeMachine.definition.name == modelData.machine_type
exclusiveGroup: group
onTriggered: onTriggered:
{ {
Cura.MachineManager.switchPrinterType(modelData.machine_type) Cura.MachineManager.switchPrinterType(modelData.machine_type)
@ -32,6 +31,4 @@ Menu
onObjectAdded: menu.insertItem(index, object) onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object) onObjectRemoved: menu.removeItem(object)
} }
ExclusiveGroup { id: group }
} }

View File

@ -1,8 +1,8 @@
// Copyright (c) 2021 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import UM 1.3 as UM import UM 1.3 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
@ -13,7 +13,7 @@ Menu
{ {
id: menu id: menu
title: catalog.i18nc("@title:menu menubar:file", "Open &Recent") title: catalog.i18nc("@title:menu menubar:file", "Open &Recent")
iconName: "document-open-recent"; //iconName: "document-open-recent";
enabled: CuraApplication.recentFiles.length > 0; enabled: CuraApplication.recentFiles.length > 0;

View File

@ -1,15 +1,15 @@
// Copyright (c) 2021 Ultimaker B.V. // Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import UM 1.6 as UM import UM 1.6 as UM
import Cura 1.1 as Cura import Cura 1.1 as Cura
import "../Dialogs" import "../Dialogs"
Menu UM.Menu
{ {
id: saveProjectMenu id: saveProjectMenu
title: catalog.i18nc("@title:menu menubar:file", "Save Project...") title: catalog.i18nc("@title:menu menubar:file", "Save Project...")
@ -18,7 +18,7 @@ Menu
Instantiator Instantiator
{ {
id: projectOutputDevices id: projectOutputDevices
MenuItem UM.MenuItem
{ {
text: model.name text: model.name
onTriggered: onTriggered:

View File

@ -2,9 +2,9 @@
//Cura is released under the terms of the LGPLv3 or higher. //Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.4 import QtQuick.Controls 2.4
import UM 1.2 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
@ -23,11 +23,16 @@ Menu
{ {
title: modelData.name title: modelData.name
property var extruder: (base.activeMachine === null) ? null : activeMachine.extruderList[model.index] property var extruder: (base.activeMachine === null) ? null : activeMachine.extruderList[model.index]
NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.activeMachine.hasVariants; extruderIndex: index } NozzleMenu
{
title: Cura.MachineManager.activeDefinitionVariantsName
shouldBeVisible: activeMachine.hasVariants
extruderIndex: index
}
MaterialMenu MaterialMenu
{ {
title: catalog.i18nc("@title:menu", "&Material") title: catalog.i18nc("@title:menu", "&Material")
visible: Cura.MachineManager.activeMachine.hasMaterials shouldBeVisible: activeMachine.hasMaterials
extruderIndex: index extruderIndex: index
updateModels: false updateModels: false
onAboutToShow: updateModels = true onAboutToShow: updateModels = true
@ -39,33 +44,34 @@ Menu
visible: Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasMaterials visible: Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasMaterials
} }
MenuItem UM.MenuItem
{ {
text: catalog.i18nc("@action:inmenu", "Set as Active Extruder") text: catalog.i18nc("@action:inmenu", "Set as Active Extruder")
onTriggered: Cura.ExtruderManager.setActiveExtruderIndex(model.index) onTriggered: Cura.ExtruderManager.setActiveExtruderIndex(model.index)
} }
MenuItem UM.MenuItem
{ {
text: catalog.i18nc("@action:inmenu", "Enable Extruder") text: catalog.i18nc("@action:inmenu", "Enable Extruder")
onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true)
visible: (extruder === null || extruder === undefined) ? false : !extruder.isEnabled visible: (extruder === null || extruder === undefined) ? false : !extruder.isEnabled
height: visible ? implicitHeight: 0
} }
MenuItem UM.MenuItem
{ {
text: catalog.i18nc("@action:inmenu", "Disable Extruder") text: catalog.i18nc("@action:inmenu", "Disable Extruder")
onTriggered: Cura.MachineManager.setExtruderEnabled(index, false) onTriggered: Cura.MachineManager.setExtruderEnabled(index, false)
visible: (extruder === null || extruder === undefined) ? false : extruder.isEnabled visible: (extruder === null || extruder === undefined) ? false : extruder.isEnabled
enabled: Cura.MachineManager.numberExtrudersEnabled > 1 enabled: Cura.MachineManager.numberExtrudersEnabled > 1
height: visible ? implicitHeight: 0
} }
} }
onObjectAdded: base.insertItem(index, object) onObjectAdded: base.insertMenu(index, object)
onObjectRemoved: base.removeItem(object) onObjectRemoved: base.removeMenu(object)
} }
MenuSeparator { } MenuSeparator { }
MenuItem { action: Cura.Actions.configureSettingVisibility } UM.MenuItem { action: Cura.Actions.configureSettingVisibility }
} }

View File

@ -2,33 +2,34 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 2.1
import UM 1.2 as UM import UM 1.5 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
{ {
title: catalog.i18nc("@title:menu menubar:toplevel", "&View")
id: base id: base
title: catalog.i18nc("@title:menu menubar:toplevel", "&View")
property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel()
Menu Menu
{ {
title: catalog.i18nc("@action:inmenu menubar:view","&Camera position"); title: catalog.i18nc("@action:inmenu menubar:view", "&Camera position")
MenuItem { action: Cura.Actions.view3DCamera; } UM.MenuItem { action: Cura.Actions.view3DCamera }
MenuItem { action: Cura.Actions.viewFrontCamera; } UM.MenuItem { action: Cura.Actions.viewFrontCamera }
MenuItem { action: Cura.Actions.viewTopCamera; } UM.MenuItem { action: Cura.Actions.viewTopCamera }
MenuItem { action: Cura.Actions.viewBottomCamera; } UM.MenuItem { action: Cura.Actions.viewBottomCamera }
MenuItem { action: Cura.Actions.viewLeftSideCamera; } UM.MenuItem { action: Cura.Actions.viewLeftSideCamera }
MenuItem { action: Cura.Actions.viewRightSideCamera; } UM.MenuItem { action: Cura.Actions.viewRightSideCamera }
} }
Menu Menu
{ {
id: cameraViewMenu id: cameraViewMenu
title: catalog.i18nc("@action:inmenu menubar:view", "Camera view")
property string cameraMode: UM.Preferences.getValue("general/camera_perspective_mode") property string cameraMode: UM.Preferences.getValue("general/camera_perspective_mode")
Connections Connections
{ {
target: UM.Preferences target: UM.Preferences
@ -42,7 +43,6 @@ Menu
} }
} }
title: catalog.i18nc("@action:inmenu menubar:view","Camera view")
MenuItem MenuItem
{ {
text: catalog.i18nc("@action:inmenu menubar:view", "Perspective") text: catalog.i18nc("@action:inmenu menubar:view", "Perspective")
@ -52,8 +52,8 @@ Menu
{ {
UM.Preferences.setValue("general/camera_perspective_mode", "perspective") UM.Preferences.setValue("general/camera_perspective_mode", "perspective")
} }
exclusiveGroup: group
} }
MenuItem MenuItem
{ {
text: catalog.i18nc("@action:inmenu menubar:view", "Orthographic") text: catalog.i18nc("@action:inmenu menubar:view", "Orthographic")
@ -63,45 +63,12 @@ Menu
{ {
UM.Preferences.setValue("general/camera_perspective_mode", "orthographic") UM.Preferences.setValue("general/camera_perspective_mode", "orthographic")
} }
exclusiveGroup: group
}
ExclusiveGroup { id: group }
}
MenuSeparator
{
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
}
Menu
{
id: buildPlateMenu;
title: catalog.i18nc("@action:inmenu menubar:view","&Build plate")
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
Instantiator
{
model: base.multiBuildPlateModel
MenuItem
{
text: base.multiBuildPlateModel.getItem(index).name;
onTriggered: Cura.SceneController.setActiveBuildPlate(base.multiBuildPlateModel.getItem(index).buildPlateNumber)
checkable: true
checked: base.multiBuildPlateModel.getItem(index).buildPlateNumber == base.multiBuildPlateModel.activeBuildPlate
exclusiveGroup: buildPlateGroup
visible: UM.Preferences.getValue("cura/use_multi_build_plate")
}
onObjectAdded: buildPlateMenu.insertItem(index, object)
onObjectRemoved: buildPlateMenu.removeItem(object)
}
ExclusiveGroup
{
id: buildPlateGroup
} }
} }
MenuSeparator {} MenuSeparator {}
MenuItem UM.MenuItem
{ {
action: Cura.Actions.toggleFullScreen action: Cura.Actions.toggleFullScreen
} }

View File

@ -15,6 +15,7 @@ MenuItem
implicitHeight: UM.Theme.getSize("setting_control").height + UM.Theme.getSize("narrow_margin").height implicitHeight: UM.Theme.getSize("setting_control").height + UM.Theme.getSize("narrow_margin").height
opacity: enabled ? 1.0 : 0.5 opacity: enabled ? 1.0 : 0.5
height: visible ? implicitHeight : 0
arrow: UM.RecolorImage arrow: UM.RecolorImage
{ {