Port SonnetConfigPage to FormCard

This commit is contained in:
Tobias Fella
2023-09-01 17:27:35 +02:00
parent 063056bebd
commit 43ecd188f1

View File

@@ -7,211 +7,198 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.sonnet 1.0 as Sonnet import org.kde.sonnet 1.0 as Sonnet
import org.kde.kirigamiaddons.labs.mobileform 0.1 as MobileForm import org.kde.kirigamiaddons.formcard 1.0 as FormCard
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
id: page id: root
topPadding: 0
leftPadding: 0
rightPadding: 0
ColumnLayout { FormCard.FormHeader {
spacing: 0 title: i18nc("@title", "Spellchecking")
MobileForm.FormHeader { }
Layout.fillWidth: true FormCard.FormCard {
title: i18n("Spellchecking") id: card
property Sonnet.Settings settings: Sonnet.Settings {
id: settings
} }
MobileForm.FormCard { FormCard.FormCheckDelegate {
id: card id: enable
Sonnet.Settings { checked: settings.checkerEnabledByDefault
id: settings text: i18n("Enable automatic spell checking")
onCheckedChanged: {
settings.checkerEnabledByDefault = checked;
settings.save();
} }
}
Layout.fillWidth: true FormCard.FormDelegateSeparator { below: enable; above: skipUppercase }
contentItem: ColumnLayout { FormCard.FormCheckDelegate {
spacing: 0 id: skipUppercase
MobileForm.FormCheckDelegate { checked: settings.skipUppercase
id: enable text: i18n("Ignore uppercase words")
checked: settings.checkerEnabledByDefault onCheckedChanged: {
text: i18n("Enable automatic spell checking") settings.skipUppercase = checked;
onCheckedChanged: { settings.save();
settings.checkerEnabledByDefault = checked; }
settings.save(); }
}
FormCard.FormDelegateSeparator { below: skipUppercase; above: skipRunTogether }
FormCard.FormCheckDelegate {
id: skipRunTogether
checked: settings.skipRunTogether
text: i18n("Ignore hyphenated words")
onCheckedChanged: {
settings.skipRunTogether = checked;
settings.save();
}
}
FormCard.FormDelegateSeparator { below: skipRunTogether; above: autodetectLanguageCheckbox }
FormCard.FormCheckDelegate {
id: autodetectLanguageCheckbox
checked: settings.autodetectLanguage
text: i18n("Detect language automatically")
onCheckedChanged: {
settings.autodetectLanguage = checked;
settings.save();
}
}
FormCard.FormDelegateSeparator { below: autodetectLanguageCheckbox; above: selectedDefaultLanguage }
FormCard.FormComboBoxDelegate {
id: selectedDefaultLanguage
text: i18n("Selected default language:")
model: isEmpty ? [{"display": i18n("None")}] : settings.dictionaryModel
textRole: "display"
displayMode: Kirigami.Settings.isMobile ? FormCard.FormComboBoxDelegate.Dialog : FormCard.FormComboBoxDelegate.Page
valueRole: "languageCode"
property bool isEmpty: false
Component.onCompleted: {
if (settings.dictionaryModel.rowCount() === 0) {
isEmpty = true;
} else {
currentIndex = indexOfValue(settings.defaultLanguage);
} }
}
onActivated: settings.defaultLanguage = currentValue;
}
MobileForm.FormDelegateSeparator { below: enable; above: skipUppercase } FormCard.FormDelegateSeparator { below: selectedDefaultLanguage; above: spellCheckingLanguage }
MobileForm.FormCheckDelegate { FormCard.FormButtonDelegate {
id: skipUppercase id: spellCheckingLanguage
checked: settings.skipUppercase text: i18n("Additional spell checking languages")
text: i18n("Ignore uppercase words") description: i18n("%1 will provide spell checking and suggestions for the languages listed here when autodetection is enabled.", Qt.application.displayName)
onCheckedChanged: { enabled: autodetectLanguageCheckbox.checked
settings.skipUppercase = checked; onClicked: pageStack.pushDialogLayer(spellCheckingLanguageList, {}, {
settings.save(); width: pageStack.width - Kirigami.Units.gridUnit * 5,
} height: pageStack.height - Kirigami.Units.gridUnit * 5,
} })
}
MobileForm.FormDelegateSeparator { below: skipUppercase; above: skipRunTogether } FormCard.FormDelegateSeparator { below: spellCheckingLanguageList; above: personalDictionary }
MobileForm.FormCheckDelegate { FormCard.FormButtonDelegate {
id: skipRunTogether id: personalDictionary
checked: settings.skipRunTogether text: i18n("Open Personal Dictionary")
text: i18n("Ignore hyphenated words") onClicked: pageStack.pushDialogLayer(dictionaryPage, {}, {
onCheckedChanged: { width: pageStack.width - Kirigami.Units.gridUnit * 5,
settings.skipRunTogether = checked; height: pageStack.height - Kirigami.Units.gridUnit * 5,
settings.save(); })
} }
}
MobileForm.FormDelegateSeparator { below: skipRunTogether; above: autodetectLanguageCheckbox } property Component spellCheckingLanguageList: Component {
id: spellCheckingLanguageList
MobileForm.FormCheckDelegate { Kirigami.ScrollablePage {
id: autodetectLanguageCheckbox id: scroll
checked: settings.autodetectLanguage title: i18nc("@title:window", "Spell checking languages")
text: i18n("Detect language automatically") ListView {
onCheckedChanged: { clip: true
settings.autodetectLanguage = checked; model: settings.dictionaryModel
settings.save(); delegate: Kirigami.CheckableListItem {
} label: model.display
} action: Kirigami.Action {
onTriggered: model.checked = checked
MobileForm.FormDelegateSeparator { below: autodetectLanguageCheckbox; above: selectedDefaultLanguage }
MobileForm.FormComboBoxDelegate {
id: selectedDefaultLanguage
text: i18n("Selected default language:")
model: isEmpty ? [{"display": i18n("None")}] : settings.dictionaryModel
textRole: "display"
displayMode: Kirigami.Settings.isMobile ? MobileForm.FormComboBoxDelegate.Dialog : MobileForm.FormComboBoxDelegate.Page
valueRole: "languageCode"
property bool isEmpty: false
Component.onCompleted: {
if (settings.dictionaryModel.rowCount() === 0) {
isEmpty = true;
} else {
currentIndex = indexOfValue(settings.defaultLanguage);
} }
} Accessible.description: model.isDefault ? i18n("Default Language") : ''
onActivated: settings.defaultLanguage = currentValue; checked: model.checked
} trailing: Kirigami.Icon {
source: "favorite"
MobileForm.FormDelegateSeparator { below: selectedDefaultLanguage; above: spellCheckingLanguage } visible: model.isDefault
HoverHandler {
MobileForm.FormButtonDelegate { id: hover
id: spellCheckingLanguage }
text: i18n("Additional spell checking languages") QQC2.ToolTip {
description: i18n("%1 will provide spell checking and suggestions for the languages listed here when autodetection is enabled.", Qt.application.displayName) visible: hover.hovered
enabled: autodetectLanguageCheckbox.checked text: i18n("Default Language")
onClicked: pageStack.pushDialogLayer(spellCheckingLanguageList, {}, {
width: pageStack.width - Kirigami.Units.gridUnit * 5,
height: pageStack.height - Kirigami.Units.gridUnit * 5,
})
}
MobileForm.FormDelegateSeparator { below: spellCheckingLanguageList; above: personalDictionary }
MobileForm.FormButtonDelegate {
id: personalDictionary
text: i18n("Open Personal Dictionary")
onClicked: pageStack.pushDialogLayer(dictionaryPage, {}, {
width: pageStack.width - Kirigami.Units.gridUnit * 5,
height: pageStack.height - Kirigami.Units.gridUnit * 5,
})
}
Component {
id: spellCheckingLanguageList
Kirigami.ScrollablePage {
id: scroll
title: i18nc("@title:window", "Spell checking languages")
ListView {
clip: true
model: settings.dictionaryModel
delegate: Kirigami.CheckableListItem {
label: model.display
action: Kirigami.Action {
onTriggered: model.checked = checked
}
Accessible.description: model.isDefault ? i18n("Default Language") : ''
checked: model.checked
trailing: Kirigami.Icon {
source: "favorite"
visible: model.isDefault
HoverHandler {
id: hover
}
QQC2.ToolTip {
visible: hover.hovered
text: i18n("Default Language")
}
}
} }
} }
} }
} }
} }
Component {
id: dictionaryPage
Kirigami.ScrollablePage {
title: i18n("Spell checking dictionary")
footer: QQC2.ToolBar {
contentItem: RowLayout {
QQC2.TextField {
id: dictionaryField
Layout.fillWidth: true
Accessible.name: placeholderText
placeholderText: i18n("Add a new word to your personal dictionary…")
}
QQC2.Button {
text: i18nc("@action:button", "Add word")
icon.name: "list-add"
enabled: dictionaryField.text.length > 0
onClicked: {
add(dictionaryField.text);
dictionaryField.clear();
if (instantApply) {
settings.save();
}
}
Layout.rightMargin: Kirigami.Units.largeSpacing
}
}
}
ListView {
model: settings.currentIgnoreList
delegate: Kirigami.BasicListItem {
label: model.modelData
trailing: QQC2.ToolButton {
icon.name: "delete"
onClicked: {
remove(modelData)
if (instantApply) {
settings.save();
}
}
QQC2.ToolTip {
text: i18n("Delete word")
}
}
}
}
}
}
function add(word: string) {
const dictionary = settings.currentIgnoreList;
dictionary.push(word);
settings.currentIgnoreList = dictionary;
}
function remove(word: string) {
settings.currentIgnoreList = settings.currentIgnoreList.filter((value, _, _) => {
return value !== word;
});
}
} }
} }
Component {
id: dictionaryPage
Kirigami.ScrollablePage {
title: i18n("Spell checking dictionary")
footer: QQC2.ToolBar {
contentItem: RowLayout {
QQC2.TextField {
id: dictionaryField
Layout.fillWidth: true
Accessible.name: placeholderText
placeholderText: i18n("Add a new word to your personal dictionary…")
}
QQC2.Button {
text: i18nc("@action:button", "Add word")
icon.name: "list-add"
enabled: dictionaryField.text.length > 0
onClicked: {
add(dictionaryField.text);
dictionaryField.clear();
if (instantApply) {
settings.save();
}
}
Layout.rightMargin: Kirigami.Units.largeSpacing
}
}
}
ListView {
model: settings.currentIgnoreList
delegate: Kirigami.BasicListItem {
label: model.modelData
trailing: QQC2.ToolButton {
icon.name: "delete"
onClicked: {
remove(modelData)
if (instantApply) {
settings.save();
}
}
QQC2.ToolTip {
text: i18n("Delete word")
}
}
}
}
}
}
function add(word: string) {
const dictionary = settings.currentIgnoreList;
dictionary.push(word);
settings.currentIgnoreList = dictionary;
}
function remove(word: string) {
settings.currentIgnoreList = settings.currentIgnoreList.filter((value, _, _) => {
return value !== word;
});
}
} }