Warning, /network/neochat/src/qml/SonnetConfigPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003
0004 import QtQml
0005 import QtQuick
0006 import QtQuick.Controls as QQC2
0007 import QtQuick.Layouts
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.sonnet as Sonnet
0010 import org.kde.kirigamiaddons.formcard as FormCard
0011 import org.kde.kirigamiaddons.delegates as Delegates
0012
0013 Kirigami.ScrollablePage {
0014 id: root
0015
0016 FormCard.FormHeader {
0017 title: i18nc("@title", "Spellchecking")
0018 }
0019 FormCard.FormCard {
0020 id: card
0021 property Sonnet.Settings settings: Sonnet.Settings {
0022 id: settings
0023 }
0024 FormCard.FormCheckDelegate {
0025 id: enable
0026 checked: settings.checkerEnabledByDefault
0027 text: i18n("Enable automatic spell checking")
0028 onCheckedChanged: {
0029 settings.checkerEnabledByDefault = checked;
0030 settings.save();
0031 }
0032 }
0033
0034 FormCard.FormDelegateSeparator {
0035 below: enable
0036 above: skipUppercase
0037 }
0038
0039 FormCard.FormCheckDelegate {
0040 id: skipUppercase
0041 checked: settings.skipUppercase
0042 text: i18n("Ignore uppercase words")
0043 onCheckedChanged: {
0044 settings.skipUppercase = checked;
0045 settings.save();
0046 }
0047 }
0048
0049 FormCard.FormDelegateSeparator {
0050 below: skipUppercase
0051 above: skipRunTogether
0052 }
0053
0054 FormCard.FormCheckDelegate {
0055 id: skipRunTogether
0056 checked: settings.skipRunTogether
0057 text: i18n("Ignore hyphenated words")
0058 onCheckedChanged: {
0059 settings.skipRunTogether = checked;
0060 settings.save();
0061 }
0062 }
0063
0064 FormCard.FormDelegateSeparator {
0065 below: skipRunTogether
0066 above: autodetectLanguageCheckbox
0067 }
0068
0069 FormCard.FormCheckDelegate {
0070 id: autodetectLanguageCheckbox
0071 checked: settings.autodetectLanguage
0072 text: i18n("Detect language automatically")
0073 onCheckedChanged: {
0074 settings.autodetectLanguage = checked;
0075 settings.save();
0076 }
0077 }
0078
0079 FormCard.FormDelegateSeparator {
0080 below: autodetectLanguageCheckbox
0081 above: selectedDefaultLanguage
0082 }
0083
0084 FormCard.FormComboBoxDelegate {
0085 id: selectedDefaultLanguage
0086 text: i18n("Selected default language:")
0087 model: isEmpty ? [
0088 {
0089 "display": i18n("None")
0090 }
0091 ] : settings.dictionaryModel
0092 textRole: "display"
0093 displayMode: Kirigami.Settings.isMobile ? FormCard.FormComboBoxDelegate.Dialog : FormCard.FormComboBoxDelegate.Page
0094 valueRole: "languageCode"
0095 property bool isEmpty: false
0096 Component.onCompleted: {
0097 if (settings.dictionaryModel.rowCount() === 0) {
0098 isEmpty = true;
0099 } else {
0100 currentIndex = indexOfValue(settings.defaultLanguage);
0101 }
0102 }
0103 onActivated: settings.defaultLanguage = currentValue
0104 }
0105
0106 FormCard.FormDelegateSeparator {
0107 below: selectedDefaultLanguage
0108 above: spellCheckingLanguage
0109 }
0110
0111 FormCard.FormButtonDelegate {
0112 id: spellCheckingLanguage
0113 text: i18n("Additional spell checking languages")
0114 description: i18n("%1 will provide spell checking and suggestions for the languages listed here when autodetection is enabled.", Qt.application.displayName)
0115 enabled: autodetectLanguageCheckbox.checked
0116 onClicked: pageStack.pushDialogLayer(spellCheckingLanguageList, {}, {
0117 width: pageStack.width - Kirigami.Units.gridUnit * 5,
0118 height: pageStack.height - Kirigami.Units.gridUnit * 5
0119 })
0120 }
0121
0122 FormCard.FormDelegateSeparator {
0123 below: spellCheckingLanguageList
0124 above: personalDictionary
0125 }
0126
0127 FormCard.FormButtonDelegate {
0128 id: personalDictionary
0129 text: i18n("Open Personal Dictionary")
0130 onClicked: pageStack.pushDialogLayer(dictionaryPage, {}, {
0131 width: pageStack.width - Kirigami.Units.gridUnit * 5,
0132 height: pageStack.height - Kirigami.Units.gridUnit * 5
0133 })
0134 }
0135
0136 property Component spellCheckingLanguageList: Component {
0137 id: spellCheckingLanguageList
0138 Kirigami.ScrollablePage {
0139 id: scroll
0140 title: i18nc("@title:window", "Spell checking languages")
0141 ListView {
0142 clip: true
0143 model: settings.dictionaryModel
0144 delegate: QQC2.CheckDelegate {
0145 onClicked: model.checked = checked
0146 Accessible.description: model.isDefault ? i18n("Default Language") : ''
0147 checked: model.checked
0148 width: scroll.width
0149 contentItem: RowLayout {
0150 QQC2.Label {
0151 id: label
0152 Layout.fillWidth: true
0153 text: model.display
0154 }
0155 Kirigami.Icon {
0156 source: "favorite"
0157 Layout.rightMargin: Kirigami.Units.largeSpacing * 2
0158 visible: model.isDefault
0159 HoverHandler {
0160 id: hover
0161 }
0162 QQC2.ToolTip {
0163 visible: hover.hovered
0164 text: i18n("Default Language")
0165 }
0166 }
0167 }
0168 }
0169 }
0170 }
0171 }
0172 }
0173
0174 Component {
0175 id: dictionaryPage
0176 Kirigami.ScrollablePage {
0177 title: i18n("Spell checking dictionary")
0178 footer: QQC2.ToolBar {
0179 contentItem: RowLayout {
0180 QQC2.TextField {
0181 id: dictionaryField
0182 Layout.fillWidth: true
0183 Accessible.name: placeholderText
0184 placeholderText: i18n("Add a new word to your personal dictionary…")
0185 }
0186 QQC2.Button {
0187 text: i18nc("@action:button", "Add word")
0188 icon.name: "list-add"
0189 enabled: dictionaryField.text.length > 0
0190 onClicked: {
0191 add(dictionaryField.text);
0192 dictionaryField.clear();
0193 if (instantApply) {
0194 settings.save();
0195 }
0196 }
0197 Layout.rightMargin: Kirigami.Units.largeSpacing
0198 }
0199 }
0200 }
0201 ListView {
0202 topMargin: Math.round(Kirigami.Units.smallSpacing / 2)
0203 bottomMargin: Math.round(Kirigami.Units.smallSpacing / 2)
0204
0205 model: settings.currentIgnoreList
0206 delegate: Delegates.RoundedItemDelegate {
0207 id: wordDelegate
0208
0209 required property var modelData
0210
0211 text: modelData
0212
0213 contentItem: RowLayout {
0214 spacing: Kirigami.Units.smallSpacing
0215
0216 Delegates.DefaultContentItem {
0217 itemDelegate: wordDelegate
0218 Layout.fillWidth: true
0219 }
0220
0221 QQC2.ToolButton {
0222 text: i18nc("@action:button", "Delete word")
0223 icon.name: "delete"
0224 display: QQC2.ToolButton.IconOnly
0225 onClicked: {
0226 remove(wordDelegate.modelData);
0227 if (instantApply) {
0228 settings.save();
0229 }
0230 }
0231
0232 QQC2.ToolTip.text: text
0233 QQC2.ToolTip.visible: hovered
0234 QQC2.ToolTip.delay: Kirigami.ToolTip.toolTipDelay
0235 }
0236 }
0237 }
0238 }
0239 }
0240 }
0241
0242 function add(word: string) {
0243 const dictionary = settings.currentIgnoreList;
0244 dictionary.push(word);
0245 settings.currentIgnoreList = dictionary;
0246 }
0247
0248 function remove(word: string) {
0249 settings.currentIgnoreList = settings.currentIgnoreList.filter((value, _, _) => {
0250 return value !== word;
0251 });
0252 }
0253 }