Put materials into branded material submenus

CURA-2194
This commit is contained in:
fieldOfView 2016-08-26 15:43:50 +02:00
parent baad88fb6c
commit 3b1c11bfcf

View File

@ -39,14 +39,24 @@ Menu
Menu Menu
{ {
id: brandMenu id: brandMenu
title: model.brandName title: brandName
property string brand: model.brandName property string brandName: model.brandName
property var brandMaterials: model.materials
Instantiator
{
model: brandMaterials
Menu
{
id: brandMaterialsMenu
title: materialName
property string materialName: model.materialName
Instantiator Instantiator
{ {
model: UM.InstanceContainersModel model: UM.InstanceContainersModel
{ {
filter: materialFilter(brandMenu.brandName) filter: materialFilter(brandMenu.brandName, brandMaterialsMenu.materialName)
} }
MenuItem MenuItem
{ {
@ -59,6 +69,10 @@ Menu
Cura.MachineManager.setActiveMaterial(model.id); Cura.MachineManager.setActiveMaterial(model.id);
} }
} }
onObjectAdded: brandMaterialsMenu.insertItem(index, object)
onObjectRemoved: brandMaterialsMenu.removeItem(object)
}
}
onObjectAdded: brandMenu.insertItem(index, object) onObjectAdded: brandMenu.insertItem(index, object)
onObjectRemoved: brandMenu.removeItem(object) onObjectRemoved: brandMenu.removeItem(object)
} }
@ -87,46 +101,68 @@ Menu
MenuItem { action: Cura.Actions.manageMaterials } 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) function materialFilter(brand, material)
{ {
var result = { "type": "material" } var result = { "type": "material" };
if(brand != undefined) if(brand)
{ {
result.brand = brand result.brand = brand;
} }
if(material != undefined) if(material)
{ {
result.material = material result.material = material;
} }
if(Cura.MachineManager.filterMaterialsByMachine) if(Cura.MachineManager.filterMaterialsByMachine)
{ {
result.definition = Cura.MachineManager.activeDefinitionId result.definition = Cura.MachineManager.activeDefinitionId;
if(Cura.MachineManager.hasVariants) if(Cura.MachineManager.hasVariants)
{ {
result.variant = Cura.MachineManager.activeVariantId result.variant = Cura.MachineManager.activeVariantId;
} }
} }
else else
{ {
result.definition = "fdmprinter" result.definition = "fdmprinter";
}
return result;
}
function populateBrandModel()
{
// Create a structure of unique brands and their material-types
var items = materialsModel.items;
var materialsByBrand = {}
for (var i in items) {
var brandName = items[i]["metadata"]["brand"];
var materialName = items[i]["metadata"]["material"];
if (brandName == "Generic")
{
continue;
}
if (!materialsByBrand.hasOwnProperty(brandName))
{
materialsByBrand[brandName] = [];
}
if (materialsByBrand[brandName].indexOf(materialName) == -1)
{
materialsByBrand[brandName].push(materialName);
}
}
brandModel.clear();
for (var brand in materialsByBrand)
{
var materialsByBrandModel = [];
var materials = materialsByBrand[brand];
for (var material in materials)
{
materialsByBrandModel.push({materialName: materials[material]})
}
brandModel.append({
brandName: brand,
materials: materialsByBrandModel
});
} }
return result
} }
} }