Browse Source

Merge remote-tracking branch 'upstream/master' into dagoma_discoultimate

Orel 5 years ago
parent
commit
9120554a84

+ 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 - 0
cura/CuraApplication.py

@@ -391,6 +391,8 @@ class CuraApplication(QtApplication):
         SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders)
         SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue)
         SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition)
+        SettingFunction.registerOperator("valueFromContainer", self._cura_formula_functions.getValueFromContainerAtIndex)
+        SettingFunction.registerOperator("extruderValueFromContainer", self._cura_formula_functions.getValueFromContainerAtIndexInExtruder)
 
     # Adds all resources and container related resources.
     def __addAllResourcesAndContainerResources(self) -> None:

+ 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@"

+ 32 - 0
cura/Settings/CuraFormulaFunctions.py

@@ -133,6 +133,38 @@ class CuraFormulaFunctions:
         context = self.createContextForDefaultValueEvaluation(global_stack)
         return self.getResolveOrValue(property_key, context = context)
 
+    # Gets the value for the given setting key starting from the given container index.
+    def getValueFromContainerAtIndex(self, property_key: str, container_index: int,
+                                     context: Optional["PropertyEvaluationContext"] = None) -> Any:
+        machine_manager = self._application.getMachineManager()
+        global_stack = machine_manager.activeMachine
+
+        context = self.createContextForDefaultValueEvaluation(global_stack)
+        context.context["evaluate_from_container_index"] = container_index
+
+        return global_stack.getProperty(property_key, "value", context = context)
+
+    # Gets the extruder value for the given setting key starting from the given container index.
+    def getValueFromContainerAtIndexInExtruder(self, extruder_position: int, property_key: str, container_index: int,
+                                               context: Optional["PropertyEvaluationContext"] = None) -> Any:
+        machine_manager = self._application.getMachineManager()
+        global_stack = machine_manager.activeMachine
+
+        if extruder_position == -1:
+            extruder_position = int(machine_manager.defaultExtruderPosition)
+
+        global_stack = machine_manager.activeMachine
+        try:
+            extruder_stack = global_stack.extruderList[int(extruder_position)]
+        except IndexError:
+            Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available. " % (property_key, extruder_position))
+            return None
+
+        context = self.createContextForDefaultValueEvaluation(extruder_stack)
+        context.context["evaluate_from_container_index"] = container_index
+
+        return self.getValueInExtruder(extruder_position, property_key, context)
+
     # Creates a context for evaluating default values (skip the user_changes container).
     def createContextForDefaultValueEvaluation(self, source_stack: "CuraContainerStack") -> "PropertyEvaluationContext":
         context = PropertyEvaluationContext(source_stack)

+ 1 - 1
cura/Settings/MachineManager.py

@@ -800,7 +800,7 @@ class MachineManager(QObject):
         definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count)
 
         self.updateDefaultExtruder()
-        self.updateNumberExtrudersEnabled()
+        self.numberExtrudersEnabledChanged.emit()
         self.correctExtruderSettings()
 
         # Check to see if any objects are set to print with an extruder that will no longer exist

+ 1 - 1
plugins/SimulationView/SimulationView.py

@@ -118,7 +118,7 @@ class SimulationView(CuraView):
 
         self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled."),
                                                   title = catalog.i18nc("@info:title", "Simulation View"))
-        self._slice_first_warning_message = Message(catalog.i18nc("@info:status", "Nothing is shown because you need to slice first."), title = catalog.i18nc("@info:title", "No layer data"))
+        self._slice_first_warning_message = Message(catalog.i18nc("@info:status", "Nothing is shown because you need to slice first."), title = catalog.i18nc("@info:title", "No layers to show"))
 
         QtApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
 

+ 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

Some files were not shown because too many files changed in this diff