Warning, /graphics/koko/src/qml/SettingsPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2021 Mikel Johnson <mikel5764@gmail.com> 0002 // SPDX-FileCopyrightText: 2023 Carl Schwan <carlschwan@kde.org> 0003 // SPDX-License-Identifier: LGPL-2.0-or-later 0004 0005 import QtQuick 2.15 0006 import QtQuick.Controls 2.15 as QQC2 0007 import org.kde.kirigami 2.18 as Kirigami 0008 import QtQuick.Layouts 1.15 0009 import org.kde.kirigamiaddons.formcard 1.0 as FormCard 0010 0011 Kirigami.PageRow { 0012 id: settingsPage 0013 0014 globalToolBar.style: Kirigami.ApplicationHeaderStyle.ToolBar 0015 0016 initialPage: FormCard.FormCardPage { 0017 title: i18nc("@title:window", "Settings") 0018 0019 FormCard.FormHeader { 0020 title: i18n("General") 0021 } 0022 0023 FormCard.FormCard { 0024 FormCard.AbstractFormDelegate { 0025 Layout.fillWidth: true 0026 contentItem: ColumnLayout { 0027 QQC2.Label { 0028 text: i18n("Thumbnails size:") 0029 Layout.fillWidth: true 0030 } 0031 QQC2.Slider { 0032 Layout.fillWidth: true 0033 from: Kirigami.Units.gridUnit * 4 0034 to: Kirigami.Units.gridUnit * 8 0035 value: kokoConfig.iconSize 0036 onMoved: kokoConfig.iconSize = value; 0037 } 0038 } 0039 } 0040 } 0041 0042 FormCard.FormHeader { 0043 title: i18nc("@title:group", "Slideshow settings:") 0044 visible: !Kirigami.Settings.isMobile 0045 } 0046 0047 FormCard.FormCard { 0048 visible: !Kirigami.Settings.isMobile 0049 FormCard.FormCheckDelegate { 0050 id: randomizeImagesCheckbox 0051 text: i18nc("@option:check", "Randomize") 0052 checked: kokoConfig.randomizeImages 0053 onCheckedChanged: kokoConfig.randomizeImages = checked 0054 } 0055 0056 FormCard.FormDelegateSeparator { above: randomizeImagesCheckbox} 0057 0058 FormCard.AbstractFormDelegate { 0059 Layout.fillWidth: true 0060 background: Item {} 0061 contentItem: RowLayout { 0062 QQC2.Label { 0063 text: i18nc("@label:spinbox Slideshow image changing interval", "Slideshow interval:") 0064 Layout.fillWidth: true 0065 } 0066 QQC2.SpinBox { 0067 id: intervalSpinBox 0068 from: 1 0069 // limited to hundreds for now because I don't want 0070 // to deal with regexing for locale formatted numbers 0071 to: 999 0072 value: kokoConfig.nextImageInterval 0073 editable: true 0074 textFromValue: (value) => i18ncp("Slideshow image changing interval", 0075 "1 second", "%1 seconds", value) 0076 valueFromText: (text) => { 0077 const match = text.match(/\d{1,3}/) 0078 return match !== null ? match[0] : intervalSpinBox.value 0079 } 0080 TextMetrics { 0081 id: intervalMetrics 0082 text: intervalSpinBox.textFromValue(intervalSpinBox.to) 0083 } 0084 wheelEnabled: true 0085 contentItem: QQC2.TextField { 0086 property int oldCursorPosition: cursorPosition 0087 implicitWidth: intervalMetrics.width + leftPadding + rightPadding 0088 implicitHeight: Math.ceil(contentHeight) + topPadding + bottomPadding 0089 palette: parent.palette 0090 leftPadding: parent.spacing 0091 rightPadding: parent.spacing 0092 topPadding: 0 0093 bottomPadding: 0 0094 font: parent.font 0095 color: palette.text 0096 selectionColor: palette.highlight 0097 selectedTextColor: palette.highlightedText 0098 horizontalAlignment: Qt.AlignHCenter 0099 verticalAlignment: Qt.AlignVCenter 0100 readOnly: !parent.editable 0101 validator: parent.validator 0102 inputMethodHints: parent.inputMethodHints 0103 selectByMouse: true 0104 background: null 0105 // Trying to mimic some of QSpinBox's behavior with suffixes 0106 onTextChanged: if (!inputMethodComposing) { 0107 const valueText = parent.valueFromText(text).toString() 0108 const valueIndex = parent.displayText.indexOf(valueText) 0109 if (valueIndex >= 0) { 0110 console.log(valueIndex, cursorPosition) 0111 cursorPosition = Math.min(Math.max(valueIndex, oldCursorPosition), valueIndex + valueText.length) 0112 } 0113 } 0114 Component.onCompleted: oldCursorPosition = cursorPosition 0115 } 0116 // Can't just use a binding because modifying the text 0117 // elsewhere will break bindings. 0118 onValueChanged: { 0119 contentItem.oldCursorPosition = contentItem.cursorPosition 0120 contentItem.text = displayText 0121 } 0122 onValueModified: kokoConfig.nextImageInterval = value 0123 } 0124 } 0125 } 0126 } 0127 0128 FormCard.FormCard { 0129 Layout.topMargin: Kirigami.Units.gridUnit 0130 FormCard.FormButtonDelegate { 0131 text: i18n("About Koko") 0132 onClicked: pageStack.layers.push(Qt.resolvedUrl("AboutPage.qml")); 0133 0134 Component { 0135 id: aboutPage 0136 FormCard.AboutPage { 0137 aboutData: About 0138 } 0139 } 0140 } 0141 } 0142 } 0143 }