WIP: Make material removal work in material management dialog

This commit is contained in:
Lipu Fei 2018-02-16 12:35:51 +01:00
parent a5afaab467
commit 779f49f545
2 changed files with 43 additions and 17 deletions

View file

@ -759,6 +759,19 @@ class ContainerManager(QObject):
return new_change_instances return new_change_instances
@pyqtSlot("QVariant")
def removeMaterial(self, material_node):
root_material_id = material_node.metadata["base_file"]
material_group = self._material_manager.getMaterialGroup(root_material_id)
if not material_group:
Logger.log("d", "Unable to remove the material with id %s, because it doesn't exist.", root_material_id)
return
nodes_to_remove = [material_group.root_material_node] + material_group.derived_material_node_list
for node in nodes_to_remove:
self._container_registry.removeContainer(node.metadata["id"])
## Create a duplicate of a material, which has the same GUID and base_file metadata ## Create a duplicate of a material, which has the same GUID and base_file metadata
# #
# \return \type{str} the id of the newly created container. # \return \type{str} the id of the newly created container.
@ -769,7 +782,7 @@ class ContainerManager(QObject):
material_group = self._material_manager.getMaterialGroup(root_material_id) material_group = self._material_manager.getMaterialGroup(root_material_id)
if not material_group: if not material_group:
Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", root_material_id) Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", root_material_id)
return "" return
base_container = material_group.root_material_node.getContainer() base_container = material_group.root_material_node.getContainer()
containers_to_copy = [] containers_to_copy = []
@ -787,10 +800,9 @@ class ContainerManager(QObject):
new_base_container.getMetaData()["base_file"] = new_base_id new_base_container.getMetaData()["base_file"] = new_base_id
new_containers.append(new_base_container) new_containers.append(new_base_container)
#Clone all of them. # Clone all of them.
clone_of_original = None #Keeping track of which one is the clone of the original material, since we need to return that.
for container_to_copy in containers_to_copy: for container_to_copy in containers_to_copy:
#Create unique IDs for every clone. # Create unique IDs for every clone.
current_id = container_to_copy.getId() current_id = container_to_copy.getId()
new_id = new_base_id new_id = new_base_id
if container_to_copy.getMetaDataEntry("definition") != "fdmprinter": if container_to_copy.getMetaDataEntry("definition") != "fdmprinter":
@ -798,8 +810,6 @@ class ContainerManager(QObject):
if container_to_copy.getMetaDataEntry("variant_name"): if container_to_copy.getMetaDataEntry("variant_name"):
variant_name = container_to_copy.getMetaDataEntry("variant_name") variant_name = container_to_copy.getMetaDataEntry("variant_name")
new_id += "_" + variant_name.replace(" ", "_") new_id += "_" + variant_name.replace(" ", "_")
if current_id == root_material_id:
clone_of_original = new_id
new_container = copy.deepcopy(container_to_copy) new_container = copy.deepcopy(container_to_copy)
new_container.getMetaData()["id"] = new_id new_container.getMetaData()["id"] = new_id

View file

@ -4,6 +4,7 @@
import QtQuick 2.8 import QtQuick 2.8
import QtQuick.Controls 1.4 import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.3
import UM 1.2 as UM import UM 1.2 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
@ -34,16 +35,14 @@ Item
text: catalog.i18nc("@title:tab", "Materials") text: catalog.i18nc("@title:tab", "Materials")
} }
property var hasCurrentItem: materialListView.currentItem != null; property var hasCurrentItem: materialListView.currentItem != null
property var currentItem: property var currentItem: {
{
var current_index = materialListView.currentIndex; var current_index = materialListView.currentIndex;
return materialsModel.getItem(current_index); return materialsModel.getItem(current_index);
} }
property var isCurrentItemActivated: property var isCurrentItemActivated: {
{
const extruder_position = Cura.ExtruderManager.activeExtruderIndex; const extruder_position = Cura.ExtruderManager.activeExtruderIndex;
const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position];
return base.currentItem.root_material_id == root_material_id; return base.currentItem.root_material_id == root_material_id;
@ -88,8 +87,7 @@ Item
iconName: "list-add" iconName: "list-add"
enabled: base.hasCurrentItem enabled: base.hasCurrentItem
onClicked: { onClicked: {
forceActiveFocus() forceActiveFocus();
Cura.ContainerManager.duplicateMaterial(base.currentItem.container_node); Cura.ContainerManager.duplicateMaterial(base.currentItem.container_node);
} }
} }
@ -98,11 +96,10 @@ Item
Button { Button {
text: catalog.i18nc("@action:button", "Remove") text: catalog.i18nc("@action:button", "Remove")
iconName: "list-remove" iconName: "list-remove"
//enabled: base.currentItem != null && !base.currentItem.readOnly && !Cura.ContainerManager.isContainerUsed(base.currentItem.id) enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated
enabled: true // TODO
onClicked: { onClicked: {
forceActiveFocus() forceActiveFocus();
// TODO confirmRemoveMaterialDialog.open();
} }
} }
@ -129,6 +126,25 @@ Item
} }
} }
MessageDialog
{
id: confirmRemoveMaterialDialog
icon: StandardIcon.Question;
title: catalog.i18nc("@title:window", "Confirm Remove")
text: catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name)
standardButtons: StandardButton.Yes | StandardButton.No
modality: Qt.ApplicationModal
onYes:
{
Cura.ContainerManager.removeMaterial(base.currentItem.container_node);
// reset current item to the first if available
materialListView.currentIndex = 0;
}
}
Item { Item {
id: contentsItem id: contentsItem