summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml97
1 files changed, 97 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml
new file mode 100644
index 0000000..c7686ca
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserModal.qml
@@ -0,0 +1,97 @@
+import QtQuick
+import Quickshell
+import qs.Common
+import qs.Widgets
+
+FloatingWindow {
+ id: fileBrowserModal
+
+ property bool disablePopupTransparency: true
+ property string browserTitle: "Select File"
+ property string browserIcon: "folder_open"
+ property string browserType: "generic"
+ property var fileExtensions: ["*.*"]
+ property alias filterExtensions: fileBrowserModal.fileExtensions
+ property bool showHiddenFiles: false
+ property bool saveMode: false
+ property string defaultFileName: ""
+ property var parentModal: null
+ property bool shouldHaveFocus: visible
+ property bool allowFocusOverride: false
+ property bool shouldBeVisible: visible
+ property bool allowStacking: true
+
+ signal fileSelected(string path)
+ signal dialogClosed
+
+ function open() {
+ visible = true;
+ }
+
+ function close() {
+ visible = false;
+ }
+
+ objectName: "fileBrowserModal"
+ title: "Files - " + browserTitle
+ minimumSize: Qt.size(500, 400)
+ implicitWidth: 800
+ implicitHeight: 600
+ color: Theme.surfaceContainer
+ visible: false
+
+ onVisibleChanged: {
+ if (visible) {
+ if (parentModal && "shouldHaveFocus" in parentModal) {
+ parentModal.shouldHaveFocus = false;
+ parentModal.allowFocusOverride = true;
+ }
+ Qt.callLater(() => {
+ if (content) {
+ content.reset();
+ content.forceActiveFocus();
+ }
+ });
+ } else {
+ if (parentModal && "allowFocusOverride" in parentModal) {
+ parentModal.allowFocusOverride = false;
+ parentModal.shouldHaveFocus = Qt.binding(() => parentModal.shouldBeVisible);
+ }
+ dialogClosed();
+ }
+ }
+
+ Loader {
+ id: contentLoader
+ anchors.fill: parent
+ active: fileBrowserModal.visible
+ sourceComponent: FileBrowserContent {
+ id: content
+ anchors.fill: parent
+ focus: true
+ closeOnEscape: false
+ windowControls: fileBrowserModal.windowControlsRef
+
+ browserTitle: fileBrowserModal.browserTitle
+ browserIcon: fileBrowserModal.browserIcon
+ browserType: fileBrowserModal.browserType
+ fileExtensions: fileBrowserModal.fileExtensions
+ showHiddenFiles: fileBrowserModal.showHiddenFiles
+ saveMode: fileBrowserModal.saveMode
+ defaultFileName: fileBrowserModal.defaultFileName
+
+ Component.onCompleted: initialize()
+
+ onFileSelected: path => fileBrowserModal.fileSelected(path)
+ onCloseRequested: fileBrowserModal.close()
+ }
+ }
+
+ property alias content: contentLoader.item
+ property alias windowControlsRef: windowControls
+
+ FloatingWindowControls {
+ id: windowControls
+ targetWindow: fileBrowserModal
+ }
+}