123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // Copyright (c) 2019 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.Controls.Styles 1.4
- import QtQuick.Layouts 1.3
- import QtQuick.Dialogs 1.2
- import UM 1.2 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
- Label
- {
- id: brand_name
- text: sectionName
- height: UM.Theme.getSize("favorites_row").height
- width: parent.width - UM.Theme.getSize("favorites_button").width
- verticalAlignment: Text.AlignVCenter
- leftPadding: (UM.Theme.getSize("default_margin").width / 2) | 0
- }
- 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
- }
- }
- }
|