WIP: Moving current selected material to the material list instead of

the page.

Change all the previous references to the currentItem in the page.
Automatically and correctly select the element that is selected in the
extruder.

Contributes to CURA-5682.
This commit is contained in:
Diego Prado Gesto 2018-09-11 22:12:54 +02:00
parent 9ba4c723f7
commit f298d37134
5 changed files with 127 additions and 117 deletions

View File

@ -13,7 +13,7 @@ import Cura 1.0 as Cura
Rectangle Rectangle
{ {
id: brand_section id: brand_section
property var expanded: base.expanded_brands.indexOf(model.name) > -1 property var expanded: materialList.expandedBrands.indexOf(model.name) > -1
property var types_model: model.material_types property var types_model: model.material_types
height: childrenRect.height height: childrenRect.height
width: parent.width width: parent.width
@ -22,7 +22,7 @@ Rectangle
id: brand_header_background id: brand_header_background
color: color:
{ {
if(!expanded && model.name == base.current_brand) if(!expanded && model.name == materialList.currentBrand)
{ {
return UM.Theme.getColor("favorites_row_selected") return UM.Theme.getColor("favorites_row_selected")
} }
@ -79,20 +79,20 @@ Rectangle
anchors.fill: brand_header anchors.fill: brand_header
onPressed: onPressed:
{ {
const i = base.expanded_brands.indexOf(model.name) const i = materialList.expandedBrands.indexOf(model.name)
if (i > -1) if (i > -1)
{ {
// Remove it // Remove it
base.expanded_brands.splice(i, 1) materialList.expandedBrands.splice(i, 1)
brand_section.expanded = false brand_section.expanded = false
} }
else else
{ {
// Add it // Add it
base.expanded_brands.push(model.name) materialList.expandedBrands.push(model.name)
brand_section.expanded = true brand_section.expanded = true
} }
UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";")); UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";"));
} }
} }
Column Column
@ -114,7 +114,7 @@ Rectangle
target: UM.Preferences target: UM.Preferences
onPreferenceChanged: onPreferenceChanged:
{ {
expanded = base.expanded_brands.indexOf(model.name) > -1 expanded = materialList.expandedBrands.indexOf(model.name) > -1
} }
} }
} }

View File

@ -21,6 +21,111 @@ Item
Cura.MaterialBrandsModel { id: materialsModel } Cura.MaterialBrandsModel { id: materialsModel }
Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel }
Cura.GenericMaterialsModel { id: genericMaterialsModel } Cura.GenericMaterialsModel { id: genericMaterialsModel }
property var currentType: null
property var currentBrand: null
property var expandedBrands: UM.Preferences.getValue("cura/expanded_brands").split(";")
property var expandedTypes: UM.Preferences.getValue("cura/expanded_types").split(";")
function expandActiveMaterial(search_root_id)
{
for (var n = 0; n < genericMaterialsModel.rowCount(); n++)
{
var material = genericMaterialsModel.getItem(n);
if (material.root_material_id == search_root_id)
{
if (materialList.expandedBrands.indexOf("Generic") == -1)
{
materialList.expandedBrands.push("Generic");
materialList.currentBrand = "Generic"
}
}
}
for (var i = 0; i < materialsModel.rowCount(); i++)
{
var brand = materialsModel.getItem(i);
var types_model = brand.material_types;
for (var j = 0; j < types_model.rowCount(); j++)
{
var type = types_model.getItem(j);
var colors_model = type.colors;
for (var k = 0; k < colors_model.rowCount(); k++)
{
var material = colors_model.getItem(k);
if (material.root_material_id == search_root_id)
{
if (materialList.expandedBrands.indexOf(brand.name) == -1)
{
materialList.expandedBrands.push(brand.name);
materialList.currentBrand = brand.name
}
if (materialList.expandedTypes.indexOf(brand.name + "_" + type.name) == -1)
{
materialList.expandedTypes.push(brand.name + "_" + type.name)
materialList.currentType = brand.name + "_" + type.name
}
}
}
}
}
UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";"));
UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";"));
}
// Connections
// {
// target: materialsModel
// onItemsChanged:
// {
// var currentItemId = base.hasCurrentItem ? base.currentItem.root_material_id : ""
// var position = Cura.ExtruderManager.activeExtruderIndex
// console.log("!!!!!!!!!!!!!!!!!!! on items changed:", base.newRootMaterialIdToSwitchTo)
//
// // try to pick the currently selected item; it may have been moved
// if (base.newRootMaterialIdToSwitchTo == "")
// {
// console.log("material id is empty, setting to ", currentItemId)
// base.newRootMaterialIdToSwitchTo = currentItemId
// }
//
// console.log("PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", materialsModel.rowCount())
// for (var brand_idx = 0; brand_idx < materialsModel.rowCount(); ++brand_idx)
// {
// var brand = materialsModel.getItem(brand_idx)
// console.log(item.root_material_id, "=", base.newRootMaterialIdToSwitchTo)
//
// for (var type_idx = 0; type_idx < brand.material_types.rowCount(); ++type_idx)
// {
// var type = brand.material_types.getItem(type_idx)
// if (type.root_material_id == base.newRootMaterialIdToSwitchTo)
// {
// // Switch to the newly created profile if needed
// base.currentItem = item
// // materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex)
// // if (base.toActivateNewMaterial)
// // {
// // Cura.MachineManager.setMaterial(position, item.container_node)
// // }
// base.newRootMaterialIdToSwitchTo = ""
// base.toActivateNewMaterial = false
// return
// }
// }
// }
//
// // If the new id can't be found, then do nothing
//// materialListView.currentIndex = 0
//// materialListView.activateDetailsWithIndex(materialListView.currentIndex)
//// if (base.toActivateNewMaterial)
//// {
//// Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node)
//// }
// base.newRootMaterialIdToSwitchTo = ""
// base.toActivateNewMaterial = false
// }
// }
Column Column
{ {
Rectangle Rectangle
@ -102,7 +207,7 @@ Item
} }
Rectangle Rectangle
{ {
property var expanded: base.expanded_brands.indexOf("Generic") > -1 property var expanded: materialList.expandedBrands.indexOf("Generic") > -1
id: generic_section id: generic_section
height: childrenRect.height height: childrenRect.height
@ -158,18 +263,18 @@ Item
anchors.fill: generic_header anchors.fill: generic_header
onPressed: onPressed:
{ {
const index = base.expanded_brands.indexOf("Generic") const index = materialList.expandedBrands.indexOf("Generic")
if (index > -1) if (index > -1)
{ {
// Remove it // Remove it
base.expanded_brands.splice(index, 1) materialList.expandedBrands.splice(index, 1)
generic_section.expanded = false generic_section.expanded = false
} }
else else
{ {
// Add it // Add it
base.expanded_brands.push("Generic") materialList.expandedBrands.push("Generic")
generic_section.expanded = true generic_section.expanded = true
} }
} }

View File

@ -17,8 +17,6 @@ Item
// Keep PreferencesDialog happy // Keep PreferencesDialog happy
property var resetEnabled: false property var resetEnabled: false
property var currentItem: null property var currentItem: null
property var current_type: null
property var current_brand: null
property var hasCurrentItem: base.currentItem != null property var hasCurrentItem: base.currentItem != null
property var isCurrentItemActivated: property var isCurrentItemActivated:
@ -30,8 +28,6 @@ Item
property string newRootMaterialIdToSwitchTo: "" property string newRootMaterialIdToSwitchTo: ""
property bool toActivateNewMaterial: false property bool toActivateNewMaterial: false
property var expanded_brands: UM.Preferences.getValue("cura/expanded_brands").split(";")
property var expanded_types: UM.Preferences.getValue("cura/expanded_types").split(";")
property var extruder_position: Cura.ExtruderManager.activeExtruderIndex property var extruder_position: Cura.ExtruderManager.activeExtruderIndex
property var active_root_material_id: Cura.MachineManager.currentRootMaterialId[extruder_position] property var active_root_material_id: Cura.MachineManager.currentRootMaterialId[extruder_position]
@ -41,101 +37,10 @@ Item
name: "cura" name: "cura"
} }
Cura.MaterialBrandsModel { id: materials_model } Component.onCompleted: { materialListView.expandActiveMaterial(active_root_material_id) }
Cura.GenericMaterialsModel { id: generic_materials_model }
function expandActiveMaterial(search_root_id)
{
for (var n = 0; n < generic_materials_model.rowCount(); n++)
{
var material = generic_materials_model.getItem(n);
if (material.root_material_id == search_root_id)
{
if (base.expanded_brands.indexOf("Generic") == -1)
{
base.expanded_brands.push("Generic");
base.current_brand = "Generic"
}
}
}
for (var i = 0; i < materials_model.rowCount(); i++)
{
var brand = materials_model.getItem(i);
var types_model = brand.material_types;
for (var j = 0; j < types_model.rowCount(); j++)
{
var type = types_model.getItem(j);
var colors_model = type.colors;
for (var k = 0; k < colors_model.rowCount(); k++)
{
var material = colors_model.getItem(k);
if (material.root_material_id == search_root_id)
{
if (base.expanded_brands.indexOf(brand.name) == -1)
{
base.expanded_brands.push(brand.name);
base.current_brand = brand.name
}
if (base.expanded_types.indexOf(brand.name+"_"+type.name) == -1)
{
base.expanded_types.push(brand.name+"_"+type.name)
base.current_type = brand.name+"_"+type.name
}
}
}
}
}
UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";"));
UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";"));
}
Component.onCompleted: { expandActiveMaterial(active_root_material_id) }
onCurrentItemChanged: { materialDetailsPanel.currentItem = currentItem } onCurrentItemChanged: { materialDetailsPanel.currentItem = currentItem }
Connections
{
target: materials_model
onItemsChanged:
{
var currentItemId = hasCurrentItem ? base.currentItem.root_material_id : ""
var position = Cura.ExtruderManager.activeExtruderIndex
// try to pick the currently selected item; it may have been moved
if (base.newRootMaterialIdToSwitchTo == "")
{
base.newRootMaterialIdToSwitchTo = currentItemId
}
for (var idx = 0; idx < materials_model.rowCount(); ++idx)
{
var item = materials_model.getItem(idx)
if (item.root_material_id == base.newRootMaterialIdToSwitchTo)
{
// Switch to the newly created profile if needed
materialDetailsPanel.currentIndex = idx
materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex)
if (base.toActivateNewMaterial)
{
Cura.MachineManager.setMaterial(position, item.container_node)
}
base.newRootMaterialIdToSwitchTo = ""
base.toActivateNewMaterial = false
return
}
}
materialListView.currentIndex = 0
materialListView.activateDetailsWithIndex(materialListView.currentIndex)
if (base.toActivateNewMaterial)
{
Cura.MachineManager.setMaterial(position, materials_model.getItem(0).container_node)
}
base.newRootMaterialIdToSwitchTo = ""
base.toActivateNewMaterial = false
}
}
// Main layout // Main layout
Label Label
{ {
@ -241,7 +146,7 @@ Item
forceActiveFocus(); forceActiveFocus();
exportMaterialDialog.open(); exportMaterialDialog.open();
} }
enabled: currentItem != null enabled: base.hasCurrentItem
} }
} }

View File

@ -59,8 +59,8 @@ Rectangle
onClicked: onClicked:
{ {
base.currentItem = material base.currentItem = material
base.current_brand = material.brand materialList.currentBrand = material.brand
base.current_type = material.brand+"_"+material.material materialList.currentType = material.brand + "_" + material.material
} }
hoverEnabled: true hoverEnabled: true
onEntered: { material_slot.hovered = true } onEntered: { material_slot.hovered = true }

View File

@ -13,7 +13,7 @@ import Cura 1.0 as Cura
Rectangle Rectangle
{ {
id: material_type_section id: material_type_section
property var expanded: base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 property var expanded: materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1
property var colors_model: model.colors property var colors_model: model.colors
height: childrenRect.height height: childrenRect.height
width: parent.width width: parent.width
@ -22,7 +22,7 @@ Rectangle
id: material_type_header_background id: material_type_header_background
color: color:
{ {
if(!expanded && model.brand+"_"+model.name == base.current_type) if(!expanded && model.brand + "_" + model.name == materialList.currentType)
{ {
return UM.Theme.getColor("favorites_row_selected") return UM.Theme.getColor("favorites_row_selected")
} }
@ -94,20 +94,20 @@ Rectangle
onPressed: onPressed:
{ {
const identifier = model.brand + "_" + model.name; const identifier = model.brand + "_" + model.name;
const i = base.expanded_types.indexOf(identifier) const i = materialList.expandedTypes.indexOf(identifier)
if (i > -1) if (i > -1)
{ {
// Remove it // Remove it
base.expanded_types.splice(i, 1) materialList.expandedTypes.splice(i, 1)
material_type_section.expanded = false material_type_section.expanded = false
} }
else else
{ {
// Add it // Add it
base.expanded_types.push(identifier) materialList.expandedTypes.push(identifier)
material_type_section.expanded = true material_type_section.expanded = true
} }
UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";")); UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";"));
} }
} }
Column Column
@ -131,7 +131,7 @@ Rectangle
target: UM.Preferences target: UM.Preferences
onPreferenceChanged: onPreferenceChanged:
{ {
expanded = base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 expanded = materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1
} }
} }
} }