Browse Source

Merge pull request #6988 from Ultimaker/CURA-7071

CURA-7071/Added option to redirect to Web MP from Cura MP
konskarm 5 years ago
parent
commit
35903e7dd3

+ 1 - 0
CMakeLists.txt

@@ -23,6 +23,7 @@ set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
 set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root")
 set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version")
 set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version")
+set(CURA_MARKETPLACE_ROOT "" CACHE STRING "Alternative Marketplace location")
 
 configure_file(${CMAKE_SOURCE_DIR}/cura.desktop.in ${CMAKE_BINARY_DIR}/cura.desktop @ONLY)
 

+ 1 - 1
cura/ApplicationMetadata.py

@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2020 Ultimaker B.V.
 # Cura is released under the terms of the LGPLv3 or higher.
 
 # ---------

+ 2 - 1
cura/CuraVersion.py.in

@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2020 Ultimaker B.V.
 # Cura is released under the terms of the LGPLv3 or higher.
 
 CuraAppName = "@CURA_APP_NAME@"
@@ -9,3 +9,4 @@ CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False
 CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@"
 CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@"
 CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@"
+CuraMarketplaceRoot = "@CURA_MARKETPLACE_ROOT@"

+ 3 - 0
plugins/Toolbox/resources/images/shop.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">
+    <path d="M19,3H5A2.9,2.9,0,0,0,2,6V9a3.9,3.9,0,0,0,2,3.4V22H20V12.4A3.9,3.9,0,0,0,22,9V6A2.9,2.9,0,0,0,19,3ZM10,5h4V9a2,2,0,0,1-4,0ZM4,9V5H8V9A2,2,0,0,1,4,9ZM18,20H14V15H10v5H6V13a3.7,3.7,0,0,0,3-1.4A3.7,3.7,0,0,0,12,13a3.7,3.7,0,0,0,3-1.4A3.7,3.7,0,0,0,18,13ZM20,9a2,2,0,0,1-4,0V5h4Z" />
+</svg>

+ 35 - 8
plugins/Toolbox/resources/qml/components/ToolboxDownloadsShowcase.qml

@@ -14,17 +14,44 @@ Rectangle
     Column
     {
         height: childrenRect.height + 2 * padding
-        spacing: UM.Theme.getSize("default_margin").width
+        spacing: UM.Theme.getSize("default_margin").height
         width: parent.width
         padding: UM.Theme.getSize("wide_margin").height
-        Label
+        Item
         {
-            id: heading
-            text: catalog.i18nc("@label", "Featured")
-            width: parent.width
-            color: UM.Theme.getColor("text_medium")
-            font: UM.Theme.getFont("large")
-            renderType: Text.NativeRendering
+            width: parent.width - parent.padding * 2
+            height: childrenRect.height
+            Label
+            {
+                id: heading
+                text: catalog.i18nc("@label", "Featured")
+                width: contentWidth
+                height: contentHeight
+                color: UM.Theme.getColor("text_medium")
+                font: UM.Theme.getFont("large")
+                renderType: Text.NativeRendering
+            }
+            UM.TooltipArea
+            {
+                width: childrenRect.width
+                height: childrenRect.height
+                anchors.right: parent.right
+                text: catalog.i18nc("@info:tooltip", "Go to Web Marketplace")
+                Label
+                {
+                    text: "<a href='%2'>".arg(toolbox.getWebMarketplaceUrl("materials")) + catalog.i18nc("@label", "Search materials") + "</a>"
+                    width: contentWidth
+                    height: contentHeight
+                    horizontalAlignment: Text.AlignRight
+                    font: UM.Theme.getFont("default")
+                    renderType: Text.NativeRendering
+
+                    linkColor: UM.Theme.getColor("text_link")
+                    onLinkActivated: Qt.openUrlExternally(link)
+
+                    visible: toolbox.viewCategory === "material"
+                }
+            }
         }
         Grid
         {

+ 38 - 18
plugins/Toolbox/resources/qml/components/ToolboxHeader.qml

@@ -1,4 +1,4 @@
-// Copyright (c) 2018 Ultimaker B.V.
+// Copyright (c) 2020 Ultimaker B.V.
 // Toolbox is released under the terms of the LGPLv3 or higher.
 
 import QtQuick 2.10
@@ -51,32 +51,25 @@ Item
                 toolbox.viewPage = "overview"
             }
         }
-    }
 
-    ToolboxTabButton
-    {
-        id: installedTabButton
-        text: catalog.i18nc("@title:tab", "Installed")
-        active: toolbox.viewCategory == "installed"
-        enabled: !toolbox.isDownloading
-        anchors
+        ToolboxTabButton
         {
-            right: parent.right
-            rightMargin: UM.Theme.getSize("default_margin").width
+            id: installedTabButton
+            text: catalog.i18nc("@title:tab", "Installed")
+            active: toolbox.viewCategory == "installed"
+            enabled: !toolbox.isDownloading
+            onClicked: toolbox.viewCategory = "installed"
+            width: UM.Theme.getSize("toolbox_header_tab").width + marketplaceNotificationIcon.width - UM.Theme.getSize("default_margin").width
         }
-        onClicked: toolbox.viewCategory = "installed"
-        width: UM.Theme.getSize("toolbox_header_tab").width + marketplaceNotificationIcon.width - UM.Theme.getSize("default_margin").width
+
+
     }
 
     Cura.NotificationIcon
     {
         id: marketplaceNotificationIcon
-
         visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
-
-        anchors.right: installedTabButton.right
-        anchors.verticalCenter: installedTabButton.verticalCenter
-
+        anchors.right: bar.right
         labelText:
         {
             const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
@@ -84,6 +77,33 @@ Item
         }
     }
 
+
+    UM.TooltipArea
+    {
+        id: webMarketplaceButtonTooltipArea
+        width: childrenRect.width
+        height: parent.height
+        text: catalog.i18nc("@info:tooltip", "Go to Web Marketplace")
+        anchors
+        {
+            right: parent.right
+            rightMargin: UM.Theme.getSize("default_margin").width
+            verticalCenter: parent.verticalCenter
+        }
+        onClicked: Qt.openUrlExternally(toolbox.getWebMarketplaceUrl("plugins"))
+        UM.RecolorImage
+        {
+            id: cloudMarketplaceButton
+            source: "../../images/shop.svg"
+            color: UM.Theme.getColor(webMarketplaceButtonTooltipArea.containsMouse ? "primary" : "text")
+            height: parent.height / 2
+            width: height
+            anchors.verticalCenter: parent.verticalCenter
+            sourceSize.width: width
+            sourceSize.height: height
+        }
+    }
+
     ToolboxShadow
     {
         anchors.top: bar.bottom

+ 15 - 0
plugins/Toolbox/src/Toolbox.py

@@ -16,6 +16,7 @@ from UM.i18n import i18nCatalog
 from UM.Version import Version
 
 from cura import ApplicationMetadata
+
 from cura.CuraApplication import CuraApplication
 from cura.Machines.ContainerTree import ContainerTree
 
@@ -31,6 +32,13 @@ if TYPE_CHECKING:
 
 i18n_catalog = i18nCatalog("cura")
 
+DEFAULT_MARKETPLACE_ROOT = "https://marketplace.ultimaker.com"  # type: str
+
+try:
+    from cura.CuraVersion import CuraMarketplaceRoot
+except ImportError:
+    CuraMarketplaceRoot = DEFAULT_MARKETPLACE_ROOT
+
 # todo Remove license and download dialog, use SyncOrchestrator instead
 
 ##  Provides a marketplace for users to download plugins an materials
@@ -766,6 +774,13 @@ class Toolbox(QObject, Extension):
     def materialsGenericModel(self) -> PackagesModel:
         return self._materials_generic_model
 
+    @pyqtSlot(str, result = str)
+    def getWebMarketplaceUrl(self, page: str) -> str:
+        root = CuraMarketplaceRoot
+        if root == "":
+            root = DEFAULT_MARKETPLACE_ROOT
+        return root + "/app/cura/" + page
+
     # Filter Models:
     # --------------------------------------------------------------------------
     @pyqtSlot(str, str, str)