File indexing completed on 2024-05-12 05:35:41

0001 /*
0002     SPDX-FileCopyrightText: 2010 Andriy Rysin <rysin@kde.org>
0003     SPDX-FileCopyrightText: 2023 Harald Sitter <sitter@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "flags.h"
0009 
0010 #include <KLocalizedString>
0011 #include <KCountryFlagEmojiIconEngine>
0012 
0013 #include <QPainter>
0014 #include <QPixmap>
0015 #include <QStandardPaths>
0016 #include <QStringList>
0017 
0018 // for text handling
0019 #include "keyboard_config.h"
0020 #include "xkb_rules.h"
0021 
0022 QIcon Flags::getIcon(const QString &layout)
0023 {
0024     if (!iconMap.contains(layout)) {
0025         iconMap[layout] = createIcon(layout);
0026     }
0027     return iconMap[layout];
0028 }
0029 
0030 QIcon Flags::createIcon(const QString &layout)
0031 {
0032     return QIcon(new KCountryFlagEmojiIconEngine(getCountryFromLayoutName(layout)));
0033 }
0034 
0035 // static
0036 // const QStringList NON_COUNTRY_LAYOUTS = QString("ara,brai,epo,latam,mao").split(",");
0037 
0038 QString Flags::getCountryFromLayoutName(const QString &layout) const
0039 {
0040     QString countryCode = layout;
0041 
0042     if (countryCode == QLatin1String("nec_vndr/jp"))
0043         return QStringLiteral("jp");
0044 
0045     return countryCode;
0046 }
0047 
0048 // TODO: move this to some other class?
0049 
0050 QString Flags::getShortText(const LayoutUnit &layoutUnit, const KeyboardConfig &keyboardConfig)
0051 {
0052     if (layoutUnit.isEmpty())
0053         return QStringLiteral("--");
0054 
0055     QString layoutText = layoutUnit.layout();
0056 
0057     for (const LayoutUnit &lu : keyboardConfig.layouts) {
0058         if (layoutUnit.layout() == lu.layout() && layoutUnit.variant() == lu.variant()) {
0059             layoutText = lu.getDisplayName();
0060             break;
0061         }
0062     }
0063 
0064     // TODO: good autolabel
0065     //  if( layoutText == layoutUnit.layout && layoutUnit.getDisplayName() != layoutUnit.layout ) {
0066     //      layoutText = layoutUnit.getDisplayName();
0067     //  }
0068 
0069     return layoutText;
0070 }
0071 
0072 static QString getDisplayText(const QString &layout, const QString &variant, const Rules *rules)
0073 {
0074     if (variant.isEmpty())
0075         return layout;
0076     if (rules == nullptr || rules->version == QLatin1String("1.0"))
0077         return i18nc("layout - variant", "%1 - %2", layout, variant);
0078     return variant;
0079 }
0080 
0081 QString Flags::getLongText(const LayoutUnit &layoutUnit, const Rules *rules)
0082 {
0083     if (rules == nullptr) {
0084         return getDisplayText(layoutUnit.layout(), layoutUnit.variant(), rules);
0085     }
0086 
0087     QString layoutText = layoutUnit.layout();
0088     const LayoutInfo *layoutInfo = rules->getLayoutInfo(layoutUnit.layout());
0089     if (layoutInfo != nullptr) {
0090         layoutText = layoutInfo->description;
0091 
0092         if (!layoutUnit.variant().isEmpty()) {
0093             const VariantInfo *variantInfo = layoutInfo->getVariantInfo(layoutUnit.variant());
0094             QString variantText = variantInfo != nullptr ? variantInfo->description : layoutUnit.variant();
0095 
0096             layoutText = getDisplayText(layoutText, variantText, rules);
0097         }
0098     }
0099 
0100     return layoutText;
0101 }