diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json index f1af8a7a90..c39684bc1f 100644 --- a/resources/bundled_packages/cura.json +++ b/resources/bundled_packages/cura.json @@ -124,7 +124,7 @@ "package_type": "plugin", "display_name": "Ultimaker Digital Library", "description": "Connects to the Digital Library, allowing Cura to open files from and save files to the Digital Library.", - "package_version": "1.0.0", + "package_version": "1.1.0", "sdk_version": "7.8.0", "website": "https://ultimaker.com", "author": { diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index ef1622daee..b058ead22f 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -12,8 +12,8 @@ Item property var profile: Cura.API.account.userProfile property var loggedIn: Cura.API.account.isLoggedIn - height: signInButton.height > accountWidget.height ? signInButton.height : accountWidget.height - width: signInButton.width > accountWidget.width ? signInButton.width : accountWidget.width + height: signInButton.visible ? signInButton.height : accountWidget.height + width: signInButton.visible ? signInButton.width : accountWidget.width Button { @@ -32,9 +32,18 @@ Item background: Rectangle { radius: UM.Theme.getSize("action_button_radius").width - color: signInButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + color: UM.Theme.getColor("main_window_header_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: signInButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + } } contentItem: Label @@ -42,7 +51,7 @@ Item id: label text: signInButton.text font: UM.Theme.getFont("default") - color: signInButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") width: contentWidth verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering @@ -54,7 +63,6 @@ Item id: accountWidget anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: signInButton.horizontalCenter implicitHeight: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) implicitWidth: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) @@ -90,9 +98,19 @@ Item width: Math.min(accountWidget.width, accountWidget.height) height: width radius: width - color: accountWidget.hovered ? UM.Theme.getColor("primary_text") : "transparent" - border.width: 1 + color: UM.Theme.getColor("main_window_header_background") + border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + id: initialCircleFill + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: accountWidget.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + } } Label @@ -102,7 +120,7 @@ Item anchors.horizontalCenter: parent.horizontalCenter text: accountWidget.text font: UM.Theme.getFont("large_bold") - color: accountWidget.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter renderType: Text.NativeRendering @@ -142,7 +160,7 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (signInButton.width / 2), -10) + target: Qt.point(width - ((signInButton.visible ? signInButton.width : accountWidget.width) / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } diff --git a/resources/qml/ApplicationSwitcher/ApplicationButton.qml b/resources/qml/ApplicationSwitcher/ApplicationButton.qml new file mode 100644 index 0000000000..bcf780753c --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationButton.qml @@ -0,0 +1,91 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Button +{ + id: base + + property alias iconSource: applicationIcon.source + property alias displayName: applicationDisplayName.text + property alias tooltipText: tooltip.text + property bool isExternalLink: false + property color borderColor: hovered ? UM.Theme.getColor("primary") : "transparent" + property color backgroundColor: hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + Behavior on backgroundColor { ColorAnimation { duration: 200; } } + Behavior on borderColor { ColorAnimation { duration: 200; } } + + hoverEnabled: true + width: UM.Theme.getSize("application_switcher_item").width + height: UM.Theme.getSize("application_switcher_item").height + + background: Rectangle + { + color:backgroundColor + border.color: borderColor + border.width: UM.Theme.getSize("default_lining").width + } + + Cura.ToolTip + { + id: tooltip + tooltipText: base.text + visible: base.hovered + } + + Column + { + id: applicationButtonContent + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + + UM.RecolorImage + { + id: applicationIcon + anchors.horizontalCenter: parent.horizontalCenter + + color: UM.Theme.getColor("icon") + width: UM.Theme.getSize("application_switcher_icon").width + height: width + + UM.RecolorImage + { + id: externalLinkIndicatorIcon + visible: base.isExternalLink + + anchors + { + bottom: parent.bottom + bottomMargin: - Math.round(height * 1 / 6) + right: parent.right + rightMargin: - Math.round(width * 5 / 6) + } + width: UM.Theme.getSize("icon_indicator").width + height: width + color: UM.Theme.getColor("icon") + source: UM.Theme.getIcon("LinkExternal") + } + } + + Label + { + id: applicationDisplayName + + anchors.left: parent.left + anchors.right: parent.right + + height: base.height - applicationIcon.height - 2 * UM.Theme.getSize("default_margin").width // Account for the top and bottom margins + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + wrapMode: Text.Wrap + elide: Text.ElideRight + color: UM.Theme.getColor("text") + } + } +} diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml new file mode 100644 index 0000000000..a8ea2312a5 --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcher.qml @@ -0,0 +1,61 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.15 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Item +{ + id: applicationSwitcherWidget + width: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + height: width + + Button + { + id: applicationSwitcherButton + + anchors.fill: parent + + background: Item + { + Rectangle + { + anchors.fill: parent + radius: UM.Theme.getSize("action_button_radius").width + color: UM.Theme.getColor("primary_text") + opacity: applicationSwitcherButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100; } } + } + + UM.RecolorImage + { + anchors.fill: parent + color: UM.Theme.getColor("primary_text") + + source: UM.Theme.getIcon("BlockGrid") + } + } + + onClicked: + { + if (applicationSwitcherPopup.opened) + { + applicationSwitcherPopup.close() + } else { + applicationSwitcherPopup.open() + } + } + } + ApplicationSwitcherPopup + { + id: applicationSwitcherPopup + y: parent.height + UM.Theme.getSize("default_arrow").height + + // Move the x position by the default margin so that the arrow isn't drawn exactly on the corner + x: parent.width - width + UM.Theme.getSize("default_margin").width + } +} \ No newline at end of file diff --git a/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml new file mode 100644 index 0000000000..7d08b766a8 --- /dev/null +++ b/resources/qml/ApplicationSwitcher/ApplicationSwitcherPopup.qml @@ -0,0 +1,110 @@ +// Copyright (c) 2021 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.15 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Popup +{ + id: applicationSwitcherPopup + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + padding: UM.Theme.getSize("wide_margin").width + + contentItem: Grid + { + id: ultimakerPlatformLinksGrid + columns: 3 + spacing: UM.Theme.getSize("default_margin").width + + Repeater + { + model: + [ + { + displayName: catalog.i18nc("@label:button", "My printers"), + thumbnail: UM.Theme.getIcon("PrinterTriple", "high"), + description: catalog.i18nc("@tooltip:button", "Monitor printers in Ultimaker Digital Factory."), + link: "https://digitalfactory.ultimaker.com/app/printers?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory-printers" + }, + { + displayName: "Digital Library", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Library", "high"), + description: catalog.i18nc("@tooltip:button", "Create print projects in Digital Library."), + link: "https://digitalfactory.ultimaker.com/app/library?utm_source=cura&utm_medium=software&utm_campaign=switcher-library" + }, + { + displayName: catalog.i18nc("@label:button", "Print jobs"), + thumbnail: UM.Theme.getIcon("FoodBeverages"), + description: catalog.i18nc("@tooltip:button", "Monitor print jobs and reprint from your print history."), + link: "https://digitalfactory.ultimaker.com/app/print-jobs?utm_source=cura&utm_medium=software&utm_campaign=switcher-digital-factory- printjobs" + }, + { + displayName: "Ultimaker Marketplace", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Shop", "high"), + description: catalog.i18nc("@tooltip:button", "Extend Ultimaker Cura with plugins and material profiles."), + link: "https://marketplace.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-marketplace-materials" + }, + { + displayName: "Ultimaker Academy", //Not translated, since it's a brand name. + thumbnail: UM.Theme.getIcon("Knowledge"), + description: catalog.i18nc("@tooltip:button", "Become a 3D printing expert with Ultimaker e-learning."), + link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy" + }, + { + displayName: catalog.i18nc("@label:button", "Ultimaker support"), + thumbnail: UM.Theme.getIcon("Help", "high"), + description: catalog.i18nc("@tooltip:button", "Learn how to get started with Ultimaker Cura."), + link: "https://support.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-support" + }, + { + displayName: catalog.i18nc("@label:button", "Ask a question"), + thumbnail: UM.Theme.getIcon("Speak", "high"), + description: catalog.i18nc("@tooltip:button", "Consult the Ultimaker Community."), + link: "https://community.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-community" + }, + { + displayName: catalog.i18nc("@label:button", "Report a bug"), + thumbnail: UM.Theme.getIcon("Bug", "high"), + description: catalog.i18nc("@tooltip:button", "Let developers know that something is going wrong."), + link: "https://github.com/Ultimaker/Cura/issues/new/choose" + }, + { + displayName: "Ultimaker.com", //Not translated, since it's a URL. + thumbnail: UM.Theme.getIcon("Browser"), + description: catalog.i18nc("@tooltip:button", "Visit the Ultimaker website."), + link: "https://ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-umwebsite" + } + ] + + delegate: ApplicationButton + { + displayName: modelData.displayName + iconSource: modelData.thumbnail + tooltipText: modelData.description + isExternalLink: true + + onClicked: Qt.openUrlExternally(modelData.link) + } + } + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + // Move the target by the default margin so that the arrow isn't drawn exactly on the corner + target: Qt.point(width - UM.Theme.getSize("default_margin").width - (applicationSwitcherButton.width / 2), -10) + + arrowSize: UM.Theme.getSize("default_arrow").width + } +} \ No newline at end of file diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index c27f3b0a24..815ddff732 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -10,6 +10,7 @@ import UM 1.4 as UM import Cura 1.0 as Cura import "../Account" +import "../ApplicationSwitcher" Item { @@ -94,10 +95,21 @@ Item background: Rectangle { + id: marketplaceButtonBorder radius: UM.Theme.getSize("action_button_radius").width - color: marketplaceButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + color: UM.Theme.getColor("main_window_header_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("primary_text") + + Rectangle + { + id: marketplaceButtonFill + anchors.fill: parent + radius: parent.radius + color: UM.Theme.getColor("primary_text") + opacity: marketplaceButton.hovered ? 0.2 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + } } contentItem: Label @@ -105,7 +117,7 @@ Item id: label text: marketplaceButton.text font: UM.Theme.getFont("default") - color: marketplaceButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + color: UM.Theme.getColor("primary_text") width: contentWidth verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering @@ -113,7 +125,7 @@ Item anchors { - right: accountWidget.left + right: applicationSwitcher.left rightMargin: UM.Theme.getSize("default_margin").width verticalCenter: parent.verticalCenter } @@ -138,6 +150,17 @@ Item } } + ApplicationSwitcher + { + id: applicationSwitcher + anchors + { + verticalCenter: parent.verticalCenter + right: accountWidget.left + rightMargin: UM.Theme.getSize("default_margin").width + } + } + AccountWidget { id: accountWidget diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index 6dc8835de1..d089d2c16b 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -98,7 +98,7 @@ When double clicking on a file in the open project dialog in Digital Factory it - Fixed a bug when the seam was not placed in sharpest corner. - Fixed the gantry height for S-line printers. - Fixed a bug where a model is partially below build plate if center selected model is used. -- Fixed a bug where a tootip arrow appeared when the "Manage printers" button is hovered. +- Fixed a bug where a tooltip arrow appeared when the "Manage printers" button is hovered. - Fixed a bug where assemblies were not arranged in the center of the build plate. * Printer definitions, profiles and materials. diff --git a/resources/themes/cura-light/icons/default/BlockGrid.svg b/resources/themes/cura-light/icons/default/BlockGrid.svg new file mode 100644 index 0000000000..207171b8f7 --- /dev/null +++ b/resources/themes/cura-light/icons/default/BlockGrid.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Browser.svg b/resources/themes/cura-light/icons/default/Browser.svg new file mode 100644 index 0000000000..01365ec678 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Browser.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Bug.svg b/resources/themes/cura-light/icons/default/Bug.svg new file mode 100644 index 0000000000..7ad9bb4f1c --- /dev/null +++ b/resources/themes/cura-light/icons/default/Bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/FoodBeverages.svg b/resources/themes/cura-light/icons/default/FoodBeverages.svg new file mode 100644 index 0000000000..1e74b33955 --- /dev/null +++ b/resources/themes/cura-light/icons/default/FoodBeverages.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Help.svg b/resources/themes/cura-light/icons/default/Help.svg new file mode 100644 index 0000000000..84f94c2703 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Help.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Knowledge.svg b/resources/themes/cura-light/icons/default/Knowledge.svg new file mode 100644 index 0000000000..4f8798d5f1 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Knowledge.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Library.svg b/resources/themes/cura-light/icons/default/Library.svg new file mode 100644 index 0000000000..beb8c6e593 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Library.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Shop.svg b/resources/themes/cura-light/icons/default/Shop.svg new file mode 100644 index 0000000000..bfd5a4bf69 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Shop.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/default/Speak.svg b/resources/themes/cura-light/icons/default/Speak.svg new file mode 100644 index 0000000000..8f308643a7 --- /dev/null +++ b/resources/themes/cura-light/icons/default/Speak.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Bug.svg b/resources/themes/cura-light/icons/high/Bug.svg new file mode 100644 index 0000000000..a24963cd8e --- /dev/null +++ b/resources/themes/cura-light/icons/high/Bug.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Help.svg b/resources/themes/cura-light/icons/high/Help.svg new file mode 100644 index 0000000000..355b9dd468 --- /dev/null +++ b/resources/themes/cura-light/icons/high/Help.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Library.svg b/resources/themes/cura-light/icons/high/Library.svg new file mode 100644 index 0000000000..3ddc018543 --- /dev/null +++ b/resources/themes/cura-light/icons/high/Library.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/PrinterTriple.svg b/resources/themes/cura-light/icons/high/PrinterTriple.svg new file mode 100644 index 0000000000..65e4936bc2 --- /dev/null +++ b/resources/themes/cura-light/icons/high/PrinterTriple.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Shop.svg b/resources/themes/cura-light/icons/high/Shop.svg new file mode 100644 index 0000000000..7662cf4b9b --- /dev/null +++ b/resources/themes/cura-light/icons/high/Shop.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/icons/high/Speak.svg b/resources/themes/cura-light/icons/high/Speak.svg new file mode 100644 index 0000000000..68642bba2b --- /dev/null +++ b/resources/themes/cura-light/icons/high/Speak.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index d50a748493..daa12b3390 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -499,6 +499,9 @@ "print_setup_icon": [1.2, 1.2], "drag_icon": [1.416, 0.25], + "application_switcher_item": [8, 9], + "application_switcher_icon": [3.75, 3.75], + "expandable_component_content_header": [0.0, 3.0], "configuration_selector": [35.0, 4.0], @@ -571,6 +574,9 @@ "favorites_button": [2, 2], "favorites_button_icon": [1.2, 1.2], + "icon_indicator_background": [1.5, 1.5], + "icon_indicator": [1, 1], + "printer_status_icon": [1.0, 1.0], "printer_sync_icon": [1.2, 1.2],