Kostas Karmas 3 лет назад
Родитель
Сommit
d972c505d0

+ 17 - 0
plugins/DigitalLibrary/__init__.py

@@ -0,0 +1,17 @@
+# Copyright (c) 2021 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
+from .src import DigitalFactoryFileProvider, DigitalFactoryOutputDevicePlugin, DigitalFactoryController
+
+
+def getMetaData():
+    return {}
+
+
+def register(app):
+    df_controller = DigitalFactoryController.DigitalFactoryController(app)
+    return {
+        "file_provider": DigitalFactoryFileProvider.DigitalFactoryFileProvider(df_controller),
+        "output_device": DigitalFactoryOutputDevicePlugin.DigitalFactoryOutputDevicePlugin(df_controller)
+    }

+ 8 - 0
plugins/DigitalLibrary/plugin.json

@@ -0,0 +1,8 @@
+{
+    "name": "Ultimaker Digital Library",
+    "author": "Ultimaker B.V.",
+    "description": "Connects to the Digital Library, allowing Cura to open files from and save files to the Digital Library.",
+    "version": "1.0.0",
+    "api": "7.5.0",
+    "i18n-catalog": "cura"
+}

+ 6 - 0
plugins/DigitalLibrary/resources/images/arrow_down.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<polygon style="fill:#000E1A;" points="19.7,13.3 18.3,11.9 13,17.2 13,3 11,3 11,17.2 5.7,11.9 4.3,13.3 12,21 "/>
+</svg>

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
plugins/DigitalLibrary/resources/images/digital_factory.svg


+ 3 - 0
plugins/DigitalLibrary/resources/images/placeholder.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
+  <path d="M24,44,7,33.4V14.6L24,4,41,14.6V33.4ZM9,32.3l15,9.3,15-9.3V15.7L24,6.4,9,15.7Z"/>
+</svg>

+ 9 - 0
plugins/DigitalLibrary/resources/images/update.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Artwork" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<path d="M12,19.6L4.4,12L7,9.4V12h2V6H3v2h2.6L3.7,9.9c-1.2,1.2-1.2,3.1,0,4.2l6.2,6.2c1.2,1.2,3.1,1.2,4.2,0l0.6-0.6l-1.4-1.4
+	L12,19.6z"/>
+<path d="M20.3,9.9l-6.2-6.2c-1.2-1.2-3.1-1.2-4.2,0L9.3,4.3l1.4,1.4L12,4.4l7.6,7.6L17,14.6V12h-2v6h6v-2h-2.6l1.9-1.9
+	C21.5,12.9,21.5,11.1,20.3,9.9z"/>
+</svg>

+ 159 - 0
plugins/DigitalLibrary/resources/qml/CreateNewProjectPopup.qml

@@ -0,0 +1,159 @@
+// Copyright (C) 2021 Ultimaker B.V.
+
+import QtQuick 2.10
+import QtQuick.Window 2.2
+import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
+import QtQuick.Controls 2.3
+import QtQuick.Controls.Styles 1.4
+
+import UM 1.2 as UM
+import Cura 1.6 as Cura
+
+import DigitalFactory 1.0 as DF
+
+
+Popup
+{
+    id: base
+
+    padding: UM.Theme.getSize("default_margin").width
+
+    closePolicy: Popup.CloseOnEscape
+    focus: true
+    modal: true
+    background: Cura.RoundedRectangle
+    {
+        cornerSide: Cura.RoundedRectangle.Direction.All
+        border.color: UM.Theme.getColor("lining")
+        border.width: UM.Theme.getSize("default_lining").width
+        radius: UM.Theme.getSize("default_radius").width
+        width: parent.width
+        height: parent.height
+        color: UM.Theme.getColor("main_background")
+    }
+
+    Connections
+    {
+        target: manager
+
+        function onCreatingNewProjectStatusChanged(status)
+        {
+            if (status == DF.RetrievalStatus.Success)
+            {
+                base.close();
+            }
+        }
+    }
+
+    onOpened:
+    {
+        newProjectNameTextField.text = ""
+        newProjectNameTextField.focus = true
+    }
+
+    Label
+    {
+        id: createNewLibraryProjectLabel
+        text: "Create new Library project"
+        font: UM.Theme.getFont("medium")
+        color: UM.Theme.getColor("small_button_text")
+        anchors
+        {
+            top: parent.top
+            left: parent.left
+            right: parent.right
+        }
+    }
+
+    Label
+    {
+        id: projectNameLabel
+        text: "Project Name"
+        font: UM.Theme.getFont("default")
+        color: UM.Theme.getColor("text")
+        anchors
+        {
+            top: createNewLibraryProjectLabel.bottom
+            topMargin: UM.Theme.getSize("default_margin").width
+            left: parent.left
+            right: parent.right
+        }
+    }
+
+    Cura.TextField
+    {
+        id: newProjectNameTextField
+        width: parent.width
+        anchors
+        {
+            top: projectNameLabel.bottom
+            topMargin: UM.Theme.getSize("thin_margin").width
+            left: parent.left
+            right: parent.right
+        }
+        validator: RegExpValidator
+        {
+            regExp: /^[^\\\/\*\?\|\[\]]{0,96}$/
+        }
+
+        text: PrintInformation.jobName
+        font: UM.Theme.getFont("default")
+        placeholderText: "Enter a name for your new project."
+        onAccepted:
+        {
+            if (verifyProjectCreationButton.enabled)
+            {
+                verifyProjectCreationButton.clicked()
+            }
+        }
+    }
+
+    Label
+    {
+        id: errorWhileCreatingProjectLabel
+        text: manager.projectCreationErrorText
+        width: parent.width
+        wrapMode: Text.WordWrap
+        font: UM.Theme.getFont("default")
+        color: UM.Theme.getColor("error")
+        visible: manager.creatingNewProjectStatus == DF.RetrievalStatus.Failed
+        anchors
+        {
+            top: newProjectNameTextField.bottom
+            left: parent.left
+            right: parent.right
+        }
+    }
+
+    Cura.SecondaryButton
+    {
+        id: cancelProjectCreationButton
+
+        anchors.bottom: parent.bottom
+        anchors.left: parent.left
+
+        text: "Cancel"
+
+        onClicked:
+        {
+            base.close()
+        }
+        busy: false
+    }
+
+    Cura.PrimaryButton
+    {
+        id: verifyProjectCreationButton
+
+        anchors.bottom: parent.bottom
+        anchors.right: parent.right
+        text: "Create"
+        enabled: newProjectNameTextField.text != "" && !busy
+
+        onClicked:
+        {
+            manager.createLibraryProjectAndSetAsPreselected(newProjectNameTextField.text)
+        }
+        busy: manager.creatingNewProjectStatus == DF.RetrievalStatus.InProgress
+    }
+}

+ 61 - 0
plugins/DigitalLibrary/resources/qml/DigitalFactoryOpenDialog.qml

@@ -0,0 +1,61 @@
+// Copyright (C) 2021 Ultimaker B.V.
+
+import QtQuick 2.10
+import QtQuick.Window 2.2
+import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
+import QtQuick.Controls 2.3
+import QtQuick.Controls.Styles 1.4
+
+import UM 1.2 as UM
+import Cura 1.6 as Cura
+
+import DigitalFactory 1.0 as DF
+
+Window
+{
+    id: digitalFactoryOpenDialogBase
+    title: "Open file from Library"
+
+    modality: Qt.ApplicationModal
+    width: 800 * screenScaleFactor
+    height: 600 * screenScaleFactor
+    minimumWidth: 800 * screenScaleFactor
+    minimumHeight: 600 * screenScaleFactor
+
+    Shortcut
+    {
+        sequence: "Esc"
+        onActivated: digitalFactoryOpenDialogBase.close()
+    }
+    color: UM.Theme.getColor("main_background")
+
+    SelectProjectPage
+    {
+        visible: manager.selectedProjectIndex == -1
+        createNewProjectButtonVisible: false
+    }
+
+    OpenProjectFilesPage
+    {
+        visible: manager.selectedProjectIndex >= 0
+        onOpenFilePressed: digitalFactoryOpenDialogBase.close()
+    }
+
+
+    BusyIndicator
+    {
+        // Shows up while Cura is waiting to receive the user's projects from the digital factory library
+        id: retrievingProjectsBusyIndicator
+
+        anchors {
+            verticalCenter: parent.verticalCenter
+            horizontalCenter: parent.horizontalCenter
+        }
+
+        width: parent.width / 4
+        height: width
+        visible: manager.retrievingProjectsStatus == DF.RetrievalStatus.InProgress
+        running: visible
+        palette.dark: UM.Theme.getColor("text")
+    }
+}

+ 62 - 0
plugins/DigitalLibrary/resources/qml/DigitalFactorySaveDialog.qml

@@ -0,0 +1,62 @@
+// Copyright (C) 2021 Ultimaker B.V.
+
+import QtQuick 2.10
+import QtQuick.Window 2.2
+import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
+import QtQuick.Controls 2.3
+import QtQuick.Controls.Styles 1.4
+
+import UM 1.2 as UM
+import Cura 1.6 as Cura
+
+import DigitalFactory 1.0 as DF
+
+Window
+{
+    id: digitalFactorySaveDialogBase
+    title: "Save Cura project to Library"
+
+    modality: Qt.ApplicationModal
+    width: 800 * screenScaleFactor
+    height: 600 * screenScaleFactor
+    minimumWidth: 800 * screenScaleFactor
+    minimumHeight: 600 * screenScaleFactor
+
+    Shortcut
+    {
+        sequence: "Esc"
+        onActivated: digitalFactorySaveDialogBase.close()
+    }
+    color: UM.Theme.getColor("main_background")
+
+    SelectProjectPage
+    {
+        visible: manager.selectedProjectIndex == -1
+        createNewProjectButtonVisible: true
+    }
+
+    SaveProjectFilesPage
+    {
+        visible: manager.selectedProjectIndex >= 0
+        onSavePressed: digitalFactorySaveDialogBase.close()
+        onSelectDifferentProjectPressed: manager.clearProjectSelection()
+    }
+
+
+    BusyIndicator
+    {
+        // Shows up while Cura is waiting to receive the user's projects from the digital factory library
+        id: retrievingProjectsBusyIndicator
+
+        anchors {
+            verticalCenter: parent.verticalCenter
+            horizontalCenter: parent.horizontalCenter
+        }
+
+        width: parent.width / 4
+        height: width
+        visible: manager.retrievingProjectsStatus == DF.RetrievalStatus.InProgress
+        running: visible
+        palette.dark: UM.Theme.getColor("text")
+    }
+}

+ 129 - 0
plugins/DigitalLibrary/resources/qml/LoadMoreProjectsCard.qml

@@ -0,0 +1,129 @@
+// Copyright (C) 2021 Ultimaker B.V.
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+
+import UM 1.2 as UM
+import Cura 1.6 as Cura
+
+Cura.RoundedRectangle
+{
+    id: base
+    cornerSide: Cura.RoundedRectangle.Direction.All
+    border.color: UM.Theme.getColor("lining")
+    border.width: UM.Theme.getSize("default_lining").width
+    radius: UM.Theme.getSize("default_radius").width
+    signal clicked()
+    property var hasMoreProjectsToLoad
+    enabled: hasMoreProjectsToLoad
+    color: UM.Theme.getColor("main_background")
+
+    MouseArea
+    {
+        id: cardMouseArea
+        anchors.fill: parent
+        hoverEnabled: true
+    }
+
+    Row
+    {
+        id: projectInformationRow
+        anchors.horizontalCenter: parent.horizontalCenter
+        anchors.verticalCenter: parent.verticalCenter
+
+        UM.RecolorImage
+        {
+            id: projectImage
+            anchors.verticalCenter: parent.verticalCenter
+            width: UM.Theme.getSize("section").height
+            height: width
+            color: UM.Theme.getColor("text_link")
+            source: "../images/arrow_down.svg"
+        }
+
+        Label
+        {
+            id: displayNameLabel
+            anchors.verticalCenter: parent.verticalCenter
+            text: "Load more projects"
+            color: UM.Theme.getColor("text_link")
+            font: UM.Theme.getFont("medium_bold")
+        }
+    }
+
+    Component.onCompleted:
+    {
+        cardMouseArea.clicked.connect(base.clicked)
+    }
+
+    states:
+    [
+        State
+        {
+            name: "canLoadMoreProjectsAndHovered";
+            when: base.hasMoreProjectsToLoad && cardMouseArea.containsMouse
+            PropertyChanges
+            {
+                target: projectImage
+                color: UM.Theme.getColor("text_link")
+                source: "../images/arrow_down.svg"
+            }
+            PropertyChanges
+            {
+                target: displayNameLabel
+                color: UM.Theme.getColor("text_link")
+                text: "Load more projects"
+            }
+            PropertyChanges
+            {
+                target: base
+                color: UM.Theme.getColor("action_button_hovered")
+            }
+        },
+
+        State
+        {
+            name: "canLoadMoreProjectsAndNotHovered";
+            when: base.hasMoreProjectsToLoad && !cardMouseArea.containsMouse
+            PropertyChanges
+            {
+                target: projectImage
+                color: UM.Theme.getColor("text_link")
+                source: "../images/arrow_down.svg"
+            }
+            PropertyChanges
+            {
+                target: displayNameLabel
+                color: UM.Theme.getColor("text_link")
+                text: "Load more projects"
+            }
+            PropertyChanges
+            {
+                target: base
+                color: UM.Theme.getColor("main_background")
+            }
+        },
+
+        State
+        {
+            name: "noMoreProjectsToLoad"
+            when: !base.hasMoreProjectsToLoad
+            PropertyChanges
+            {
+                target: projectImage
+                color: UM.Theme.getColor("action_button_disabled_text")
+                source: "../images/update.svg"
+            }
+            PropertyChanges
+            {
+                target: displayNameLabel
+                color: UM.Theme.getColor("action_button_disabled_text")
+                text: "No more projects to load"
+            }
+            PropertyChanges
+            {
+                target: base
+                color: UM.Theme.getColor("action_button_disabled")
+            }
+        }
+    ]
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов