// Copyright (c) 2022 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import UM 1.5 as UM import Cura 1.0 as Cura // An expandable list of materials. Includes both the header (this file) and the items (brandMaterialList) Item { id: brand_section property var sectionName: "" property var elementsModel // This can be a MaterialTypesModel or GenericMaterialsModel or FavoriteMaterialsModel property var hasMaterialTypes: true // It indicates whether it has material types or not property var expanded: materialList.expandedBrands.indexOf(sectionName) > -1 height: childrenRect.height width: parent.width Rectangle { id: brand_header_background color: { if (!expanded && sectionName == materialList.currentBrand) { return UM.Theme.getColor("favorites_row_selected") } else { return UM.Theme.getColor("favorites_header_bar") } } anchors.fill: brand_header } Row { id: brand_header width: parent.width UM.Label { id: brand_name text: sectionName height: UM.Theme.getSize("favorites_row").height width: parent.width - UM.Theme.getSize("favorites_button").width leftPadding: Math.round(UM.Theme.getSize("default_margin").width / 2) } Item { implicitWidth: UM.Theme.getSize("favorites_button").width implicitHeight: UM.Theme.getSize("favorites_button").height UM.RecolorImage { anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter } width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height color: "black" source: brand_section.expanded ? UM.Theme.getIcon("ChevronSingleDown") : UM.Theme.getIcon("ChevronSingleLeft") } } } MouseArea { anchors.fill: brand_header onPressed: { const i = materialList.expandedBrands.indexOf(sectionName) if (i > -1) { // Remove it materialList.expandedBrands.splice(i, 1) brand_section.expanded = false } else { // Add it materialList.expandedBrands.push(sectionName) brand_section.expanded = true } UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); } } Column { id: brandMaterialList anchors.top: brand_header.bottom width: parent.width anchors.left: parent ? parent.left : undefined height: brand_section.expanded ? childrenRect.height : 0 visible: brand_section.expanded Repeater { model: elementsModel delegate: Loader { id: loader width: parent ? parent.width : 0 property var element: model sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot } } } Component { id: materialsTypeSection MaterialsTypeSection { materialType: element } } Component { id: materialSlot MaterialsSlot { material: element } } Connections { target: UM.Preferences function onPreferenceChanged(preference) { if (preference !== "cura/expanded_types" && preference !== "cura/expanded_brands") { return; } expanded = materialList.expandedBrands.indexOf(sectionName) > -1 } } }