summaryrefslogtreecommitdiff
path: root/widgets/filedialog/FileDialog.qml
blob: 33bae6a61d0a4833a12b366d1ca7857bcec0370f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import qs.services
import qs.config
import Quickshell
import QtQuick
import QtQuick.Layouts

FloatingWindow {
    id: root

    property list<string> cwd: ["Home"]
    property string filterLabel: "All files"
    property list<string> filters: ["*"]

    readonly property bool selectionValid: {
        const item = folderContents.currentItem;
        return item && !item.fileIsDir && (filters.includes("*") || filters.includes(item.fileSuffix));
    }

    signal accepted(path: string)
    signal rejected

    implicitWidth: 1000
    implicitHeight: 600
    color: Colours.palette.m3surface

    onAccepted: visible = false
    onRejected: visible = false

    RowLayout {
        anchors.fill: parent

        spacing: 0

        Sidebar {
            Layout.fillHeight: true
            dialog: root
        }

        ColumnLayout {
            Layout.fillWidth: true
            Layout.fillHeight: true

            spacing: 0

            HeaderBar {
                Layout.fillWidth: true
                dialog: root
            }

            FolderContents {
                id: folderContents

                Layout.fillWidth: true
                Layout.fillHeight: true
                dialog: root
            }

            DialogButtons {
                Layout.fillWidth: true
                dialog: root
                folder: folderContents
            }
        }
    }

    Behavior on color {
        ColorAnimation {
            duration: Appearance.anim.durations.normal
            easing.type: Easing.BezierSpline
            easing.bezierCurve: Appearance.anim.curves.standard
        }
    }
}