mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
109 lines
3.0 KiB
QML
109 lines
3.0 KiB
QML
pragma ComponentBehavior
|
|
|
|
import QtQuick
|
|
import qs.Common
|
|
import qs.Widgets
|
|
|
|
Column {
|
|
id: root
|
|
|
|
property string title: ""
|
|
property string iconName: ""
|
|
property alias content: contentLoader.sourceComponent
|
|
property bool expanded: false
|
|
property bool collapsible: true
|
|
property bool lazyLoad: true
|
|
|
|
width: parent.width
|
|
spacing: expanded ? Theme.spacingM : 0
|
|
Component.onCompleted: {
|
|
if (!collapsible)
|
|
expanded = true
|
|
}
|
|
|
|
MouseArea {
|
|
width: parent.width
|
|
height: headerRow.height
|
|
enabled: collapsible
|
|
hoverEnabled: collapsible
|
|
onClicked: {
|
|
if (collapsible)
|
|
expanded = !expanded
|
|
}
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
color: parent.containsMouse ? Qt.rgba(Theme.primary.r,
|
|
Theme.primary.g,
|
|
Theme.primary.b,
|
|
0.08) : "transparent"
|
|
radius: Theme.radiusS
|
|
}
|
|
|
|
Row {
|
|
id: headerRow
|
|
|
|
width: parent.width
|
|
spacing: Theme.spacingS
|
|
topPadding: Theme.spacingS
|
|
bottomPadding: Theme.spacingS
|
|
|
|
DankIcon {
|
|
name: root.collapsible ? (root.expanded ? "expand_less" : "expand_more") : root.iconName
|
|
size: Theme.iconSize - 2
|
|
color: Theme.primary
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
Behavior on rotation {
|
|
NumberAnimation {
|
|
duration: Appearance.anim.durations.fast
|
|
easing.type: Easing.BezierSpline
|
|
easing.bezierCurve: Appearance.anim.curves.standard
|
|
}
|
|
}
|
|
}
|
|
|
|
DankIcon {
|
|
name: root.iconName
|
|
size: Theme.iconSize - 4
|
|
color: Theme.primary
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
visible: root.collapsible
|
|
}
|
|
|
|
StyledText {
|
|
text: root.title
|
|
font.pixelSize: Theme.fontSizeLarge
|
|
color: Theme.surfaceText
|
|
font.weight: Font.Medium
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
width: parent.width
|
|
height: 1
|
|
color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12)
|
|
visible: expanded || !collapsible
|
|
}
|
|
|
|
Loader {
|
|
id: contentLoader
|
|
|
|
width: parent.width
|
|
active: lazyLoad ? expanded || !collapsible : true
|
|
visible: expanded || !collapsible
|
|
asynchronous: true
|
|
opacity: visible ? 1 : 0
|
|
|
|
Behavior on opacity {
|
|
NumberAnimation {
|
|
duration: Appearance.anim.durations.normal
|
|
easing.type: Easing.BezierSpline
|
|
easing.bezierCurve: Appearance.anim.curves.standard
|
|
}
|
|
}
|
|
}
|
|
}
|