diff options
| -rw-r--r-- | widgets/filedialog/FileDialog.qml | 9 | ||||
| -rw-r--r-- | widgets/filedialog/FolderContents.qml | 18 | ||||
| -rw-r--r-- | widgets/filedialog/HeaderBar.qml | 14 |
3 files changed, 25 insertions, 16 deletions
diff --git a/widgets/filedialog/FileDialog.qml b/widgets/filedialog/FileDialog.qml index 915c09c..d59ae65 100644 --- a/widgets/filedialog/FileDialog.qml +++ b/widgets/filedialog/FileDialog.qml @@ -6,7 +6,9 @@ import QtQuick.Layouts FloatingWindow { id: root - property list<string> cwd: ["Home", "Downloads"] + property list<string> cwd: ["Home"] + + signal accepted(path: string) implicitWidth: 1000 implicitHeight: 600 @@ -26,14 +28,13 @@ FloatingWindow { HeaderBar { Layout.fillWidth: true - cwd: root.cwd + dialog: root } FolderContents { Layout.fillWidth: true Layout.fillHeight: true - - cwd: root.cwd + dialog: root } } } diff --git a/widgets/filedialog/FolderContents.qml b/widgets/filedialog/FolderContents.qml index c59d87f..f8e10d9 100644 --- a/widgets/filedialog/FolderContents.qml +++ b/widgets/filedialog/FolderContents.qml @@ -13,7 +13,7 @@ import Qt.labs.folderlistmodel GridView { id: root - required property list<string> cwd + required property var dialog property var mimes: ({}) @@ -24,12 +24,13 @@ GridView { model: FolderListModel { folder: { let url = "file://"; - if (root.cwd[0] === "Home") - url += `${Paths.strip(Paths.home)}/${root.cwd.slice(1).join("/")}`; + if (root.dialog.cwd[0] === "Home") + url += `${Paths.strip(Paths.home)}/${root.dialog.cwd.slice(1).join("/")}`; else - url += root.cwd.join("/"); + url += root.dialog.cwd.join("/"); return url; } + onFolderChanged: root.currentIndex = -1 } delegate: StyledRect { @@ -37,6 +38,7 @@ GridView { required property int index required property string fileName + required property string filePath required property url fileUrl required property string fileSuffix required property bool fileIsDir @@ -53,7 +55,13 @@ GridView { StateLayer { color: root.currentItem === item ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface - onDoubleClicked: console.log("double clicked", item) + + onDoubleClicked: { + if (item.fileIsDir) + root.dialog.cwd.push(item.fileName); + else + root.dialog.accepted(item.filePath); + } function onClicked(): void { root.currentIndex = item.index; diff --git a/widgets/filedialog/HeaderBar.qml b/widgets/filedialog/HeaderBar.qml index 40177a3..077bd29 100644 --- a/widgets/filedialog/HeaderBar.qml +++ b/widgets/filedialog/HeaderBar.qml @@ -9,7 +9,7 @@ import QtQuick.Layouts RowLayout { id: root - required property list<string> cwd + required property var dialog spacing: Appearance.spacing.small @@ -21,7 +21,7 @@ RowLayout { radius: Appearance.rounding.small function onClicked(): void { - root.cwd.pop(); + root.dialog.cwd.pop(); } } @@ -51,7 +51,7 @@ RowLayout { spacing: Appearance.spacing.small Repeater { - model: root.cwd + model: root.dialog.cwd RowLayout { id: folder @@ -78,13 +78,13 @@ RowLayout { Loader { anchors.fill: parent - active: folder.index < root.cwd.length - 1 + active: folder.index < root.dialog.cwd.length - 1 asynchronous: true sourceComponent: StateLayer { radius: Appearance.rounding.small function onClicked(): void { - root.cwd = root.cwd.slice(0, folder.index); + root.dialog.cwd = root.dialog.cwd.slice(0, folder.index + 1); } } } @@ -100,7 +100,7 @@ RowLayout { asynchronous: true sourceComponent: MaterialIcon { text: "home" - color: root.cwd.length === 1 ? Colours.palette.m3onSurface : Colours.palette.m3onSurfaceVariant + color: root.dialog.cwd.length === 1 ? Colours.palette.m3onSurface : Colours.palette.m3onSurfaceVariant fill: 1 } } @@ -113,7 +113,7 @@ RowLayout { anchors.leftMargin: homeIcon.active ? Appearance.padding.small : 0 text: folder.modelData - color: folder.index < root.cwd.length - 1 ? Colours.palette.m3onSurfaceVariant : Colours.palette.m3onSurface + color: folder.index < root.dialog.cwd.length - 1 ? Colours.palette.m3onSurfaceVariant : Colours.palette.m3onSurface font.bold: true } } |