1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
# Copyright (c) 2022 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher.
import sys
import os.path
import signal
import traceback
from PyQt6.QtCore import QObject, QUrl, pyqtSlot, pyqtProperty, pyqtSignal
from PyQt6.QtQml import QQmlApplicationEngine, qmlRegisterType
from PyQt6.QtWidgets import QApplication
import UM.Resources
import UM.Settings
import DefinitionTreeModel
class DefinitionLoader(QObject):
def __init__(self, parent = None):
super().__init__(parent)
self._metadata = {}
self._definition_id = ""
@pyqtSlot("QUrl", result = str)
def load(self, file_path):
try:
definition = UM.Settings.DefinitionContainer(file_path.fileName())
dirname = os.path.dirname(file_path.toLocalFile())
UM.Resources.Resources.addSearchPath(dirname)
UM.Resources.Resources.addSearchPath(os.path.realpath(os.path.join(dirname, "..")))
with open(file_path.toLocalFile(), encoding = "utf-8") as data:
definition.deserialize(data.read())
self._metadata = dict(definition.metaData)
self.metaDataChanged.emit()
UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().addContainer(definition)
self._definition_id = definition.id
self.loaded.emit()
except Exception as e:
error_text = "An exception occurred loading file {0}:\n".format(file_path)
error_text += str(e)
error_text += traceback.format_exc()
self.error.emit(error_text)
loaded = pyqtSignal()
error = pyqtSignal(str, arguments=["errorText"])
metaDataChanged = pyqtSignal()
@pyqtProperty("QVariantMap", notify=metaDataChanged)
def metaData(self):
return self._metadata
@pyqtProperty(str, notify=loaded)
def definitionId(self):
return self._definition_id
signal.signal(signal.SIGINT, signal.SIG_DFL)
file_name = None
if len(sys.argv) > 1:
file_name = sys.argv[1]
del sys.argv[1]
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
qmlRegisterType(DefinitionLoader, "Example", 1, 0, "DefinitionLoader")
qmlRegisterType(DefinitionTreeModel.DefinitionTreeModel, "Example", 1, 0, "DefinitionTreeModel")
if file_name:
engine.rootContext().setContextProperty("open_file", QUrl.fromLocalFile(file_name))
engine.load(os.path.join(os.path.dirname(os.path.abspath(__file__)), "main.qml"))
app.exec()
|