143 lines
4.0 KiB
QML
143 lines
4.0 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import qs.Commons
|
|
import qs.Widgets
|
|
|
|
ColumnLayout {
|
|
id: root
|
|
|
|
property var pluginApi: null
|
|
|
|
property var cfg: pluginApi?.pluginSettings || ({})
|
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
|
|
|
property bool valueShowHidden: cfg.showHidden ?? defaults.showHidden
|
|
property int valueMaxResults: cfg.maxResults ?? defaults.maxResults
|
|
property string valueFileOpener: cfg.fileOpener ?? defaults.fileOpener
|
|
property string valueFdCommand: cfg.fdCommand ?? defaults.fdCommand
|
|
property string valueSearchDirectory: cfg.searchDirectory ?? defaults.searchDirectory
|
|
|
|
spacing: Style.marginL
|
|
|
|
Component.onCompleted: {
|
|
Logger.d("FileSearch", "Settings UI loaded");
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: Style.marginM
|
|
Layout.fillWidth: true
|
|
|
|
// Show Hidden Files Toggle
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginM
|
|
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginS
|
|
|
|
NText {
|
|
text: pluginApi?.tr("settings.showHidden.label")
|
|
font.pointSize: Style.fontSizeL
|
|
font.weight: Font.Medium
|
|
color: Color.mOnSurface
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
|
|
NToggle {
|
|
checked: root.valueShowHidden
|
|
onToggled: root.valueShowHidden = checked
|
|
}
|
|
}
|
|
|
|
// File Opener Input
|
|
NTextInput {
|
|
Layout.fillWidth: true
|
|
label: pluginApi?.tr("settings.fileOpener.label")
|
|
description: pluginApi?.tr("settings.fileOpener.description")
|
|
placeholderText: pluginApi?.tr("settings.fileOpener.placeholder")
|
|
text: root.valueFileOpener
|
|
onTextChanged: root.valueFileOpener = text
|
|
}
|
|
|
|
// Search Directory Input
|
|
NTextInput {
|
|
Layout.fillWidth: true
|
|
label: pluginApi?.tr("settings.searchDirectory.label")
|
|
description: pluginApi?.tr("settings.searchDirectory.description")
|
|
placeholderText: pluginApi?.tr("settings.searchDirectory.placeholder")
|
|
text: root.valueSearchDirectory
|
|
onTextChanged: root.valueSearchDirectory = text
|
|
}
|
|
|
|
// fd Command Path Input
|
|
NTextInput {
|
|
Layout.fillWidth: true
|
|
label: pluginApi?.tr("settings.fdCommand.label")
|
|
description: pluginApi?.tr("settings.fdCommand.description")
|
|
placeholderText: pluginApi?.tr("settings.fdCommand.placeholder")
|
|
text: root.valueFdCommand
|
|
onTextChanged: root.valueFdCommand = text
|
|
}
|
|
}
|
|
|
|
// Max Results Slider
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: Style.marginS
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
|
|
NText {
|
|
text: pluginApi?.tr("settings.maxResults.label")
|
|
font.pointSize: Style.fontSizeL
|
|
font.weight: Font.Medium
|
|
color: Color.mOnSurface
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
NText {
|
|
text: root.valueMaxResults === 0 ? pluginApi?.tr("settings.maxResults.unlimited") : root.valueMaxResults.toString()
|
|
font.pointSize: Style.fontSizeM
|
|
font.weight: Font.Medium
|
|
color: Color.mPrimary
|
|
}
|
|
}
|
|
|
|
NText {
|
|
text: pluginApi?.tr("settings.maxResults.description")
|
|
font.pointSize: Style.fontSizeS
|
|
color: Color.mOnSurfaceVariant
|
|
wrapMode: Text.WordWrap
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
NSlider {
|
|
Layout.fillWidth: true
|
|
from: 0
|
|
to: 1000
|
|
stepSize: 10
|
|
value: root.valueMaxResults
|
|
onMoved: root.valueMaxResults = Math.round(value)
|
|
}
|
|
}
|
|
|
|
function saveSettings() {
|
|
if (!pluginApi) {
|
|
Logger.e("FileSearch", "Cannot save settings: pluginApi is null");
|
|
return;
|
|
}
|
|
|
|
pluginApi.pluginSettings.showHidden = root.valueShowHidden;
|
|
pluginApi.pluginSettings.maxResults = root.valueMaxResults;
|
|
pluginApi.pluginSettings.fileOpener = root.valueFileOpener;
|
|
pluginApi.pluginSettings.searchDirectory = root.valueSearchDirectory;
|
|
pluginApi.pluginSettings.fdCommand = root.valueFdCommand;
|
|
pluginApi.saveSettings();
|
|
|
|
Logger.d("FileSearch", "Settings saved successfully");
|
|
}
|
|
}
|