diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index cb90eb721f..32f3a3a42e 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -16,23 +16,7 @@ Menu { model: UM.InstanceContainersModel { - filter: - { - var result = { "type": "material" } - if(Cura.MachineManager.filterMaterialsByMachine) - { - result.definition = Cura.MachineManager.activeDefinitionId - if(Cura.MachineManager.hasVariants) - { - result.variant = Cura.MachineManager.activeVariantId - } - } - else - { - result.definition = "fdmprinter" - } - return result - } + filter: materialFilter("Generic") } MenuItem { @@ -48,10 +32,101 @@ Menu onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) } + MenuSeparator { } + Instantiator + { + model: brandModel + Menu + { + id: brandMenu + title: model.brandName + property string brand: model.brandName + + Instantiator + { + model: UM.InstanceContainersModel + { + filter: materialFilter(brandMenu.brandName) + } + MenuItem + { + text: model.name + checkable: true; + checked: model.id == Cura.MachineManager.activeMaterialId; + exclusiveGroup: group; + onTriggered: + { + Cura.MachineManager.setActiveMaterial(model.id); + } + } + onObjectAdded: brandMenu.insertItem(index, object) + onObjectRemoved: brandMenu.removeItem(object) + } + } + onObjectAdded: menu.insertItem(index, object) + onObjectRemoved: menu.removeItem(object) + } + + ListModel + { + id: brandModel + Component.onCompleted: populateBrandModel() + } + + //: Model used to populate the brandModel + UM.InstanceContainersModel + { + id: materialsModel + filter: materialFilter() + onDataChanged: populateBrandModel() + } ExclusiveGroup { id: group } MenuSeparator { } MenuItem { action: Cura.Actions.manageMaterials } + + function populateBrandModel() + { + var brands = materialsModel.getUniqueValues("brand") + var material_types = materialsModel.getUniqueValues("material") + brandModel.clear(); + for (var i in brands) + { + if(brands[i] != "Generic") + { + brandModel.append({ + brandName: brands[i], + materials: [] + }) + } + } + } + + function materialFilter(brand, material) + { + var result = { "type": "material" } + if(brand != undefined) + { + result.brand = brand + } + if(material != undefined) + { + result.material = material + } + if(Cura.MachineManager.filterMaterialsByMachine) + { + result.definition = Cura.MachineManager.activeDefinitionId + if(Cura.MachineManager.hasVariants) + { + result.variant = Cura.MachineManager.activeVariantId + } + } + else + { + result.definition = "fdmprinter" + } + return result + } }