Fix profile management page

This commit is contained in:
Lipu Fei 2018-02-22 23:31:41 +01:00
parent dec7ad25e2
commit f487c5b084
3 changed files with 36 additions and 24 deletions

View File

@ -89,7 +89,11 @@ class QualitySettingsModel(ListModel):
else: else:
quality_changes_node = quality_changes_group.nodes_for_extruders.get(self._extruder_position) quality_changes_node = quality_changes_group.nodes_for_extruders.get(self._extruder_position)
if quality_changes_node is not None: # it can be None if number of extruders are changed during runtime if quality_changes_node is not None: # it can be None if number of extruders are changed during runtime
quality_containers.insert(0, quality_changes_node.getContainer()) try:
quality_containers.insert(0, quality_changes_node.getContainer())
except:
# FIXME: This is to prevent incomplete update of QualityManager
return
settings_keys.update(quality_changes_group.getAllKeys()) settings_keys.update(quality_changes_group.getAllKeys())
current_category = "" current_category = ""

View File

@ -404,24 +404,17 @@ class ContainerManager(QObject):
for node in quality_changes_group.getAllNodes(): for node in quality_changes_group.getAllNodes():
self._container_registry.removeContainer(node.metadata["id"]) self._container_registry.removeContainer(node.metadata["id"])
## Rename a set of quality changes containers.
# #
# This will search for quality_changes containers matching the supplied name and rename them. # Rename a set of quality changes containers. Returns the new name.
# Note that if the machine specifies that qualities should be filtered by machine and/or material
# only the containers related to the active machine/material are renamed.
# #
# \param quality_name The name of the quality changes containers to rename. @pyqtSlot(QObject, str, result = str)
# \param new_name The new name of the quality changes. def renameQualityChangesGroup(self, quality_changes_group, new_name) -> str:
#
# \return True if successful, False if not.
@pyqtSlot(QObject, str)
def renameQualityChangesGroup(self, quality_changes_group, new_name):
Logger.log("i", "Renaming QualityChangesGroup[%s] to [%s]", quality_changes_group.name, new_name) Logger.log("i", "Renaming QualityChangesGroup[%s] to [%s]", quality_changes_group.name, new_name)
self._machine_manager.blurSettings.emit() self._machine_manager.blurSettings.emit()
if new_name == quality_changes_group.name: if new_name == quality_changes_group.name:
Logger.log("i", "QualityChangesGroup name [%s] unchanged.", quality_changes_group.name) Logger.log("i", "QualityChangesGroup name [%s] unchanged.", quality_changes_group.name)
return return new_name
new_name = self._container_registry.uniqueName(new_name) new_name = self._container_registry.uniqueName(new_name)
for node in quality_changes_group.getAllNodes(): for node in quality_changes_group.getAllNodes():
@ -430,6 +423,8 @@ class ContainerManager(QObject):
self._machine_manager.activeQualityChanged.emit() self._machine_manager.activeQualityChanged.emit()
self._machine_manager.activeQualityGroupChanged.emit() self._machine_manager.activeQualityGroupChanged.emit()
return new_name
@pyqtSlot(str, "QVariantMap") @pyqtSlot(str, "QVariantMap")
def duplicateQualityChanges(self, quality_changes_name, quality_model_item): def duplicateQualityChanges(self, quality_changes_name, quality_model_item):
global_stack = Application.getInstance().getGlobalContainerStack() global_stack = Application.getInstance().getGlobalContainerStack()

View File

@ -171,32 +171,46 @@ Item
object: "<new name>" object: "<new name>"
onAccepted: onAccepted:
{ {
base.newQualityChangesNameToSwitchTo = newName; // We want to switch to the new profile once it's created base.newQualityNameToSelect = newName; // We want to switch to the new profile once it's created
base.toActivateNewQuality = true;
Cura.ContainerManager.createQualityChanges(newName); Cura.ContainerManager.createQualityChanges(newName);
} }
} }
property string newQualityChangesNameToSwitchTo: "" property string newQualityNameToSelect: ""
property bool toActivateNewQuality: false
// This connection makes sure that we will switch to the new // This connection makes sure that we will switch to the correct quality after the model gets updated
Connections Connections
{ {
target: qualitiesModel target: qualitiesModel
onItemsChanged: { onItemsChanged: {
var currentItemName = base.currentItem == null ? "" : base.currentItem.name; var toSelectItemName = base.currentItem == null ? "" : base.currentItem.name;
if (newQualityNameToSelect != "") {
toSelectItemName = newQualityNameToSelect;
}
if (base.newQualityChangesNameToSwitchTo != "") { var newIdx = -1; // Default to nothing if nothing can be found
if (toSelectItemName != "") {
// Select the required quality name if given
for (var idx = 0; idx < qualitiesModel.rowCount(); ++idx) { for (var idx = 0; idx < qualitiesModel.rowCount(); ++idx) {
var item = qualitiesModel.getItem(idx); var item = qualitiesModel.getItem(idx);
if (item.name == base.newQualityChangesNameToSwitchTo) { if (item.name == toSelectItemName) {
// Switch to the newly created profile if needed // Switch to the newly created profile if needed
qualityListView.currentIndex = idx; newIdx = idx;
Cura.MachineManager.setQualityChangesGroup(item.quality_changes_group); if (base.toActivateNewQuality) {
base.newQualityChangesNameToSwitchTo = ""; // Activate this custom quality if required
Cura.MachineManager.setQualityChangesGroup(item.quality_changes_group);
}
break; break;
} }
} }
} }
qualityListView.currentIndex = newIdx;
// Reset states
base.newQualityNameToSelect = "";
base.toActivateNewQuality = false;
} }
} }
@ -209,7 +223,6 @@ Item
onAccepted: onAccepted:
{ {
Cura.ContainerManager.duplicateQualityChanges(newName, base.currentItem); Cura.ContainerManager.duplicateQualityChanges(newName, base.currentItem);
qualityListView.currentIndex = -1; // TODO: Reset selection.
} }
} }
@ -240,8 +253,8 @@ Item
object: "<new name>" object: "<new name>"
onAccepted: onAccepted:
{ {
Cura.ContainerManager.renameQualityChangesGroup(base.currentItem.quality_changes_group, newName); var actualNewName = Cura.ContainerManager.renameQualityChangesGroup(base.currentItem.quality_changes_group, newName);
qualityListView.currentIndex = -1; // TODO: Reset selection. base.newQualityNameToSelect = actualNewName; // Select the new name after the model gets updated
} }
} }