82 lines
2.1 KiB
QML
82 lines
2.1 KiB
QML
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||
|
|
||
|
import QtQuick 2.12
|
||
|
import QtQuick.Controls 2.12
|
||
|
import QtQuick.Layouts 1.12
|
||
|
|
||
|
HListView {
|
||
|
id: accordion
|
||
|
|
||
|
|
||
|
property Component category
|
||
|
property Component content
|
||
|
property Component expander: HButton {
|
||
|
id: expanderItem
|
||
|
iconItem.small: true
|
||
|
icon.name: "expand"
|
||
|
backgroundColor: "transparent"
|
||
|
toolTip.text: expand ? qsTr("Collapse") : qsTr("Expand")
|
||
|
onClicked: expand = ! expand
|
||
|
|
||
|
leftPadding: theme.spacing / 2
|
||
|
rightPadding: leftPadding
|
||
|
|
||
|
iconItem.transform: Rotation {
|
||
|
origin.x: expanderItem.iconItem.width / 2
|
||
|
origin.y: expanderItem.iconItem.height / 2
|
||
|
angle: expanderItem.loading ? 0 : expand ? 90 : 180
|
||
|
|
||
|
Behavior on angle { HNumberAnimation {} }
|
||
|
}
|
||
|
|
||
|
Behavior on opacity { HNumberAnimation {} }
|
||
|
}
|
||
|
|
||
|
|
||
|
delegate: HColumnLayout {
|
||
|
id: categoryContentColumn
|
||
|
width: accordion.width
|
||
|
|
||
|
property bool expand: true
|
||
|
readonly property QtObject categoryModel: model
|
||
|
|
||
|
HRowLayout {
|
||
|
Layout.fillWidth: true
|
||
|
|
||
|
HLoader {
|
||
|
id: categoryLoader
|
||
|
sourceComponent: category
|
||
|
|
||
|
Layout.fillWidth: true
|
||
|
|
||
|
readonly property QtObject model: categoryModel
|
||
|
}
|
||
|
HLoader {
|
||
|
sourceComponent: expander
|
||
|
|
||
|
readonly property QtObject model: categoryModel
|
||
|
property alias expand: categoryContentColumn.expand
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Item {
|
||
|
opacity: expand ? 1 : 0
|
||
|
visible: opacity > 0
|
||
|
|
||
|
Layout.fillWidth: true
|
||
|
Layout.preferredHeight: contentLoader.implicitHeight * opacity
|
||
|
|
||
|
Behavior on opacity { HNumberAnimation {} }
|
||
|
|
||
|
HLoader {
|
||
|
id: contentLoader
|
||
|
width: parent.width
|
||
|
active: categoryLoader.status === Loader.Ready
|
||
|
sourceComponent: content
|
||
|
|
||
|
readonly property QtObject xcategoryModel: categoryModel
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|