123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import os.path
- from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
- from PyQt5.QtQml import qmlRegisterType
- from typing import Optional, TYPE_CHECKING
- from cura.CuraApplication import CuraApplication
- from UM.Extension import Extension
- from UM.PluginRegistry import PluginRegistry
- from .RemotePackageList import RemotePackageList
- from .LocalPackageList import LocalPackageList
- from .RestartManager import RestartManager
- class Marketplace(Extension, QObject):
- """
- The main managing object for the Marketplace plug-in.
- """
- class TabManager(QObject):
- def __init__(self) -> None:
- super().__init__(parent=CuraApplication.getInstance())
- self._tab_shown: int = 0
- def getTabShown(self) -> int:
- return self._tab_shown
- def setTabShown(self, tab_shown: int) -> None:
- if tab_shown != self._tab_shown:
- self._tab_shown = tab_shown
- self.tabShownChanged.emit()
- tabShownChanged = pyqtSignal()
- tabShown = pyqtProperty(int, fget=getTabShown, fset=setTabShown, notify=tabShownChanged)
- def __init__(self, parent: Optional[QObject] = None) -> None:
- QObject.__init__(self, parent)
- Extension.__init__(self)
- self._window: Optional["QObject"] = None
- self._plugin_registry: Optional[PluginRegistry] = None
- self._tab_manager = Marketplace.TabManager()
- self._package_manager = CuraApplication.getInstance().getPackageManager()
- self._material_package_list: Optional[RemotePackageList] = None
- self._plugin_package_list: Optional[RemotePackageList] = None
-
-
-
- self._local_package_list = LocalPackageList(self)
- self._local_package_list.checkForUpdates(self._package_manager.local_packages)
- qmlRegisterType(RestartManager, "Marketplace", 1, 0, "RestartManager")
- @pyqtProperty(QObject, constant=True)
- def MaterialPackageList(self):
- if self._material_package_list is None:
- self._material_package_list = RemotePackageList()
- self._material_package_list.packageTypeFilter = "material"
- return self._material_package_list
- @pyqtProperty(QObject, constant=True)
- def PluginPackageList(self):
- if self._plugin_package_list is None:
- self._plugin_package_list = RemotePackageList()
- self._plugin_package_list.packageTypeFilter = "plugin"
- return self._plugin_package_list
- @pyqtProperty(QObject, constant=True)
- def LocalPackageList(self):
- return self._local_package_list
- @pyqtSlot()
- def show(self) -> None:
- """
- Opens the window of the Marketplace.
- If the window hadn't been loaded yet into Qt, it will be created lazily.
- """
- if self._window is None:
- self._plugin_registry = PluginRegistry.getInstance()
- plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId())
- if plugin_path is None:
- plugin_path = os.path.dirname(__file__)
- path = os.path.join(plugin_path, "resources", "qml", "Marketplace.qml")
- self._window = CuraApplication.getInstance().createQmlComponent(path, {"tabManager": self._tab_manager, "manager": self})
- if self._window is None:
- return
- self._tab_manager.setTabShown(0)
- self._window.show()
- self._window.requestActivate()
- @pyqtSlot()
- def setVisibleTabToMaterials(self) -> None:
- """
- Set the tab shown to the remote materials one.
- Not implemented in a more generic way because it needs the ability to be called with 'callExtensionMethod'.
- """
- self._tab_manager.setTabShown(1)
|