import QtQuick import QtQuick.Layouts import qs import qs.services import qs.modules.common import qs.modules.common.widgets ContentPage { forceWidth: true ContentSection { title: Translation.tr("Audio") ConfigSwitch { text: Translation.tr("Earbang protection") checked: Config.options.audio.protection.enable onCheckedChanged: { Config.options.audio.protection.enable = checked; } StyledToolTip { content: Translation.tr("Prevents abrupt increments and restricts volume limit") } } ConfigRow { // uniform: true ConfigSpinBox { text: Translation.tr("Max allowed increase") value: Config.options.audio.protection.maxAllowedIncrease from: 0 to: 100 stepSize: 2 onValueChanged: { Config.options.audio.protection.maxAllowedIncrease = value; } } ConfigSpinBox { text: Translation.tr("Volume limit") value: Config.options.audio.protection.maxAllowed from: 0 to: 100 stepSize: 2 onValueChanged: { Config.options.audio.protection.maxAllowed = value; } } } } ContentSection { title: Translation.tr("AI") MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("System prompt") text: Config.options.ai.systemPrompt wrapMode: TextEdit.Wrap onTextChanged: { Qt.callLater(() => { Config.options.ai.systemPrompt = text; }); } } } ContentSection { title: Translation.tr("Battery") ConfigRow { uniform: true ConfigSpinBox { text: Translation.tr("Low warning") value: Config.options.battery.low from: 0 to: 100 stepSize: 5 onValueChanged: { Config.options.battery.low = value; } } ConfigSpinBox { text: Translation.tr("Critical warning") value: Config.options.battery.critical from: 0 to: 100 stepSize: 5 onValueChanged: { Config.options.battery.critical = value; } } } ConfigRow { uniform: true ConfigSwitch { text: Translation.tr("Automatic suspend") checked: Config.options.battery.automaticSuspend onCheckedChanged: { Config.options.battery.automaticSuspend = checked; } StyledToolTip { content: Translation.tr("Automatically suspends the system when battery is low") } } ConfigSpinBox { text: Translation.tr("Suspend at") value: Config.options.battery.suspend from: 0 to: 100 stepSize: 5 onValueChanged: { Config.options.battery.suspend = value; } } } } ContentSection { title: Translation.tr("Networking") MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("User agent (for services that require it)") text: Config.options.networking.userAgent wrapMode: TextEdit.Wrap onTextChanged: { Config.options.networking.userAgent = text; } } } ContentSection { title: Translation.tr("Resources") ConfigSpinBox { text: Translation.tr("Polling interval (ms)") value: Config.options.resources.updateInterval from: 100 to: 10000 stepSize: 100 onValueChanged: { Config.options.resources.updateInterval = value; } } } ContentSection { title: Translation.tr("Search") ConfigSwitch { text: Translation.tr("Use Levenshtein distance-based algorithm instead of fuzzy") checked: Config.options.search.sloppy onCheckedChanged: { Config.options.search.sloppy = checked; } StyledToolTip { content: Translation.tr("Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)") } } ContentSubsection { title: Translation.tr("Prefixes") ConfigRow { uniform: true MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("Action") text: Config.options.search.prefix.action wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.action = text; } } MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("Clipboard") text: Config.options.search.prefix.clipboard wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.clipboard = text; } } MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("Emojis") text: Config.options.search.prefix.emojis wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.emojis = text; } } } } ContentSubsection { title: Translation.tr("Web search") MaterialTextField { Layout.fillWidth: true placeholderText: Translation.tr("Base URL") text: Config.options.search.engineBaseUrl wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.engineBaseUrl = text; } } } } ContentSection { title: Translation.tr("Time") ContentSubsection { title: Translation.tr("Format") tooltip: "" ConfigSelectionArray { currentValue: Config.options.time.format configOptionName: "time.format" onSelected: newValue => { Config.options.time.format = newValue; } options: [ { displayName: Translation.tr("24h"), value: "hh:mm" }, { displayName: Translation.tr("12h am/pm"), value: "h:mm ap" }, { displayName: Translation.tr("12h AM/PM"), value: "h:mm AP" }, ] } } } }