kwin/kcmkwin/kwindecoration/utils.cpp
Vlad Zahorodnii 1fb9f6f13a Switch to SPDX license markers
The main advantage of SPDX license identifiers over the traditional
license headers is that it's more difficult to overlook inappropriate
licenses for kwin, for example GPL 3. We also don't have to copy a
lot of boilerplate text.

In order to create this change, I ran licensedigger -r -c from the
toplevel source directory.
2020-08-07 19:57:56 +00:00

109 lines
3.8 KiB
C++

/*
* SPDX-FileCopyrightText: 2019 Valerio Pilo <vpilo@coldshock.net>
*
* SPDX-License-Identifier: LGPL-2.0-only
*/
#include "utils.h"
#include <KConfigGroup>
#include <KLocalizedString>
namespace
{
const QMap<QString, KDecoration2::BorderSize> s_borderSizes {
{ QStringLiteral("None"), KDecoration2::BorderSize::None },
{ QStringLiteral("NoSides"), KDecoration2::BorderSize::NoSides },
{ QStringLiteral("Tiny"), KDecoration2::BorderSize::Tiny },
{ QStringLiteral("Normal"), KDecoration2::BorderSize::Normal },
{ QStringLiteral("Large"), KDecoration2::BorderSize::Large },
{ QStringLiteral("VeryLarge"), KDecoration2::BorderSize::VeryLarge },
{ QStringLiteral("Huge"), KDecoration2::BorderSize::Huge },
{ QStringLiteral("VeryHuge"), KDecoration2::BorderSize::VeryHuge },
{ QStringLiteral("Oversized"), KDecoration2::BorderSize::Oversized }
};
const QMap<KDecoration2::BorderSize, QString> s_borderSizeNames {
{ KDecoration2::BorderSize::None, i18n("No Borders") },
{ KDecoration2::BorderSize::NoSides, i18n("No Side Borders") },
{ KDecoration2::BorderSize::Tiny, i18n("Tiny") },
{ KDecoration2::BorderSize::Normal, i18n("Normal") },
{ KDecoration2::BorderSize::Large, i18n("Large") },
{ KDecoration2::BorderSize::VeryLarge, i18n("Very Large") },
{ KDecoration2::BorderSize::Huge, i18n("Huge") },
{ KDecoration2::BorderSize::VeryHuge, i18n("Very Huge") },
{ KDecoration2::BorderSize::Oversized, i18n("Oversized") }
};
const QHash<KDecoration2::DecorationButtonType, QChar> s_buttonNames {
{KDecoration2::DecorationButtonType::Menu, QChar('M') },
{KDecoration2::DecorationButtonType::ApplicationMenu, QChar('N') },
{KDecoration2::DecorationButtonType::OnAllDesktops, QChar('S') },
{KDecoration2::DecorationButtonType::ContextHelp, QChar('H') },
{KDecoration2::DecorationButtonType::Minimize, QChar('I') },
{KDecoration2::DecorationButtonType::Maximize, QChar('A') },
{KDecoration2::DecorationButtonType::Close, QChar('X') },
{KDecoration2::DecorationButtonType::KeepAbove, QChar('F') },
{KDecoration2::DecorationButtonType::KeepBelow, QChar('B') },
{KDecoration2::DecorationButtonType::Shade, QChar('L') }
};
}
namespace Utils
{
QString buttonsToString(const DecorationButtonsList &buttons)
{
auto buttonToString = [](KDecoration2::DecorationButtonType button) -> QChar {
const auto it = s_buttonNames.constFind(button);
if (it != s_buttonNames.constEnd()) {
return it.value();
}
return QChar();
};
QString ret;
for (auto button : buttons) {
ret.append(buttonToString(button));
}
return ret;
}
DecorationButtonsList buttonsFromString(const QString &buttons)
{
DecorationButtonsList ret;
for (auto it = buttons.begin(); it != buttons.end(); ++it) {
for (auto it2 = s_buttonNames.constBegin(); it2 != s_buttonNames.constEnd(); ++it2) {
if (it2.value() == (*it)) {
ret << it2.key();
}
}
}
return ret;
}
DecorationButtonsList readDecorationButtons(const KConfigGroup &config, const QString &key, const DecorationButtonsList &defaultValue)
{
return buttonsFromString(config.readEntry(key, buttonsToString(defaultValue)));
}
KDecoration2::BorderSize stringToBorderSize(const QString &name)
{
auto it = s_borderSizes.constFind(name);
if (it == s_borderSizes.constEnd()) {
// non sense values are interpreted just like normal
return KDecoration2::BorderSize::Normal;
}
return it.value();
}
QString borderSizeToString(KDecoration2::BorderSize size)
{
return s_borderSizes.key(size);
}
const QMap<KDecoration2::BorderSize, QString> &getBorderSizeNames()
{
return s_borderSizeNames;
}
} // namespace Utils