Allow PackageList to be used as a model from QML

QML is leading here and holding the pointers for creation and destruction.

Contributes to issue CURA-8556.
This commit is contained in:
Ghostkeeper 2021-10-21 15:46:46 +02:00
parent 4337e81b77
commit 3138452f94
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A
3 changed files with 19 additions and 4 deletions

View file

@ -3,6 +3,7 @@
import os.path import os.path
from PyQt5.QtCore import pyqtSlot from PyQt5.QtCore import pyqtSlot
from PyQt5.QtQml import qmlRegisterType
from typing import Optional, TYPE_CHECKING from typing import Optional, TYPE_CHECKING
from cura.ApplicationMetadata import CuraSDKVersion from cura.ApplicationMetadata import CuraSDKVersion
@ -12,6 +13,8 @@ from UM.Extension import Extension # We are implementing the main object of an
from UM.Logger import Logger from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry # To find out where we are stored (the proper way). from UM.PluginRegistry import PluginRegistry # To find out where we are stored (the proper way).
from .PackageList import PackageList # To register this type with QML.
if TYPE_CHECKING: if TYPE_CHECKING:
from PyQt5.QtCore import QObject from PyQt5.QtCore import QObject
@ -27,6 +30,8 @@ class Marketplace(Extension):
super().__init__() super().__init__()
self._window: Optional["QObject"] = None # If the window has been loaded yet, it'll be cached in here. self._window: Optional["QObject"] = None # If the window has been loaded yet, it'll be cached in here.
qmlRegisterType(PackageList, "Cura", 1, 7, "PackageList")
@pyqtSlot() @pyqtSlot()
def show(self) -> None: def show(self) -> None:
""" """

View file

@ -9,7 +9,7 @@ from UM.Qt.ListModel import ListModel
from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To request the package list from the API. from UM.TaskManagement.HttpRequestManager import HttpRequestManager # To request the package list from the API.
from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope # To request JSON responses from the API. from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope # To request JSON responses from the API.
from .Marketplace import PACKAGES_URL # To get the list of packages. from . import Marketplace # To get the list of packages. Imported this way to prevent circular imports.
from .PackageModel import PackageModel # This list is a list of PackageModels. from .PackageModel import PackageModel # This list is a list of PackageModels.
if TYPE_CHECKING: if TYPE_CHECKING:
@ -47,7 +47,7 @@ class PackageList(ListModel):
http = HttpRequestManager.getInstance() http = HttpRequestManager.getInstance()
http.get( http.get(
PACKAGES_URL, Marketplace.PACKAGES_URL,
scope = self._scope, scope = self._scope,
callback = self._parseResponse, callback = self._parseResponse,
error_callback = self._onError error_callback = self._onError

View file

@ -2,8 +2,18 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.15
import Cura 1.7 as Cura
Rectangle Item
{ {
color: "pink" //TODO Repeater
{
model: Cura.PackageList{}
Label
{
text: "Test" //TODO: Create a card for each package.
}
}
} }