mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 17:47:09 +00:00
140 lines
4.8 KiB
QML
140 lines
4.8 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import ".."
|
|
import qs.services
|
|
import qs.config
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
|
|
StyledRect {
|
|
id: root
|
|
|
|
required property var dialog
|
|
|
|
implicitWidth: inner.implicitWidth + Appearance.padding.normal * 2
|
|
implicitHeight: inner.implicitHeight + Appearance.padding.normal * 2
|
|
|
|
color: Colours.tPalette.m3surfaceContainer
|
|
|
|
RowLayout {
|
|
id: inner
|
|
|
|
anchors.fill: parent
|
|
anchors.margins: Appearance.padding.normal
|
|
spacing: Appearance.spacing.small
|
|
|
|
Item {
|
|
implicitWidth: implicitHeight
|
|
implicitHeight: upIcon.implicitHeight + Appearance.padding.small * 2
|
|
|
|
StateLayer {
|
|
radius: Appearance.rounding.small
|
|
disabled: root.dialog.cwd.length === 1
|
|
|
|
function onClicked(): void {
|
|
root.dialog.cwd.pop();
|
|
}
|
|
}
|
|
|
|
MaterialIcon {
|
|
id: upIcon
|
|
|
|
anchors.centerIn: parent
|
|
text: "drive_folder_upload"
|
|
color: root.dialog.cwd.length === 1 ? Colours.palette.m3outline : Colours.palette.m3onSurface
|
|
grade: 200
|
|
}
|
|
}
|
|
|
|
StyledRect {
|
|
Layout.fillWidth: true
|
|
|
|
radius: Appearance.rounding.small
|
|
color: Colours.tPalette.m3surfaceContainerHigh
|
|
|
|
implicitHeight: pathComponents.implicitHeight + pathComponents.anchors.margins * 2
|
|
|
|
RowLayout {
|
|
id: pathComponents
|
|
|
|
anchors.fill: parent
|
|
anchors.margins: Appearance.padding.small / 2
|
|
anchors.leftMargin: 0
|
|
|
|
spacing: Appearance.spacing.small
|
|
|
|
Repeater {
|
|
model: root.dialog.cwd
|
|
|
|
RowLayout {
|
|
id: folder
|
|
|
|
required property string modelData
|
|
required property int index
|
|
|
|
spacing: 0
|
|
|
|
Loader {
|
|
Layout.rightMargin: Appearance.spacing.small
|
|
active: folder.index > 0
|
|
sourceComponent: StyledText {
|
|
text: "/"
|
|
color: Colours.palette.m3onSurfaceVariant
|
|
font.bold: true
|
|
}
|
|
}
|
|
|
|
Item {
|
|
implicitWidth: homeIcon.implicitWidth + (homeIcon.active ? Appearance.padding.small : 0) + folderName.implicitWidth + Appearance.padding.normal * 2
|
|
implicitHeight: folderName.implicitHeight + Appearance.padding.small * 2
|
|
|
|
Loader {
|
|
anchors.fill: parent
|
|
active: folder.index < root.dialog.cwd.length - 1
|
|
sourceComponent: StateLayer {
|
|
radius: Appearance.rounding.small
|
|
|
|
function onClicked(): void {
|
|
root.dialog.cwd = root.dialog.cwd.slice(0, folder.index + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
Loader {
|
|
id: homeIcon
|
|
|
|
anchors.left: parent.left
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.leftMargin: Appearance.padding.normal
|
|
|
|
active: folder.index === 0 && folder.modelData === "Home"
|
|
sourceComponent: MaterialIcon {
|
|
text: "home"
|
|
color: root.dialog.cwd.length === 1 ? Colours.palette.m3onSurface : Colours.palette.m3onSurfaceVariant
|
|
fill: 1
|
|
}
|
|
}
|
|
|
|
StyledText {
|
|
id: folderName
|
|
|
|
anchors.left: homeIcon.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.leftMargin: homeIcon.active ? Appearance.padding.small : 0
|
|
|
|
text: folder.modelData
|
|
color: folder.index < root.dialog.cwd.length - 1 ? Colours.palette.m3onSurfaceVariant : Colours.palette.m3onSurface
|
|
font.bold: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|