|
@@ -9,6 +9,7 @@ from UM.Logger import Logger
|
|
|
import UM.Settings
|
|
|
from UM.Settings.Validator import ValidatorState
|
|
|
from UM.Settings.InstanceContainer import InstanceContainer
|
|
|
+from UM.Settings.ContainerStack import ContainerStack
|
|
|
from . import ExtruderManager
|
|
|
from UM.i18n import i18nCatalog
|
|
|
catalog = i18nCatalog("cura")
|
|
@@ -35,8 +36,6 @@ class MachineManagerModel(QObject):
|
|
|
|
|
|
active_machine_id = Preferences.getInstance().getValue("cura/active_machine")
|
|
|
|
|
|
- self._active_extruder_index = 0
|
|
|
-
|
|
|
if active_machine_id != "":
|
|
|
# An active machine was saved, so restore it.
|
|
|
self.setActiveMachine(active_machine_id)
|
|
@@ -105,12 +104,11 @@ class MachineManagerModel(QObject):
|
|
|
Application.getInstance().setGlobalContainerStack(containers[0])
|
|
|
|
|
|
@pyqtSlot(str, str)
|
|
|
- def addMachine(self,name, definition_id):
|
|
|
+ def addMachine(self, name, definition_id):
|
|
|
definitions = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=definition_id)
|
|
|
if definitions:
|
|
|
definition = definitions[0]
|
|
|
- name = self._createUniqueName("machine", name, definition.getName())
|
|
|
-
|
|
|
+ name = self._createUniqueName("machine", "", name, definition.getName())
|
|
|
new_global_stack = UM.Settings.ContainerStack(name)
|
|
|
new_global_stack.addMetaDataEntry("type", "machine")
|
|
|
UM.Settings.ContainerRegistry.getInstance().addContainer(new_global_stack)
|
|
@@ -139,31 +137,39 @@ class MachineManagerModel(QObject):
|
|
|
|
|
|
Application.getInstance().setGlobalContainerStack(new_global_stack)
|
|
|
|
|
|
- # Create a name that is not empty and unique
|
|
|
- def _createUniqueName(self, object_type, name, fallback_name):
|
|
|
- name = name.strip()
|
|
|
- num_check = re.compile("(.*?)\s*#\d+$").match(name)
|
|
|
- if(num_check):
|
|
|
- name = num_check.group(1)
|
|
|
- if name == "":
|
|
|
- name = fallback_name
|
|
|
- unique_name = name
|
|
|
+ ## Create a name that is not empty and unique
|
|
|
+ # \param container_type \type{string} Type of the container (machine, quality, ...)
|
|
|
+ # \param current_name \type{} Current name of the container, which may be an acceptable option
|
|
|
+ # \param new_name \type{string} Base name, which may not be unique
|
|
|
+ # \param fallback_name \type{string} Name to use when (stripped) new_name is empty
|
|
|
+ # \return \type{string} Name that is unique for the specified type and name/id
|
|
|
+ def _createUniqueName(self, container_type, current_name, new_name, fallback_name):
|
|
|
+ new_name = new_name.strip()
|
|
|
+ num_check = re.compile("(.*?)\s*#\d+$").match(new_name)
|
|
|
+ if num_check:
|
|
|
+ new_name = num_check.group(1)
|
|
|
+ if new_name == "":
|
|
|
+ new_name = fallback_name
|
|
|
+
|
|
|
+ unique_name = new_name
|
|
|
i = 1
|
|
|
-
|
|
|
- # Check both the id and the name, because they may not be the same and it is better if they are both unique
|
|
|
- if object_type == "machine":
|
|
|
- while UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = unique_name, type = "machine") or \
|
|
|
- UM.Settings.ContainerRegistry.getInstance().findContainerStacks(name = unique_name, type = "machine"):
|
|
|
- i += 1
|
|
|
- unique_name = "%s #%d" % (name, i)
|
|
|
- else:
|
|
|
- while UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = unique_name, type = object_type) or \
|
|
|
- UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(name = unique_name, type = object_type):
|
|
|
- i += 1
|
|
|
- unique_name = "%s #%d" % (name, i)
|
|
|
+ # In case we are renaming, the current name of the container is also a valid end-result
|
|
|
+ while self._containerExists(container_type, unique_name) and unique_name != current_name:
|
|
|
+ i += 1
|
|
|
+ unique_name = "%s #%d" % (new_name, i)
|
|
|
|
|
|
return unique_name
|
|
|
|
|
|
+ ## Check if a container with of a certain type and a certain name or id exists
|
|
|
+ # Both the id and the name are checked, because they may not be the same and it is better if they are both unique
|
|
|
+ # \param container_type \type{string} Type of the container (machine, quality, ...)
|
|
|
+ # \param container_name \type{string} Name to check
|
|
|
+ def _containerExists(self, container_type, container_name):
|
|
|
+ container_class = ContainerStack if container_type == "machine" else InstanceContainer
|
|
|
+
|
|
|
+ return UM.Settings.ContainerRegistry.getInstance().findContainers(container_class, id = container_name, type = container_type) or \
|
|
|
+ UM.Settings.ContainerRegistry.getInstance().findContainers(container_class, name = container_name, type = container_type)
|
|
|
+
|
|
|
## Convenience function to check if a stack has errors.
|
|
|
def _checkStackForErrors(self, stack):
|
|
|
if stack is None:
|
|
@@ -260,9 +266,9 @@ class MachineManagerModel(QObject):
|
|
|
if not self._global_container_stack:
|
|
|
return
|
|
|
|
|
|
- name = self._createUniqueName("quality", self.activeQualityName, catalog.i18nc("@label", "Custom profile"))
|
|
|
- user_settings = self._global_container_stack.getTop()
|
|
|
new_quality_container = InstanceContainer("")
|
|
|
+ name = self._createUniqueName("quality", "", self.activeQualityName, catalog.i18nc("@label", "Custom profile"))
|
|
|
+ user_settings = self._global_container_stack.getTop()
|
|
|
|
|
|
## Copy all values
|
|
|
new_quality_container.deserialize(user_settings.serialize())
|
|
@@ -290,7 +296,7 @@ class MachineManagerModel(QObject):
|
|
|
return
|
|
|
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=container_id)
|
|
|
if containers:
|
|
|
- new_name = self._createUniqueName("quality", containers[0].getName(), catalog.i18nc("@label", "Custom profile"))
|
|
|
+ new_name = self._createUniqueName("quality", "", containers[0].getName(), catalog.i18nc("@label", "Custom profile"))
|
|
|
|
|
|
new_container = InstanceContainer("")
|
|
|
|
|
@@ -310,9 +316,9 @@ class MachineManagerModel(QObject):
|
|
|
def renameQualityContainer(self, container_id, new_name):
|
|
|
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id, type = "quality")
|
|
|
if containers:
|
|
|
- new_name = self._createUniqueName("machine", new_name, catalog.i18nc("@label", "Custom profile"))
|
|
|
+ new_name = self._createUniqueName("quality", containers[0].getName(), new_name, catalog.i18nc("@label", "Custom profile"))
|
|
|
containers[0].setName(new_name)
|
|
|
- UM.Settings.ContainerRegistry.getInstance().containerChanged.emit(containers[0])
|
|
|
+ self.activeQualityChanged.emit()
|
|
|
|
|
|
|
|
|
@pyqtSlot(str)
|
|
@@ -327,11 +333,11 @@ class MachineManagerModel(QObject):
|
|
|
UM.Settings.ContainerRegistry.getInstance().removeContainer(container_id)
|
|
|
|
|
|
if activate_new_container:
|
|
|
- old_container = self._global_container_stack.findInstanceContainers({"type": "quality"})
|
|
|
- containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = container_type)
|
|
|
- if containers and old_container:
|
|
|
- container_index = self._global_container_stack.getContainerIndex(old_container)
|
|
|
- self._global_container_stack.replaceContainer(container_index, containers[0])
|
|
|
+ definition_id = "fdmprinter" if not self.filterQualityByMachine else self.activeDefinitionId
|
|
|
+ containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "quality", definition = definition_id)
|
|
|
+ if containers:
|
|
|
+ self.setActiveQuality(containers[0].getId())
|
|
|
+ self.activeQualityChanged.emit()
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
@@ -413,7 +419,7 @@ class MachineManagerModel(QObject):
|
|
|
def renameMachine(self, machine_id, new_name):
|
|
|
containers = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = machine_id)
|
|
|
if containers:
|
|
|
- new_name = self._createUniqueName("machine", new_name, containers[0].getBottom().getName())
|
|
|
+ new_name = self._createUniqueName("machine", containers[0].getName(), new_name, containers[0].getBottom().getName())
|
|
|
containers[0].setName(new_name)
|
|
|
self.globalContainerChanged.emit()
|
|
|
|