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 }