File: main.py

package info (click to toggle)
uranium 5.0.0-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,328 kB
  • sloc: python: 31,765; sh: 132; makefile: 12
file content (78 lines) | stat: -rw-r--r-- 2,487 bytes parent folder | download | duplicates (2)
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()