3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-01-31 07:12:18 +00:00
Brooklyn/plasma/kcms/keyboard/xkb_rules.h
Scare Crowe d2ebfd0519 QortalOS Titan 5.60.12
Screw the description like that inbred T3Q
2022-03-05 21:17:59 +05:00

125 lines
2.7 KiB
C++

/*
SPDX-FileCopyrightText: 2010 Andriy Rysin <rysin@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef XKB_RULES_H_
#define XKB_RULES_H_
#include <QList>
#include <QStringList>
#include <QXmlDefaultHandler>
#include <config-keyboard.h>
struct ConfigItem {
QString name;
QString description;
};
template<class T>
inline T *findByName(QList<T *> list, QString name)
{
for (T *info : qAsConst(list)) {
if (info->name == name)
return info;
}
return nullptr;
}
struct VariantInfo : public ConfigItem {
QList<QString> languages;
const bool fromExtras;
VariantInfo(bool fromExtras_)
: fromExtras(fromExtras_)
{
}
};
struct LayoutInfo : public ConfigItem {
QList<VariantInfo *> variantInfos;
QList<QString> languages;
const bool fromExtras;
// LayoutInfo() {}
LayoutInfo(bool fromExtras_)
: fromExtras(fromExtras_)
{
}
~LayoutInfo()
{
qDeleteAll(variantInfos);
}
VariantInfo *getVariantInfo(const QString &variantName) const
{
return findByName(variantInfos, variantName);
}
bool isLanguageSupportedByLayout(const QString &lang) const;
bool isLanguageSupportedByDefaultVariant(const QString &lang) const;
bool isLanguageSupportedByVariants(const QString &lang) const;
bool isLanguageSupportedByVariant(const VariantInfo *variantInfo, const QString &lang) const;
};
struct ModelInfo : public ConfigItem {
QString vendor;
};
struct OptionInfo : public ConfigItem {
};
struct OptionGroupInfo : public ConfigItem {
QList<OptionInfo *> optionInfos;
bool exclusive;
~OptionGroupInfo()
{
qDeleteAll(optionInfos);
}
const OptionInfo *getOptionInfo(const QString &optionName) const
{
return findByName(optionInfos, optionName);
}
};
struct Rules {
enum ExtrasFlag { NO_EXTRAS, READ_EXTRAS };
static const char XKB_OPTION_GROUP_SEPARATOR;
QList<LayoutInfo *> layoutInfos;
QList<ModelInfo *> modelInfos;
QList<OptionGroupInfo *> optionGroupInfos;
QString version;
Rules();
~Rules()
{
qDeleteAll(layoutInfos);
qDeleteAll(modelInfos);
qDeleteAll(optionGroupInfos);
}
const LayoutInfo *getLayoutInfo(const QString &layoutName) const
{
return findByName(layoutInfos, layoutName);
}
const OptionGroupInfo *getOptionGroupInfo(const QString &optionGroupName) const
{
return findByName(optionGroupInfos, optionGroupName);
}
static Rules *readRules(ExtrasFlag extrasFlag);
static Rules *readRules(Rules *rules, const QString &filename, bool fromExtras);
static QString getRulesName();
static QString findXkbDir();
};
#endif /* XKB_RULES_H_ */