// Copyright (c) 2022 Ultimaker B.V. // Uranium is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 2.4 import UM 1.5 as UM import Cura 1.5 as Cura Item { id: detailsPanel property var currentItem: null onCurrentItemChanged: { // When the current item changes, the detail view needs to be updated if (currentItem != null) { updateMaterialPropertiesObject() materialDetailsView.currentMaterialNode = currentItem.container_node } } function updateMaterialPropertiesObject() { // DRAGON WARNING!!! DO NOT TOUCH THIS IF YOU DON'T KNOW. // TL;DR: Always update "container_id" first! // // Other widgets such as MaterialsView have bindings towards "materialProperties" and its properties. Here the // properties are updated one by one, and each change can trigger a reaction on those widgets that have // connections to the property gets changed, and some reactions will use functions such as // ContainerManager.getContainerMetaDataEntry() to fetch data using the "container_id" as the reference. // We need to change "container_id" first so any underlying triggers will use the correct "container_id" to // fetch data. Or, for example, if we change GUID first, which triggered the weight widget to fetch weight // before we can update "container_id", so it will fetch weight with the wrong (old) "container_id". materialProperties.container_id = currentItem.id materialProperties.name = currentItem.name || "Unknown" materialProperties.guid = currentItem.GUID materialProperties.brand = currentItem.brand || "Unknown" materialProperties.material = currentItem.material || "Unknown" materialProperties.color_name = currentItem.color_name || "Yellow" materialProperties.color_code = currentItem.color_code || "yellow" materialProperties.description = currentItem.description || "" materialProperties.adhesion_info = currentItem.adhesion_info || "" materialProperties.density = currentItem.density || 0.0 materialProperties.diameter = currentItem.diameter || 0.0 materialProperties.approximate_diameter = currentItem.approximate_diameter || "0" } // Material detailed information view below the title Label MaterialsView { id: materialDetailsView anchors.fill: parent editingEnabled: currentItem != null && !currentItem.is_read_only onResetSelectedMaterial: base.resetExpandedActiveMaterial() properties: materialProperties containerId: currentItem != null ? currentItem.id : "" currentMaterialNode: currentItem != null ? currentItem.container_node: null } QtObject { id: materialProperties property string guid: "00000000-0000-0000-0000-000000000000" property string container_id: "Unknown"; property string name: "Unknown"; property string profile_type: "Unknown"; property string brand: "Unknown"; property string material: "Unknown"; // This needs to be named as "material" to be consistent with // the material container's metadata entry property string color_name: "Yellow"; property color color_code: "yellow"; property real density: 0.0; property real diameter: 0.0; property string approximate_diameter: "0"; property real spool_cost: 0.0; property real spool_weight: 0.0; property real spool_length: 0.0; property real cost_per_meter: 0.0; property string description: ""; property string adhesion_info: ""; } }