mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-14 23:34:01 -04:00
91 lines
2.9 KiB
QML
91 lines
2.9 KiB
QML
import QtQuick
|
|
import Quickshell.Wayland
|
|
import qs.Common
|
|
import qs.DCommon.FileBrowser
|
|
import qs.Modals.Common
|
|
|
|
DModal {
|
|
id: fileBrowserSurfaceModal
|
|
|
|
property string mode: folderMode ? "openFolder" : saveMode ? "save" : "open"
|
|
property var filters: fileExtensions
|
|
property bool multiple: false
|
|
property string defaultName: defaultFileName
|
|
property string startPath: revealPath
|
|
property string bucket: browserType
|
|
property string defaultViewMode: ["wallpaper", "profile"].includes(bucket) ? "grid" : "list"
|
|
|
|
property string browserTitle: I18n.tr("Select File", "default file browser window title")
|
|
property string browserIcon: "folder_open" // !TODO: plugin compat, the window header no longer draws an icon
|
|
property string browserType: "generic"
|
|
property var fileExtensions: []
|
|
property alias filterExtensions: fileBrowserSurfaceModal.fileExtensions
|
|
property bool showHiddenFiles: false
|
|
property bool saveMode: false
|
|
property bool folderMode: false
|
|
property string defaultFileName: ""
|
|
property string revealPath: ""
|
|
property var parentPopout: null
|
|
property bool _settled: false
|
|
|
|
signal accepted(var paths)
|
|
signal rejected
|
|
signal fileSelected(string path)
|
|
|
|
layerNamespace: "dms:filebrowser"
|
|
modalWidth: 860
|
|
modalHeight: 620
|
|
backgroundColor: Theme.floatingWindowSurface
|
|
closeOnEscapeKey: false
|
|
closeOnBackgroundClick: true
|
|
allowStacking: true
|
|
useOverlayLayer: true
|
|
keepPopoutsOpen: true
|
|
|
|
onBackgroundClicked: close()
|
|
|
|
onOpened: {
|
|
_settled = false;
|
|
if (parentPopout)
|
|
parentPopout.customKeyboardFocus = WlrKeyboardFocus.None;
|
|
Qt.callLater(() => {
|
|
const picker = contentLoader?.item;
|
|
if (!picker)
|
|
return;
|
|
picker.reset();
|
|
picker.forceActiveFocus();
|
|
});
|
|
}
|
|
|
|
onDialogClosed: {
|
|
if (parentPopout)
|
|
parentPopout.customKeyboardFocus = null;
|
|
if (_settled)
|
|
return;
|
|
_settled = true;
|
|
rejected();
|
|
}
|
|
|
|
content: FilePicker {
|
|
focus: true
|
|
autoReset: false
|
|
mode: fileBrowserSurfaceModal.mode
|
|
filters: fileBrowserSurfaceModal.filters
|
|
multiple: fileBrowserSurfaceModal.multiple
|
|
defaultName: fileBrowserSurfaceModal.defaultName
|
|
startPath: fileBrowserSurfaceModal.startPath
|
|
bucket: fileBrowserSurfaceModal.bucket
|
|
title: fileBrowserSurfaceModal.browserTitle
|
|
defaultShowHidden: fileBrowserSurfaceModal.showHiddenFiles
|
|
defaultViewMode: fileBrowserSurfaceModal.defaultViewMode
|
|
onAccepted: paths => {
|
|
fileBrowserSurfaceModal._settled = true;
|
|
fileBrowserSurfaceModal.accepted(paths);
|
|
if (paths.length > 0)
|
|
fileBrowserSurfaceModal.fileSelected(paths[0]);
|
|
fileBrowserSurfaceModal.close();
|
|
}
|
|
onRejected: fileBrowserSurfaceModal.close()
|
|
}
|
|
}
|