mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
76 lines
3.2 KiB
Python
76 lines
3.2 KiB
Python
# Copyright (c) 2021 Ultimaker B.V.
|
|
# Cura is released under the terms of the LGPLv3 or higher.
|
|
|
|
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 # Creating QML objects and managing packages.
|
|
|
|
from UM.Extension import Extension # We are implementing the main object of an extension here.
|
|
from UM.PluginRegistry import PluginRegistry # To find out where we are stored (the proper way).
|
|
|
|
from .RemotePackageList import RemotePackageList # To register this type with QML.
|
|
from .LocalPackageList import LocalPackageList # To register this type with QML.
|
|
from .RestartManager import RestartManager # To register this type with QML.
|
|
|
|
|
|
class Marketplace(Extension):
|
|
"""
|
|
The main managing object for the Marketplace plug-in.
|
|
"""
|
|
|
|
class TabManager(QObject):
|
|
def __init__(self) -> None:
|
|
super().__init__(parent=CuraApplication.getInstance())
|
|
self._tab_shown = 0
|
|
|
|
def getTabShown(self):
|
|
return self._tab_shown
|
|
|
|
def setTabShown(self, tab_shown):
|
|
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) -> None:
|
|
super().__init__()
|
|
self._window: Optional["QObject"] = None # If the window has been loaded yet, it'll be cached in here.
|
|
self._plugin_registry: Optional[PluginRegistry] = None
|
|
self._tab_manager = Marketplace.TabManager()
|
|
|
|
qmlRegisterType(RemotePackageList, "Marketplace", 1, 0, "RemotePackageList")
|
|
qmlRegisterType(LocalPackageList, "Marketplace", 1, 0, "LocalPackageList")
|
|
qmlRegisterType(RestartManager, "Marketplace", 1, 0, "RestartManager")
|
|
|
|
@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})
|
|
if self._window is None: # Still None? Failed to load the QML then.
|
|
return
|
|
self._tab_manager.setTabShown(0)
|
|
self._window.show()
|
|
self._window.requestActivate() # Bring window into focus, if it was already open in the background.
|
|
|
|
@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)
|