File indexing completed on 2024-05-12 17:07:17
0001 /* 0002 SPDX-FileCopyrightText: 2010 Andriy Rysin <rysin@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QList> 0010 #include <QStringList> 0011 0012 #include <config-keyboard.h> 0013 0014 struct ConfigItem { 0015 QString name; 0016 QString description; 0017 }; 0018 0019 template<class T> 0020 inline T *findByName(QList<T *> list, QString name) 0021 { 0022 for (T *info : qAsConst(list)) { 0023 if (info->name == name) 0024 return info; 0025 } 0026 return nullptr; 0027 } 0028 0029 struct VariantInfo : public ConfigItem { 0030 QList<QString> languages; 0031 const bool fromExtras; 0032 0033 VariantInfo(bool fromExtras_) 0034 : fromExtras(fromExtras_) 0035 { 0036 } 0037 }; 0038 0039 struct LayoutInfo : public ConfigItem { 0040 QList<VariantInfo *> variantInfos; 0041 QList<QString> languages; 0042 const bool fromExtras; 0043 0044 // LayoutInfo() {} 0045 LayoutInfo(bool fromExtras_) 0046 : fromExtras(fromExtras_) 0047 { 0048 } 0049 ~LayoutInfo() 0050 { 0051 qDeleteAll(variantInfos); 0052 } 0053 0054 VariantInfo *getVariantInfo(const QString &variantName) const 0055 { 0056 return findByName(variantInfos, variantName); 0057 } 0058 0059 bool isLanguageSupportedByLayout(const QString &lang) const; 0060 bool isLanguageSupportedByDefaultVariant(const QString &lang) const; 0061 bool isLanguageSupportedByVariants(const QString &lang) const; 0062 bool isLanguageSupportedByVariant(const VariantInfo *variantInfo, const QString &lang) const; 0063 }; 0064 0065 struct ModelInfo : public ConfigItem { 0066 QString vendor; 0067 }; 0068 0069 struct OptionInfo : public ConfigItem { 0070 }; 0071 0072 struct OptionGroupInfo : public ConfigItem { 0073 QList<OptionInfo *> optionInfos; 0074 bool exclusive; 0075 0076 ~OptionGroupInfo() 0077 { 0078 qDeleteAll(optionInfos); 0079 } 0080 0081 const OptionInfo *getOptionInfo(const QString &optionName) const 0082 { 0083 return findByName(optionInfos, optionName); 0084 } 0085 }; 0086 0087 struct Rules { 0088 enum ExtrasFlag { NO_EXTRAS, READ_EXTRAS }; 0089 0090 static const char XKB_OPTION_GROUP_SEPARATOR; 0091 0092 QList<LayoutInfo *> layoutInfos; 0093 QList<ModelInfo *> modelInfos; 0094 QList<OptionGroupInfo *> optionGroupInfos; 0095 QString version; 0096 0097 Rules(); 0098 0099 ~Rules() 0100 { 0101 qDeleteAll(layoutInfos); 0102 qDeleteAll(modelInfos); 0103 qDeleteAll(optionGroupInfos); 0104 } 0105 0106 const LayoutInfo *getLayoutInfo(const QString &layoutName) const 0107 { 0108 return findByName(layoutInfos, layoutName); 0109 } 0110 0111 const OptionGroupInfo *getOptionGroupInfo(const QString &optionGroupName) const 0112 { 0113 return findByName(optionGroupInfos, optionGroupName); 0114 } 0115 0116 static Rules *readRules(ExtrasFlag extrasFlag); 0117 static Rules *readRules(Rules *rules, const QString &filename, bool fromExtras); 0118 static QString getRulesName(); 0119 static QString findXkbDir(); 0120 };