This commit is contained in:
fieldOfView 2016-06-07 12:00:03 +02:00
commit 3257d949eb
5 changed files with 56 additions and 25 deletions

View file

@ -353,8 +353,6 @@ class CuraApplication(QtApplication):
qmlRegisterSingletonType(MachineManagerModel.MachineManagerModel, "Cura", 1, 0, "MachineManager", qmlRegisterSingletonType(MachineManagerModel.MachineManagerModel, "Cura", 1, 0, "MachineManager",
MachineManagerModel.createMachineManagerModel) MachineManagerModel.createMachineManagerModel)
qmlRegisterSingletonType(ExtruderManager.ExtruderManager, "Cura", 1, 0, "ExtruderManager",
ExtruderManager.createExtruderManager)
self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml")) self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml"))
self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles)) self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles))
@ -386,6 +384,9 @@ class CuraApplication(QtApplication):
def getPrintInformation(self): def getPrintInformation(self):
return self._print_information return self._print_information
## Registers objects for the QML engine to use.
#
# \param engine The QML engine.
def registerObjects(self, engine): def registerObjects(self, engine):
engine.rootContext().setContextProperty("Printer", self) engine.rootContext().setContextProperty("Printer", self)
self._print_information = PrintInformation.PrintInformation() self._print_information = PrintInformation.PrintInformation()
@ -399,6 +400,8 @@ class CuraApplication(QtApplication):
qmlRegisterSingletonType(QUrl.fromLocalFile(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")), "Cura", 1, 0, "Actions") qmlRegisterSingletonType(QUrl.fromLocalFile(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")), "Cura", 1, 0, "Actions")
engine.rootContext().setContextProperty("ExtruderManager", ExtruderManager.ExtruderManager.getInstance())
for path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.QmlFiles): for path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.QmlFiles):
type_name = os.path.splitext(os.path.basename(path))[0] type_name = os.path.splitext(os.path.basename(path))[0]
if type_name in ("Cura", "Actions"): if type_name in ("Cura", "Actions"):

View file

@ -61,6 +61,38 @@ class ExtruderManager(QObject):
self._active_extruder_index = index self._active_extruder_index = index
self.activeExtruderChanged.emit() self.activeExtruderChanged.emit()
## Adds all extruders of a specific machine definition to the extruder
# manager.
#
# \param machine_definition The machine to add the extruders for.
def addMachineExtruders(self, machine_definition):
machine_id = machine_definition.getId()
if not self._extruder_trains[machine_id]:
self._extruder_trains[machine_id] = { }
container_registry = UM.Settings.ContainerRegistry.getInstance()
if not container_registry: #Then we shouldn't have any machine definition either. In any case, there are no extruder trains then so bye bye.
return
#Add the extruder trains that don't exist yet.
for position, extruder_definition_id in machine_definition.getMetaDataEntry("machine_extruder_trains", default = {}).items():
extruder_definition = container_registry.findDefinitionContainers(machine = machine_definition.getId())
if extruder_definition:
extruder_definition = extruder_definition[0]
else:
Logger.log("w", "Machine %s references an extruder with ID %s, which doesn't exist.", machine_definition.getName(), extruder_definition_id)
continue
name = self._uniqueName(extruder_definition_id) #Make a name based on the ID of the definition.
if not container_registry.findContainerStacks(id = name): #Doesn't exist yet.
self.createExtruderTrain(extruder_definition, machine_definition, name, position)
#Gets the extruder trains that we just created as well as any that still existed.
extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_definition.getId())
for extruder_train in extruder_trains:
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train.getId()
if extruder_trains:
self.extrudersChanged.emit()
## (Re)populates the collections of extruders by machine. ## (Re)populates the collections of extruders by machine.
def _repopulate(self): def _repopulate(self):
self._extruder_trains = { } self._extruder_trains = { }
@ -78,13 +110,14 @@ class ExtruderManager(QObject):
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train.getId() self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train.getId()
self.extrudersChanged.emit() self.extrudersChanged.emit()
def createExtruderTrain(self, extruder_definition, machine_definition, extruder_id): def createExtruderTrain(self, extruder_definition, machine_definition, extruder_train_id, position):
container_registry = UM.Settings.ContainerRegistry.getInstance() container_registry = UM.Settings.ContainerRegistry.getInstance()
#Create a container stack for this extruder. #Create a container stack for this extruder.
name = self._uniqueName(extruder_id) container_stack = UM.Settings.ContainerStack(extruder_train_id)
container_stack = UM.Settings.ContainerStack(name)
container_stack.addMetaDataEntry("type", "extruder_train") container_stack.addMetaDataEntry("type", "extruder_train")
container_stack.addMetaDataEntry("machine", machine_definition.getId())
container_stack.addMetaDataEntry("position", position)
container_stack.addContainer(extruder_definition) container_stack.addContainer(extruder_definition)
""" """
@ -133,7 +166,7 @@ class ExtruderManager(QObject):
""" """
#Add an empty user profile. #Add an empty user profile.
user_profile = UM.Settings.InstanceContainer(name + "_current_settings") user_profile = UM.Settings.InstanceContainer(extruder_train_id + "_current_settings")
user_profile.addMetaDataEntry("type", "user") user_profile.addMetaDataEntry("type", "user")
user_profile.setDefinition(machine_definition) user_profile.setDefinition(machine_definition)
container_stack.addContainer(user_profile) container_stack.addContainer(user_profile)
@ -143,11 +176,18 @@ class ExtruderManager(QObject):
container_registry.addContainer(container_stack) container_registry.addContainer(container_stack)
## Creates a new unique name for a container that doesn't exist yet.
def _uniqueName(self, extruder): #
# It tries if the original name you provide exists, and if it doesn't
# it'll add a " #1" or " #2" after the name to make it unique.
#
# \param original The original name that may not be unique.
# \return A unique name that looks a lot like the original but may have
# a number behind it to make it unique.
def _uniqueName(self, original):
container_registry = UM.Settings.ContainerRegistry.getInstance() container_registry = UM.Settings.ContainerRegistry.getInstance()
name = extruder.strip() name = original.strip()
num_check = re.compile("(.*?)\s*#\d$").match(name) num_check = re.compile("(.*?)\s*#\d$").match(name)
if num_check: # There is a number in the name. if num_check: # There is a number in the name.
name = num_check.group(1) # Filter out the number. name = num_check.group(1) # Filter out the number.
@ -156,12 +196,7 @@ class ExtruderManager(QObject):
unique_name = name unique_name = name
i = 1 i = 1
while container_registry.findContainers(id=unique_name) or container_registry.findContainers( while container_registry.findContainers(id = unique_name) or container_registry.findContainers(name = unique_name): # A container already has this name.
name=unique_name): # A container already has this name.
i += 1 # Try next numbering. i += 1 # Try next numbering.
unique_name = "%s #%d" % (name, i) # Fill name like this: "Extruder #2". unique_name = "%s #%d" % (name, i) # Fill name like this: "Extruder #2".
return unique_name return unique_name
def createExtruderManager(engine, script_engine):
return ExtruderManager()

View file

@ -135,14 +135,7 @@ class MachineManagerModel(QObject):
new_global_stack.addContainer(quality_instance_container) new_global_stack.addContainer(quality_instance_container)
new_global_stack.addContainer(current_settings_instance_container) new_global_stack.addContainer(current_settings_instance_container)
for position, extruder_train_id in definition.getMetaDataEntry("machine_extruder_trains", default = {}).items(): ExtruderManager.ExtruderManager.getInstance().addMachineExtruders(definition)
extruder_definition = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id = extruder_train_id)
if extruder_definition:
extruder_definition = extruder_definition[0]
else:
Logger.log("w", "Machine %s references an extruder with ID %s, which doesn't exist.", definition.getName(), extruder_train_id)
continue
ExtruderManager.ExtruderManager.getInstance().createExtruderTrain(extruder_definition, definition, extruder_train_id)
Application.getInstance().setGlobalContainerStack(new_global_stack) Application.getInstance().setGlobalContainerStack(new_global_stack)

View file

@ -80,7 +80,7 @@ ScrollView
{ {
id: provider id: provider
containerStackId: Cura.ExtruderManager.activeExtruderStackId ? Cura.ExtruderManager.activeExtruderStackId : Cura.MachineManager.activeMachineId containerStackId: ExtruderManager.activeExtruderStackId ? ExtruderManager.activeExtruderStackId : Cura.MachineManager.activeMachineId
key: model.key key: model.key
watchedProperties: [ "value", "enabled", "state", "validationState" ] watchedProperties: [ "value", "enabled", "state", "validationState" ]
storeIndex: 0 storeIndex: 0

View file

@ -111,7 +111,7 @@ Item
onClicked: onClicked:
{ {
base.currentExtruderIndex = index base.currentExtruderIndex = index
Cura.ExtruderManager.setActiveExtruderIndex(index) ExtruderManager.setActiveExtruderIndex(index)
} }
style: ButtonStyle { style: ButtonStyle {