You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
6.9 KiB
204 lines
6.9 KiB
/* |
|
SPDX-FileCopyrightLabel: 2021 Han Young <hanyoung@protonmail.com> |
|
SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org> |
|
SPDX-FileCopyrightText: 2018 Eike Hein <hein@kde.org> |
|
SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org> |
|
SPDX-License-Identifier: LGPL-3.0-or-later |
|
*/ |
|
import QtQuick 2.15 |
|
import QtQuick.Controls 2.15 as QQC2 |
|
import QtQuick.Layouts 1.15 |
|
|
|
import org.kde.kirigami 2.15 as Kirigami |
|
import org.kde.kcm 1.2 as KCM |
|
import kcmregionandlang 1.0 |
|
|
|
KCM.ScrollViewKCM { |
|
property int replaceLangIndex: -1 |
|
implicitHeight: languageListView.height |
|
id: languageSelectPage |
|
title: i18n("Language") |
|
LanguageListModel { |
|
id: languageListModel |
|
Component.onCompleted: { |
|
languageListModel.setRegionAndLangSettings(kcm.settings); |
|
} |
|
} |
|
header: ColumnLayout { |
|
spacing: Kirigami.Units.largeSpacing |
|
|
|
Kirigami.InlineMessage { |
|
text: i18n("Putting American English above other languages will cause undesired behavior in some applications. If you would like your system to use American English, remove all other languages.") |
|
Layout.fillWidth: true |
|
type: Kirigami.MessageType.Error |
|
visible: languageListModel.selectedLanguageModel.shouldWarnMultipleLang |
|
} |
|
|
|
Kirigami.InlineMessage { |
|
id: unsupportedLanguageMsg |
|
text: i18nc("Error message, %1 is the language name", "The language \"%1\" is unsupported", languageListModel.selectedLanguageModel.unsupportedLanguage) |
|
Layout.fillWidth: true |
|
type: Kirigami.MessageType.Error |
|
visible: languageListModel.selectedLanguageModel.unsupportedLanguage.length > 0 |
|
} |
|
|
|
QQC2.Label { |
|
horizontalAlignment: Qt.AlignHCenter |
|
wrapMode: Text.Wrap |
|
Layout.fillWidth: true |
|
text: i18n("Add languages in the order you want to see them in your applications.") |
|
} |
|
} |
|
|
|
Component { |
|
id: languagesListItemComponent |
|
Item { |
|
width: ListView.view.width |
|
height: listItem.implicitHeight |
|
|
|
Kirigami.SwipeListItem { |
|
id: listItem |
|
|
|
contentItem: RowLayout { |
|
Kirigami.ListItemDragHandle { |
|
listItem: listItem |
|
listView: languageListView |
|
visible: languageListView.count > 1 |
|
onMoveRequested: { |
|
languageListModel.selectedLanguageModel.move(oldIndex, newIndex); |
|
} |
|
} |
|
|
|
QQC2.Label { |
|
Layout.alignment: Qt.AlignLeft |
|
Layout.fillWidth: true |
|
text: model.display |
|
|
|
color: listItem.checked || (listItem.pressed && !listItem.checked && !listItem.sectionDelegate) ? listItem.activeTextColor : listItem.textColor; |
|
} |
|
|
|
QQC2.Button { |
|
Layout.alignment: Qt.AlignRight |
|
visible: languageListView.count <= 1 |
|
text: i18nc("@info:tooltip", "Change Language") |
|
icon.name: "configure" |
|
onClicked: { |
|
replaceLangIndex = index; |
|
addLanguagesSheet.titleText = i18nc("@title:window", "Change Language"); |
|
addLanguagesSheet.open(); |
|
} |
|
} |
|
} |
|
|
|
actions: [ |
|
Kirigami.Action { |
|
enabled: index > 0 |
|
visible: languageListView.count > 1 |
|
iconName: "go-top" |
|
tooltip: i18nc("@info:tooltip", "Move to top") |
|
onTriggered: languageListModel.selectedLanguageModel.move(index, 0) |
|
}, |
|
Kirigami.Action { |
|
visible: languageListView.count > 1 |
|
iconName: "edit-delete" |
|
tooltip: i18nc("@info:tooltip", "Remove") |
|
onTriggered: languageListModel.selectedLanguageModel.remove(index); |
|
}] |
|
} |
|
} |
|
} |
|
view: ListView { |
|
id: languageListView |
|
model: languageListModel.selectedLanguageModel |
|
delegate: languagesListItemComponent |
|
Kirigami.PlaceholderMessage { |
|
anchors.centerIn: parent |
|
visible: languageListView.count === 0 |
|
text: i18nc("@info:placeholder", "No Language Configured") |
|
} |
|
} |
|
|
|
Component { |
|
id: addLanguageItemComponent |
|
|
|
Kirigami.BasicListItem { |
|
id: languageItem |
|
|
|
width: availableLanguagesList.width |
|
reserveSpaceForIcon: false |
|
|
|
label: model.nativeName |
|
action: Kirigami.Action { |
|
onTriggered: { |
|
if (replaceLangIndex >= 0) { |
|
languageListModel.selectedLanguageModel.replaceLanguage(replaceLangIndex, model.languageCode); |
|
replaceLangIndex = -1; |
|
} else { |
|
languageListModel.selectedLanguageModel.addLanguage(model.languageCode); |
|
} |
|
addLanguagesSheet.close(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
Kirigami.OverlaySheet { |
|
id: addLanguagesSheet |
|
property string titleText: i18nc("@title:window", "Add Languages") |
|
parent: languageSelectPage |
|
|
|
topPadding: 0 |
|
leftPadding: 0 |
|
rightPadding: 0 |
|
bottomPadding: 0 |
|
|
|
title: titleText |
|
|
|
ListView { |
|
id: availableLanguagesList |
|
implicitWidth: 18 * Kirigami.Units.gridUnit |
|
model: languageListModel |
|
delegate: addLanguageItemComponent |
|
} |
|
onSheetOpenChanged: { |
|
if (!sheetOpen) { |
|
titleText = i18nc("@title:window", "Add Languages"); |
|
} |
|
} |
|
} |
|
footer: ColumnLayout { |
|
QQC2.Button { |
|
Layout.alignment: Qt.AlignRight |
|
enabled: availableLanguagesList.count |
|
|
|
text: i18nc("@action:button", "Add More…") |
|
|
|
onClicked: { |
|
addLanguagesSheet.open(); |
|
replaceLangIndex = -1; |
|
} |
|
|
|
checkable: true |
|
checked: addLanguagesSheet.sheetOpen |
|
} |
|
RowLayout { |
|
Layout.alignment: Qt.AlignHCenter |
|
QQC2.Label { |
|
text: languageListModel.numberExample |
|
} |
|
QQC2.Label { |
|
text: languageListModel.currencyExample |
|
} |
|
} |
|
|
|
QQC2.Label { |
|
Layout.alignment: Qt.AlignHCenter |
|
text: languageListModel.metric |
|
} |
|
|
|
QQC2.Label { |
|
Layout.alignment: Qt.AlignHCenter |
|
text: languageListModel.timeExample |
|
} |
|
} |
|
}
|
|
|