Browse Source

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.

Diego Prado Gesto 6 years ago
parent
commit
f298d37134

+ 7 - 7
resources/qml/Preferences/Materials/MaterialsBrandSection.qml

@@ -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
         }
         }
     }
     }
 }
 }

+ 109 - 4
resources/qml/Preferences/Materials/MaterialsList.qml

@@ -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
                     }
                     }
                 }
                 }

+ 2 - 97
resources/qml/Preferences/Materials/MaterialsPage.qml

@@ -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 }
-    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) }
+    Component.onCompleted: { materialListView.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
         }
         }
     }
     }
 
 

+ 2 - 2
resources/qml/Preferences/Materials/MaterialsSlot.qml

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

+ 7 - 7
resources/qml/Preferences/Materials/MaterialsTypeSection.qml

@@ -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
         }
         }
     }
     }
 }
 }