diff --git a/src/qml/components/StorageLocations.qml b/src/qml/components/StorageLocations.qml index b5fac4aa4d..86dcf5ee39 100644 --- a/src/qml/components/StorageLocations.qml +++ b/src/qml/components/StorageLocations.qml @@ -17,33 +17,45 @@ ColumnLayout { } spacing: 15 OptionButton { + id: defaultDirOption Layout.fillWidth: true ButtonGroup.group: group text: qsTr("Default") description: qsTr("Your application directory.") - recommended: true + customDir: optionsModel.getDefaultDataDirString checked: true + onClicked: { + optionsModel.customDataDir = false + } } OptionButton { + id: customDirOption Layout.fillWidth: true ButtonGroup.group: group text: qsTr("Custom") description: qsTr("Choose the directory and storage device.") + customDir: customDirOption.checked ? fileDialog.folder : "" onClicked: fileDialog.open() } FileDialog { id: fileDialog selectFolder: true - folder: optionsModel.getDefaultDataDirectory + folder: shortcuts.home onAccepted: { optionsModel.setCustomDataDirString(fileDialog.fileUrls[0].toString()) var customDataDir = fileDialog.fileUrl.toString(); if (customDataDir !== "") { optionsModel.setCustomDataDirArgs(customDataDir); + customDirOption.customDir = optionsModel.getCustomDataDirString(); } } onRejected: { console.log("Custom datadir selection canceled") + if (fileDialog.folder == shortcuts.home) { + defaultDirOption.checked = true + } else { + customDirOption.customDir = optionsModel.getCustomDataDirString() + } } } } diff --git a/src/qml/components/StorageSettings.qml b/src/qml/components/StorageSettings.qml index 2a2951bfac..6fef4db2bd 100644 --- a/src/qml/components/StorageSettings.qml +++ b/src/qml/components/StorageSettings.qml @@ -58,4 +58,22 @@ ColumnLayout { loadedItem.forceActiveFocus() } } + Separator { Layout.fillWidth: true } + Setting { + id: customDataDirSetting + Layout.fillWidth: true + header: qsTr("Data Directory") + } + ValueInput { + Layout.fillWidth: true + parentState: "DISABLED" + description: optionsModel.customDataDir ? optionsModel.getCustomDataDirString() : optionsModel.getDefaultDataDirString + filled: true + descriptionSize: 15 + textColor: Theme.color.neutral5 + validator: null + maximumLength: 100 + horizontalAlignment: Text.AlignLeft + wrapMode: Text.WordWrap + } } diff --git a/src/qml/controls/OptionButton.qml b/src/qml/controls/OptionButton.qml index ef459ce8be..6494306331 100644 --- a/src/qml/controls/OptionButton.qml +++ b/src/qml/controls/OptionButton.qml @@ -11,6 +11,7 @@ Button { property string description property bool recommended: false property string image: "" + property string customDir: "" padding: 15 checkable: true implicitWidth: 450 @@ -80,6 +81,28 @@ Button { } } } + Loader { + Layout.topMargin: 12 + Layout.fillWidth: true + active: button.customDir.length > 0 + visible: active + sourceComponent: Button { + id: container + background: Rectangle { + color: Theme.color.neutral2 + radius: 5 + } + font.family: "Inter" + font.styleName: "Semi Bold" + font.pixelSize: 13 + contentItem: Text { + font: container.font + color: Theme.color.neutral9 + text: button.customDir + wrapMode: Text.WordWrap + } + } + } } Item { height: parent.height