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
import QtQuick 2.10
import QtQuick.Controls 1.1
import QtQuick.Controls 2.3 as Controls2
import QtQuick.Controls 2.4
import UM 1.1 as UM
import Cura 1.0 as Cura
Item
{
property alias newProject: newProjectAction;
property alias open: openAction;
property alias quit: quitAction;
property alias newProject: newProjectAction
property alias open: openAction
property alias quit: quitAction
property alias undo: undoAction;
property alias redo: redoAction;
property alias undo: undoAction
property alias redo: redoAction
property alias view3DCamera: view3DCameraAction;
property alias viewFrontCamera: viewFrontCameraAction;
property alias viewTopCamera: viewTopCameraAction;
property alias viewBottomCamera: viewBottomCameraAction;
property alias viewLeftSideCamera: viewLeftSideCameraAction;
property alias viewRightSideCamera: viewRightSideCameraAction;
property alias view3DCamera: view3DCameraAction
property alias viewFrontCamera: viewFrontCameraAction
property alias viewTopCamera: viewTopCameraAction
property alias viewBottomCamera: viewBottomCameraAction
property alias viewLeftSideCamera: viewLeftSideCameraAction
property alias viewRightSideCamera: viewRightSideCameraAction
property alias deleteSelection: deleteSelectionAction;
property alias centerSelection: centerSelectionAction;
property alias multiplySelection: multiplySelectionAction;
property alias deleteSelection: deleteSelectionAction
property alias centerSelection: centerSelectionAction
property alias multiplySelection: multiplySelectionAction
property alias deleteObject: deleteObjectAction;
property alias centerObject: centerObjectAction;
property alias groupObjects: groupObjectsAction;
property alias unGroupObjects:unGroupObjectsAction;
property alias mergeObjects: mergeObjectsAction;
//property alias unMergeObjects: unMergeObjectsAction;
property alias deleteObject: deleteObjectAction
property alias centerObject: centerObjectAction
property alias groupObjects: groupObjectsAction
property alias unGroupObjects:unGroupObjectsAction
property alias mergeObjects: mergeObjectsAction
//property alias unMergeObjects: unMergeObjectsAction
property alias multiplyObject: multiplyObjectAction;
property alias multiplyObject: multiplyObjectAction
property alias selectAll: selectAllAction;
property alias deleteAll: deleteAllAction;
property alias reloadAll: reloadAllAction;
property alias arrangeAllBuildPlates: arrangeAllBuildPlatesAction;
property alias arrangeAll: arrangeAllAction;
property alias arrangeSelection: arrangeSelectionAction;
property alias resetAllTranslation: resetAllTranslationAction;
property alias resetAll: resetAllAction;
property alias selectAll: selectAllAction
property alias deleteAll: deleteAllAction
property alias reloadAll: reloadAllAction
property alias arrangeAllBuildPlates: arrangeAllBuildPlatesAction
property alias arrangeAll: arrangeAllAction
property alias arrangeSelection: arrangeSelectionAction
property alias resetAllTranslation: resetAllTranslationAction
property alias resetAll: resetAllAction
property alias addMachine: addMachineAction;
property alias configureMachines: settingsAction;
property alias addProfile: addProfileAction;
property alias updateProfile: updateProfileAction;
property alias resetProfile: resetProfileAction;
property alias manageProfiles: manageProfilesAction;
property alias addMachine: addMachineAction
property alias configureMachines: settingsAction
property alias addProfile: addProfileAction
property alias updateProfile: updateProfileAction
property alias resetProfile: resetProfileAction
property alias manageProfiles: manageProfilesAction
property alias manageMaterials: manageMaterialsAction;
property alias marketplaceMaterials: marketplaceMaterialsAction;
property alias manageMaterials: manageMaterialsAction
property alias marketplaceMaterials: marketplaceMaterialsAction
property alias preferences: preferencesAction;
property alias preferences: preferencesAction
property alias showProfileFolder: showProfileFolderAction;
property alias documentation: documentationAction;
property alias showProfileFolder: showProfileFolderAction
property alias documentation: documentationAction
property alias showTroubleshooting: showTroubleShootingAction
property alias reportBug: reportBugAction;
property alias reportBug: reportBugAction
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 configureSettingVisibility: configureSettingVisibilityAction
@ -80,7 +79,7 @@ Item
{
id: showTroubleShootingAction
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
@ -88,7 +87,7 @@ Item
id: toggleFullScreenAction
shortcut: StandardKey.FullScreen
text: catalog.i18nc("@action:inmenu", "Toggle Full Screen")
iconName: "view-fullscreen"
icon.name: "view-fullscreen"
}
Action
@ -96,27 +95,27 @@ Item
id: exitFullScreenAction
shortcut: StandardKey.Cancel
text: catalog.i18nc("@action:inmenu", "Exit Full Screen")
iconName: "view-fullscreen"
icon.name: "view-fullscreen"
}
Action
{
id: undoAction;
text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo");
iconName: "edit-undo";
shortcut: StandardKey.Undo;
onTriggered: UM.OperationStack.undo();
enabled: UM.OperationStack.canUndo;
id: undoAction
text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo")
icon.name: "edit-undo"
shortcut: StandardKey.Undo
onTriggered: UM.OperationStack.undo()
enabled: UM.OperationStack.canUndo
}
Action
{
id: redoAction;
text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo");
iconName: "edit-redo";
shortcut: StandardKey.Redo;
onTriggered: UM.OperationStack.redo();
enabled: UM.OperationStack.canRedo;
id: redoAction
text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo")
icon.name: "edit-redo"
shortcut: StandardKey.Redo
onTriggered: UM.OperationStack.redo()
enabled: UM.OperationStack.canRedo
}
Action
@ -131,7 +130,7 @@ Item
//- 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
text: (Qt.platform.os == "osx") ? "&Quit" : catalog.i18nc("@action:inmenu menubar:file", "&Quit")
iconName: "application-exit"
icon.name: "application-exit"
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/qmenubar.html#qmenubar-as-a-global-menu-bar
text: (Qt.platform.os == "osx") ? "Configure Cura..." : catalog.i18nc("@action:inmenu", "Configure Cura...")
iconName: "configure"
icon.name: "configure"
}
Action
@ -201,14 +200,14 @@ Item
{
id: settingsAction
text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...")
iconName: "configure"
icon.name: "configure"
}
Action
{
id: manageMaterialsAction
text: catalog.i18nc("@action:inmenu", "Manage Materials...")
iconName: "configure"
icon.name: "configure"
shortcut: "Ctrl+K"
}
@ -220,64 +219,64 @@ Item
Action
{
id: updateProfileAction;
id: updateProfileAction
enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityChangesGroup != null
text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings/overrides");
onTriggered: Cura.ContainerManager.updateQualityChanges();
text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings/overrides")
onTriggered: Cura.ContainerManager.updateQualityChanges()
}
Action
{
id: resetProfileAction;
id: resetProfileAction
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:
{
forceActiveFocus();
Cura.ContainerManager.clearUserContainers();
forceActiveFocus()
Cura.ContainerManager.clearUserContainers()
}
}
Action
{
id: addProfileAction;
id: addProfileAction
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
{
id: manageProfilesAction
text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...")
iconName: "configure"
icon.name: "configure"
shortcut: "Ctrl+J"
}
Action
{
id: documentationAction;
text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation");
iconName: "help-contents";
shortcut: StandardKey.Help;
onTriggered: CuraActions.openDocumentation();
id: documentationAction
text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation")
icon.name: "help-contents"
shortcut: StandardKey.Help
onTriggered: CuraActions.openDocumentation()
}
Action {
id: reportBugAction;
text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug");
iconName: "tools-report-bug";
onTriggered: CuraActions.openBugReportPage();
id: reportBugAction
text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug")
icon.name: "tools-report-bug"
onTriggered: CuraActions.openBugReportPage()
}
Action
{
id: whatsNewAction;
text: catalog.i18nc("@action:inmenu menubar:help", "What's New");
id: whatsNewAction
text: catalog.i18nc("@action:inmenu menubar:help", "What's New")
}
Action
{
id: aboutAction;
id: aboutAction
//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
@ -286,60 +285,60 @@ Item
//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
text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About...");
iconName: "help-about";
text: (Qt.platform.os == "osx") ? "About..." : catalog.i18nc("@action:inmenu menubar:help", "About...")
icon.name: "help-about"
}
Action
{
id: deleteSelectionAction;
text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "edit-delete";
id: deleteSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Delete Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
icon.name: "edit-delete"
shortcut: StandardKey.Delete | "Backspace"
onTriggered: CuraActions.deleteSelection();
onTriggered: CuraActions.deleteSelection()
}
Action
{
id: centerSelectionAction;
text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "align-vertical-center";
onTriggered: CuraActions.centerSelection();
id: centerSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Center Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
icon.name: "align-vertical-center"
onTriggered: CuraActions.centerSelection()
}
Action
{
id: multiplySelectionAction;
text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected");
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection;
iconName: "edit-duplicate";
id: multiplySelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit", "Multiply Selected")
enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection
icon.name: "edit-duplicate"
shortcut: "Ctrl+M"
}
Action
{
id: deleteObjectAction;
text: catalog.i18nc("@action:inmenu","Delete Model");
enabled: UM.Controller.toolsEnabled;
iconName: "edit-delete";
id: deleteObjectAction
text: catalog.i18nc("@action:inmenu","Delete Model")
enabled: UM.Controller.toolsEnabled
icon.name: "edit-delete"
}
Action
{
id: centerObjectAction;
text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform");
id: centerObjectAction
text: catalog.i18nc("@action:inmenu","Ce&nter Model on Platform")
}
Action
{
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
iconName: "object-group"
shortcut: "Ctrl+G";
onTriggered: CuraApplication.groupSelected();
icon.name: "object-group"
shortcut: "Ctrl+G"
onTriggered: CuraApplication.groupSelected()
}
Action
@ -355,132 +354,132 @@ Item
Action
{
id: unGroupObjectsAction
text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models");
text: catalog.i18nc("@action:inmenu menubar:edit","Ungroup Models")
enabled: UM.Selection.isGroupSelected
iconName: "object-ungroup"
shortcut: "Ctrl+Shift+G";
onTriggered: CuraApplication.ungroupSelected();
icon.name: "object-ungroup"
shortcut: "Ctrl+Shift+G"
onTriggered: CuraApplication.ungroupSelected()
}
Action
{
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
iconName: "merge";
shortcut: "Ctrl+Alt+G";
onTriggered: CuraApplication.mergeSelected();
icon.name: "merge"
shortcut: "Ctrl+Alt+G"
onTriggered: CuraApplication.mergeSelected()
}
Action
{
id: multiplyObjectAction;
text: catalog.i18nc("@action:inmenu","&Multiply Model...");
iconName: "edit-duplicate"
id: multiplyObjectAction
text: catalog.i18nc("@action:inmenu","&Multiply Model...")
icon.name: "edit-duplicate"
}
Action
{
id: selectAllAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models");
enabled: UM.Controller.toolsEnabled;
iconName: "edit-select-all";
shortcut: "Ctrl+A";
onTriggered: CuraApplication.selectAll();
id: selectAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models")
enabled: UM.Controller.toolsEnabled
icon.name: "edit-select-all"
shortcut: "Ctrl+A"
onTriggered: CuraApplication.selectAll()
}
Action
{
id: deleteAllAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate");
enabled: UM.Controller.toolsEnabled;
iconName: "edit-delete";
shortcut: "Ctrl+D";
onTriggered: CuraApplication.deleteAll();
id: deleteAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate")
enabled: UM.Controller.toolsEnabled
icon.name: "edit-delete"
shortcut: "Ctrl+D"
onTriggered: CuraApplication.deleteAll()
}
Action
{
id: reloadAllAction;
text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models");
iconName: "document-revert";
id: reloadAllAction
text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models")
icon.name: "document-revert"
shortcut: "F5"
onTriggered: CuraApplication.reloadAll();
onTriggered: CuraApplication.reloadAll()
}
Action
{
id: arrangeAllBuildPlatesAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models To All Build Plates");
onTriggered: Printer.arrangeObjectsToAllBuildPlates();
id: arrangeAllBuildPlatesAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models To All Build Plates")
onTriggered: Printer.arrangeObjectsToAllBuildPlates()
}
Action
{
id: arrangeAllAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models");
onTriggered: Printer.arrangeAll();
shortcut: "Ctrl+R";
id: arrangeAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange All Models")
onTriggered: Printer.arrangeAll()
shortcut: "Ctrl+R"
}
Action
{
id: arrangeSelectionAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange Selection");
onTriggered: Printer.arrangeSelection();
id: arrangeSelectionAction
text: catalog.i18nc("@action:inmenu menubar:edit","Arrange Selection")
onTriggered: Printer.arrangeSelection()
}
Action
{
id: resetAllTranslationAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions");
onTriggered: CuraApplication.resetAllTranslation();
id: resetAllTranslationAction
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Positions")
onTriggered: CuraApplication.resetAllTranslation()
}
Action
{
id: resetAllAction;
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations");
onTriggered: CuraApplication.resetAll();
id: resetAllAction
text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations")
onTriggered: CuraApplication.resetAll()
}
Action
{
id: openAction;
id: openAction
property var fileProviderModel: CuraApplication.getFileProviderModel()
text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)...");
iconName: "document-open";
text: catalog.i18nc("@action:inmenu menubar:file","&Open File(s)...")
icon.name: "document-open"
// 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
shortcut: fileProviderModel.count == 1 ? StandardKey.Open : "";
shortcut: fileProviderModel.count == 1 ? StandardKey.Open : ""
}
Action
{
id: newProjectAction
text: catalog.i18nc("@action:inmenu menubar:file","&New Project...");
text: catalog.i18nc("@action:inmenu menubar:file","&New Project...")
shortcut: StandardKey.New
}
Action
{
id: showProfileFolderAction;
text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder");
id: showProfileFolderAction
text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder")
}
Action
{
id: configureSettingVisibilityAction
text: catalog.i18nc("@action:menu", "Configure setting visibility...");
iconName: "configure"
text: catalog.i18nc("@action:menu", "Configure setting visibility...")
icon.name: "configure"
}
Action
{
id: browsePackagesAction
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.Dialogs 1.2
import QtGraphicalEffects 1.0
import UM 1.3 as UM
import QtQuick.Controls 2.15 as NewControls
import UM 1.5 as UM
import Cura 1.1 as Cura
import "Dialogs"
@ -160,7 +160,6 @@ UM.MainWindow
ApplicationMenu
{
id: applicationMenu
window: base
}
Item

View File

@ -2,11 +2,10 @@
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.2
import UM 1.3 as UM
import UM 1.5 as UM
import Cura 1.1 as Cura
import "../Menus"
@ -15,37 +14,19 @@ import "../Dialogs"
Item
{
id: menu
width: applicationMenu.width
width: parent.width
height: applicationMenu.height
property alias window: applicationMenu.window
UM.ApplicationMenu
MenuBar
{
id: applicationMenu
width: parent.width
FileMenu {}
FileMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&File") }
EditMenu {}
ViewMenu {}
Menu
{
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") }
background: Rectangle {}
SettingsMenu
{
@ -59,92 +40,14 @@ Item
title: (Qt.platform.os == "osx") ? "&Settings" : catalog.i18nc("@title:menu menubar:toplevel", "&Settings")
}
Menu
{
id: extensionMenu
title: catalog.i18nc("@title:menu menubar:toplevel", "E&xtensions")
ExtensionMenu {}
Instantiator
{
id: extensions
model: UM.ExtensionModel { }
PreferencesMenu {}
Menu
{
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
HelpMenu {}
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
// ###############################################################################################

View File

@ -3,7 +3,6 @@
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import UM 1.5 as UM
@ -19,7 +18,7 @@ Cura.ExpandablePopup
id: base
property var extrudersModel: CuraApplication.getExtrudersModel()
property var activeMachine: Cura.MachineManager.activeMachine
UM.I18nCatalog
{
id: catalog
@ -33,7 +32,7 @@ Cura.ExpandablePopup
}
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
{
@ -44,7 +43,7 @@ Cura.ExpandablePopup
anchors.bottom: parent.bottom
anchors.left: parent.left
width: parent.width - UM.Theme.getSize("standard_arrow").width
visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasMaterials : false
visible: activeMachine ? activeMachine.hasMaterials : false
Repeater
{
model: extrudersModel
@ -56,9 +55,9 @@ Cura.ExpandablePopup
Layout.maximumWidth: Math.round(parent.width / extrudersModel.count)
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 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.
Cura.ExtruderIcon
@ -224,7 +223,7 @@ Cura.ExpandablePopup
{
id: variantLabel
visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasVariants : false
visible: activeMachine ? activeMachine.hasVariants : false
text: model.variant
elide: Text.ElideRight
@ -243,7 +242,7 @@ Cura.ExpandablePopup
elide: Text.ElideRight
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
{
@ -268,7 +267,7 @@ Cura.ExpandablePopup
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
// or the previous state is selected

View File

@ -35,7 +35,7 @@ Item
}
}
//Printer type selector.
// Printer type selector.
Item
{
id: printerTypeSelectorRow
@ -64,17 +64,18 @@ Item
anchors.left: parent.left
}
OldControls.ToolButton
Button
{
id: printerTypeSelector
text: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.definition.name: ""
tooltip: text
height: UM.Theme.getSize("print_setup_big_item").height
width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width
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.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls 2.1
import QtQuick.Dialogs 1.2
import QtQuick.Window 2.1
import UM 1.2 as UM
import UM 1.5 as UM
import Cura 1.0 as Cura
Menu
@ -18,79 +18,59 @@ Menu
property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel()
// Selection-related actions.
MenuItem { action: Cura.Actions.centerSelection; }
MenuItem { action: Cura.Actions.deleteSelection; }
MenuItem { action: Cura.Actions.multiplySelection; }
UM.MenuItem { action: Cura.Actions.centerSelection; }
UM.MenuItem { action: Cura.Actions.deleteSelection; }
UM.MenuItem { action: Cura.Actions.multiplySelection; }
// Extruder selection - only visible if there is more than 1 extruder
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
{
model: CuraApplication.getExtrudersModel()
MenuItem {
UM.MenuItem
{
text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant)
visible: base.shouldShowExtruders
height: visible ? implicitHeight: 0
enabled: UM.Selection.hasSelection && model.enabled
checkable: true
checked: Cura.ExtruderManager.selectedObjectExtruders.indexOf(model.id) != -1
onTriggered: CuraActions.setExtruderForSelection(model.id)
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)
}
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
MenuSeparator {}
MenuItem { action: Cura.Actions.selectAll; }
MenuItem { action: Cura.Actions.arrangeAll; }
MenuItem { action: Cura.Actions.deleteAll; }
MenuItem { action: Cura.Actions.reloadAll; }
MenuItem { action: Cura.Actions.resetAllTranslation; }
MenuItem { action: Cura.Actions.resetAll; }
UM.MenuItem { action: Cura.Actions.selectAll }
UM.MenuItem { action: Cura.Actions.arrangeAll }
UM.MenuItem { action: Cura.Actions.deleteAll }
UM.MenuItem { action: Cura.Actions.reloadAll }
UM.MenuItem { action: Cura.Actions.resetAllTranslation }
UM.MenuItem { action: Cura.Actions.resetAll }
// Group actions
MenuSeparator {}
MenuItem { action: Cura.Actions.groupObjects; }
MenuItem { action: Cura.Actions.mergeObjects; }
MenuItem { action: Cura.Actions.unGroupObjects; }
UM.MenuItem { action: Cura.Actions.groupObjects }
UM.MenuItem { action: Cura.Actions.mergeObjects }
UM.MenuItem { action: Cura.Actions.unGroupObjects }
Connections
{
target: UM.Controller
function onContextMenuRequested() { base.popup(); }
function onContextMenuRequested() { base.popup() }
}
Connections
@ -146,31 +126,9 @@ Menu
{
id: copiesField
focus: true
minimumValue: 1
maximumValue: 99
from: 1
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.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls 2.1
import UM 1.6 as UM
import Cura 1.0 as Cura
@ -13,31 +13,34 @@ Menu
title: catalog.i18nc("@title:menu menubar:toplevel", "&File")
property var fileProviderModel: CuraApplication.getFileProviderModel()
MenuItem
UM.MenuItem
{
id: newProjectMenu
action: Cura.Actions.newProject
}
MenuItem
UM.MenuItem
{
id: openMenu
action: Cura.Actions.open
visible: (base.fileProviderModel.count == 1)
visible: base.fileProviderModel.count == 1
height: visible ? implicitHeight: 0
}
OpenFilesMenu
{
id: openFilesMenu
visible: (base.fileProviderModel.count > 1)
shouldBeVisible: base.fileProviderModel.count > 1
}
RecentFilesMenu { }
MenuItem
UM.MenuItem
{
id: saveWorkspaceMenu
shortcut: visible ? StandardKey.Save : ""
shortcut: StandardKey.Save
text: catalog.i18nc("@title:menu menubar:file", "&Save Project...")
visible: saveProjectMenu.model.count == 1
enabled: UM.WorkspaceFileHandler.enabled
@ -62,13 +65,13 @@ Menu
{
id: saveProjectMenu
model: projectOutputDevicesModel
visible: model.count > 1
shouldBeVisible: model.count > 1
enabled: UM.WorkspaceFileHandler.enabled
}
MenuSeparator { }
MenuItem
UM.MenuItem
{
id: saveAsMenu
text: catalog.i18nc("@title:menu menubar:file", "&Export...")
@ -79,18 +82,18 @@ Menu
}
}
MenuItem
UM.MenuItem
{
id: exportSelectionMenu
text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...")
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"})
}
MenuSeparator { }
MenuItem
UM.MenuItem
{
id: reloadAllMenu
action: Cura.Actions.reloadAll
@ -98,5 +101,5 @@ Menu
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.
//Cura is released under the terms of the LGPLv3 or higher.
// Copyright (c) 2022 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
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
Menu
UM.Menu
{
id: menu
id: materialMenu
title: catalog.i18nc("@label:category menu label", "Material")
property int extruderIndex: 0
@ -25,50 +25,50 @@ Menu
}
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
Cura.FavoriteMaterialsModel
{
id: favoriteMaterialsModel
extruderPosition: menu.extruderIndex
extruderPosition: materialMenu.extruderIndex
enabled: updateModels
}
Cura.GenericMaterialsModel
{
id: genericMaterialsModel
extruderPosition: menu.extruderIndex
extruderPosition: materialMenu.extruderIndex
enabled: updateModels
}
Cura.MaterialBrandsModel
{
id: brandModel
extruderPosition: menu.extruderIndex
extruderPosition: materialMenu.extruderIndex
enabled: updateModels
}
MenuItem
UM.MenuItem
{
text: catalog.i18nc("@label:category menu label", "Favorites")
enabled: false
visible: favoriteMaterialsModel.items.length > 0
height: visible ? implicitHeight: 0
}
Instantiator
{
model: favoriteMaterialsModel
delegate: MenuItem
delegate: UM.MenuItem
{
text: model.brand + " " + model.name
checkable: true
enabled: isActiveExtruderEnabled
checked: model.root_material_id === menu.currentRootMaterialId
checked: model.root_material_id === materialMenu.currentRootMaterialId
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)
onObjectRemoved: menu.removeItem(index)
onObjectAdded: materialMenu.insertItem(index, object)
onObjectRemoved: materialMenu.removeItem(index)
}
MenuSeparator {}
@ -81,13 +81,12 @@ Menu
Instantiator
{
model: genericMaterialsModel
delegate: MenuItem
delegate: UM.MenuItem
{
text: model.name
checkable: true
enabled: isActiveExtruderEnabled
checked: model.root_material_id === menu.currentRootMaterialId
exclusiveGroup: group
checked: model.root_material_id === materialMenu.currentRootMaterialId
onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
}
onObjectAdded: genericMenu.insertItem(index, object)
@ -100,7 +99,7 @@ Menu
Instantiator
{
model: brandModel
Menu
UM.Menu
{
id: brandMenu
title: brandName
@ -120,47 +119,37 @@ Menu
Instantiator
{
model: brandMaterialColors
delegate: MenuItem
delegate: UM.MenuItem
{
text: model.name
checkable: true
enabled: isActiveExtruderEnabled
checked: model.id === menu.activeMaterialId
exclusiveGroup: group
checked: model.id === materialMenu.activeMaterialId
onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node)
}
onObjectAdded: brandMaterialsMenu.insertItem(index, object)
onObjectRemoved: brandMaterialsMenu.removeItem(object)
}
}
onObjectAdded: brandMenu.insertItem(index, object)
onObjectRemoved: brandMenu.removeItem(object)
onObjectAdded: brandMenu.insertMenu(index, object)
onObjectRemoved: brandMenu.removeMenu(object)
}
}
onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object)
}
ExclusiveGroup
{
id: group
}
ExclusiveGroup
{
id: favoriteGroup
onObjectAdded: materialMenu.insertMenu(index, object)
onObjectRemoved: materialMenu.removeMenu(object)
}
MenuSeparator {}
MenuItem
UM.MenuItem
{
action: Cura.Actions.manageMaterials
}
MenuSeparator {}
MenuItem
UM.MenuItem
{
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.
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
Menu
UM.Menu
{
id: menu
id: nozzleMenu
title: "Nozzle"
property int extruderIndex: 0
@ -23,38 +23,34 @@ Menu
{
model: nozzleModel
MenuItem
UM.MenuItem
{
text: model.hotend_name
checkable: true
checked: {
var activeMachine = Cura.MachineManager.activeMachine
property var activeMachine: Cura.MachineManager.activeMachine
checked:
{
if (activeMachine === null)
{
return false
}
var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex]
var extruder = activeMachine.extruderList[extruderIndex]
return (extruder === undefined) ? false : (extruder.variant.name == model.hotend_name)
}
exclusiveGroup: group
enabled:
{
var activeMachine = Cura.MachineManager.activeMachine
if (activeMachine === null)
{
return false
}
var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex]
var extruder = activeMachine.extruderList[extruderIndex]
return (extruder === undefined) ? false : extruder.isEnabled
}
onTriggered: {
Cura.MachineManager.setVariant(menu.extruderIndex, model.container_node);
}
onTriggered: Cura.MachineManager.setVariant(nozzleMenu.extruderIndex, model.container_node)
}
onObjectAdded: menu.insertItem(index, object);
onObjectRemoved: menu.removeItem(object);
onObjectAdded: nozzleMenu.insertItem(index, 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.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls 2.1
import UM 1.6 as UM
import Cura 1.0 as Cura
import "../Dialogs"
Menu
UM.Menu
{
id: openFilesMenu
title: catalog.i18nc("@title:menu menubar:file", "Open File(s)...")
iconName: "document-open-recent";
Instantiator
{
id: fileProviders
model: CuraApplication.getFileProviderModel()
MenuItem
UM.MenuItem
{
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.
// When there is a single file provider, the openAction is assigned with the Ctrl+O shortcut instead.
shortcut: openFilesMenu.visible ? model.shortcut : ""
visible: openFilesMenu.visible
}
onObjectAdded: openFilesMenu.insertItem(index, 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.
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
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")
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
{
visible: networkPrinterMenu.count > 0
visible: networKPrinterInstantiator.count > 0
}
MenuItem
{
text: catalog.i18nc("@label:category menu label", "Local printers")
enabled: false
visible: localPrinterMenu.count > 0
}
LocalPrinterMenu
UM.MenuItem
{
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
{
visible: localPrinterMenu.count > 0
visible: localPrinterInstantiator.count > 0
}
MenuItem { action: Cura.Actions.addMachine; }
MenuItem { action: Cura.Actions.configureMachines; }
UM.MenuItem { action: Cura.Actions.addMachine }
UM.MenuItem { action: Cura.Actions.configureMachines }
}

View File

@ -2,9 +2,9 @@
// Cura is released under the terms of the LGPLv3 or higher.
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
Menu
@ -18,12 +18,11 @@ Menu
id: printerTypeInstantiator
model: outputDevice != null ? outputDevice.connectedPrintersTypeCount : []
MenuItem
UM.MenuItem
{
text: modelData.machine_type
checkable: true
checked: Cura.MachineManager.activeMachine.definition.name == modelData.machine_type
exclusiveGroup: group
onTriggered:
{
Cura.MachineManager.switchPrinterType(modelData.machine_type)
@ -32,6 +31,4 @@ Menu
onObjectAdded: menu.insertItem(index, 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.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls 2.1
import UM 1.3 as UM
import Cura 1.0 as Cura
@ -13,7 +13,7 @@ Menu
{
id: menu
title: catalog.i18nc("@title:menu menubar:file", "Open &Recent")
iconName: "document-open-recent";
//iconName: "document-open-recent";
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.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls 2.1
import UM 1.6 as UM
import Cura 1.1 as Cura
import "../Dialogs"
Menu
UM.Menu
{
id: saveProjectMenu
title: catalog.i18nc("@title:menu menubar:file", "Save Project...")
@ -18,7 +18,7 @@ Menu
Instantiator
{
id: projectOutputDevices
MenuItem
UM.MenuItem
{
text: model.name
onTriggered:

View File

@ -2,9 +2,9 @@
//Cura is released under the terms of the LGPLv3 or higher.
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
Menu
@ -23,11 +23,16 @@ Menu
{
title: modelData.name
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
{
title: catalog.i18nc("@title:menu", "&Material")
visible: Cura.MachineManager.activeMachine.hasMaterials
shouldBeVisible: activeMachine.hasMaterials
extruderIndex: index
updateModels: false
onAboutToShow: updateModels = true
@ -39,33 +44,34 @@ Menu
visible: Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasMaterials
}
MenuItem
UM.MenuItem
{
text: catalog.i18nc("@action:inmenu", "Set as Active Extruder")
onTriggered: Cura.ExtruderManager.setActiveExtruderIndex(model.index)
}
MenuItem
UM.MenuItem
{
text: catalog.i18nc("@action:inmenu", "Enable Extruder")
onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true)
visible: (extruder === null || extruder === undefined) ? false : !extruder.isEnabled
height: visible ? implicitHeight: 0
}
MenuItem
UM.MenuItem
{
text: catalog.i18nc("@action:inmenu", "Disable Extruder")
onTriggered: Cura.MachineManager.setExtruderEnabled(index, false)
visible: (extruder === null || extruder === undefined) ? false : extruder.isEnabled
enabled: Cura.MachineManager.numberExtrudersEnabled > 1
height: visible ? implicitHeight: 0
}
}
onObjectAdded: base.insertItem(index, object)
onObjectRemoved: base.removeItem(object)
onObjectAdded: base.insertMenu(index, object)
onObjectRemoved: base.removeMenu(object)
}
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.
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
Menu
{
title: catalog.i18nc("@title:menu menubar:toplevel", "&View")
id: base
property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel()
title: catalog.i18nc("@title:menu menubar:toplevel", "&View")
Menu
{
title: catalog.i18nc("@action:inmenu menubar:view","&Camera position");
MenuItem { action: Cura.Actions.view3DCamera; }
MenuItem { action: Cura.Actions.viewFrontCamera; }
MenuItem { action: Cura.Actions.viewTopCamera; }
MenuItem { action: Cura.Actions.viewBottomCamera; }
MenuItem { action: Cura.Actions.viewLeftSideCamera; }
MenuItem { action: Cura.Actions.viewRightSideCamera; }
title: catalog.i18nc("@action:inmenu menubar:view", "&Camera position")
UM.MenuItem { action: Cura.Actions.view3DCamera }
UM.MenuItem { action: Cura.Actions.viewFrontCamera }
UM.MenuItem { action: Cura.Actions.viewTopCamera }
UM.MenuItem { action: Cura.Actions.viewBottomCamera }
UM.MenuItem { action: Cura.Actions.viewLeftSideCamera }
UM.MenuItem { action: Cura.Actions.viewRightSideCamera }
}
Menu
{
id: cameraViewMenu
title: catalog.i18nc("@action:inmenu menubar:view", "Camera view")
property string cameraMode: UM.Preferences.getValue("general/camera_perspective_mode")
Connections
{
target: UM.Preferences
@ -42,7 +43,6 @@ Menu
}
}
title: catalog.i18nc("@action:inmenu menubar:view","Camera view")
MenuItem
{
text: catalog.i18nc("@action:inmenu menubar:view", "Perspective")
@ -52,8 +52,8 @@ Menu
{
UM.Preferences.setValue("general/camera_perspective_mode", "perspective")
}
exclusiveGroup: group
}
MenuItem
{
text: catalog.i18nc("@action:inmenu menubar:view", "Orthographic")
@ -63,45 +63,12 @@ Menu
{
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 {}
MenuItem
UM.MenuItem
{
action: Cura.Actions.toggleFullScreen
}

View File

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