ukui-notification/libukui-notification/notification-settings/settings-properties-info.cpp

238 lines
9.0 KiB
C++

/*
* Copyright (C) 2023, KylinSoft Co., Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Authors: iaom <zhangpengfei@kylinos.cn>
*/
#include "settings-properties-info.h"
#include <QLocale>
#include <QTime>
using namespace UkuiNotification;
class UkuiNotification::SettingsPropertiesInfoPrivate
{
public:
SettingsProperty::Property m_property;
QString m_name;
QString m_displayName;
QMetaType::Type m_valueType;
QString m_defaultValue;
QMetaType::Type m_settingsPropertyMetaType;
};
SettingsPropertiesInfo::SettingsPropertiesInfo(): d(new SettingsPropertiesInfoPrivate)
{
d->m_property = SettingsProperty::Invalid;
d->m_name = QStringLiteral("Invalid");
d->m_valueType = QMetaType::UnknownType;
d->m_settingsPropertyMetaType = static_cast<QMetaType::Type>(QMetaType::type("UkuiNotification::SettingsProperty::Property"));
}
SettingsPropertiesInfo::SettingsPropertiesInfo(SettingsProperty::Property property)
: d(new SettingsPropertiesInfoPrivate)
{
d->m_property = property;
switch (property) {
case SettingsProperty::ScheduleTurnOnDND:
d->m_name = QStringLiteral("ScheduleTurnOnDND");
d->m_displayName = tr("Schedule turn on");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
case SettingsProperty::ScheduleTurnOnDNDTime:
d->m_name = QStringLiteral("ScheduleTurnOnDNDTime");
d->m_displayName = tr("Schedule turn on time");
d->m_valueType = QMetaType::QTime;
d->m_defaultValue = "00:00";
break;
case SettingsProperty::ScheduleTurnOffDNDTime:
d->m_name = QStringLiteral("ScheduleTurnOffDNDTime");
d->m_displayName = tr("Schedule turn off time");
d->m_valueType = QMetaType::QTime;
d->m_defaultValue = "00:00";
break;
case SettingsProperty::DNDWhileMultiScreen:
d->m_name = QStringLiteral("DNDWhileMultiScreen");
d->m_displayName = tr("Turn on while multi-screen connected");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
case SettingsProperty::DNDWhileFullScreen:
d->m_name = QStringLiteral("DNDWhileFullScreen");
d->m_displayName = tr("Turn on in full screen mode");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
case SettingsProperty::NotifyAlarmWhileDND:
d->m_name = QStringLiteral("NotifyAlarmWhileDND");
d->m_displayName = tr("Allow alarm to notify in do not disturb mode");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
case SettingsProperty::ReceiveNotificationsFromApps:
d->m_name = QStringLiteral("ReceiveNotificationsFromApps");
d->m_displayName = tr("Get notifications from applications");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "true";
break;
case SettingsProperty::AllowNotify:
d->m_name = QStringLiteral("AllowNotify");
d->m_displayName = tr("Allow notify");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "true";
break;
case SettingsProperty::AllowSound:
d->m_name = QStringLiteral("AllowSound");
d->m_displayName = tr("Allow sound for notifications");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "true";
break;
case SettingsProperty::ShowContentOnLockScreen:
d->m_name = QStringLiteral("ShowContentOnLockScreen");
d->m_displayName = tr("Show notification content on lock screen");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
case SettingsProperty::ShowNotificationOnLockScreen:
d->m_name = QStringLiteral("ShowNotificationOnLockScreen");
d->m_displayName = tr("Show notifications on lock screen");
d->m_valueType = QMetaType::Bool;
d->m_defaultValue = "false";
break;
// case SettingsProperty::PopupStyle:
// d->m_name = QStringLiteral("popupStyle");
// d->m_displayName = tr("Style of popup notification");
// d->m_valueType = d->m_settingsPropertyMetaType;
// d->m_defaultValue = "TransientPopup";
// break;
//
// case SettingsProperty::TransientPopup:
// d->m_name = QStringLiteral("TransientPopup");
// d->m_displayName = tr("Popup: displayed in the upper right corner of the screen, will automatically disappear");
// d->m_valueType = QMetaType::Int;
// break;
//
// case SettingsProperty::ResidentPopup:
// d->m_name = QStringLiteral("ResidentPopup");
// d->m_displayName = tr("Notice: will remain on the screen until it is closed");
// d->m_valueType = QMetaType::Int;
// break;
//
// case SettingsProperty::NoPopup:
// d->m_name = QStringLiteral("NoPopup");
// d->m_displayName = tr("None: notifications will not be displayed on the screen, only be put into notification center");
// d->m_valueType = QMetaType::Int;
// break;
case SettingsProperty::Invalid:
d->m_name = QStringLiteral("Invalid");
d->m_valueType = QMetaType::UnknownType;
break;
// NOTE: new properties must also be added to ::fromName()
}
}
SettingsPropertiesInfo::SettingsPropertiesInfo(const SettingsPropertiesInfo& pi)
: d(new SettingsPropertiesInfoPrivate(*pi.d))
{
}
SettingsPropertiesInfo::~SettingsPropertiesInfo() = default;
SettingsPropertiesInfo& SettingsPropertiesInfo::operator=(const SettingsPropertiesInfo& rhs)
{
*d = *rhs.d;
return *this;
}
bool SettingsPropertiesInfo::operator==(const SettingsPropertiesInfo& rhs) const
{
return d->m_name == rhs.d->m_name && d->m_displayName == rhs.d->m_displayName &&
d->m_property == rhs.d->m_property && d->m_valueType == rhs.d->m_valueType;
}
QString SettingsPropertiesInfo::displayName() const
{
return d->m_displayName;
}
QString SettingsPropertiesInfo::name() const
{
return d->m_name;
}
SettingsProperty::Property SettingsPropertiesInfo::property() const
{
return d->m_property;
}
QMetaType::Type SettingsPropertiesInfo::valueType() const
{
return d->m_valueType;
}
SettingsPropertiesInfo SettingsPropertiesInfo::fromName(const QString& name)
{
static QHash<QString, SettingsProperty::Property> propertyHash = {
{ QStringLiteral("ScheduleTurnOnDND"), SettingsProperty::ScheduleTurnOnDND },
{ QStringLiteral("ScheduleTurnOnDNDTime"), SettingsProperty::ScheduleTurnOnDNDTime },
{ QStringLiteral("ScheduleTurnOffDNDTime"), SettingsProperty::ScheduleTurnOffDNDTime },
{ QStringLiteral("DNDWhileMultiScreen"), SettingsProperty::DNDWhileMultiScreen },
{ QStringLiteral("DNDWhileFullScreen"), SettingsProperty::DNDWhileFullScreen },
{ QStringLiteral("NotifyAlarmWhileDND"), SettingsProperty::NotifyAlarmWhileDND },
{ QStringLiteral("ReceiveNotificationsFromApps"), SettingsProperty::ReceiveNotificationsFromApps },
{ QStringLiteral("AllowNotify"), SettingsProperty::AllowNotify },
{ QStringLiteral("AllowSound"), SettingsProperty::AllowSound },
{ QStringLiteral("ShowContentOnLockScreen"), SettingsProperty::ShowContentOnLockScreen },
{ QStringLiteral("ShowNotificationOnLockScreen"), SettingsProperty::ShowNotificationOnLockScreen },
// { QStringLiteral("popupStyle"), SettingsProperty::PopupStyle },
// { QStringLiteral("TransientPopup"), SettingsProperty::TransientPopup },
// { QStringLiteral("ResidentPopup"), SettingsProperty::ResidentPopup },
// { QStringLiteral("NoPopup"), SettingsProperty::NoPopup }
};
return {propertyHash.value(name)};
}
QString SettingsPropertiesInfo::defaultValue() const
{
return d->m_defaultValue;
}
QString SettingsPropertiesInfo::valueToString(const QVariant &value) const
{
if(d->m_valueType == d->m_settingsPropertyMetaType) {
return SettingsPropertiesInfo(static_cast<SettingsProperty::Property>(value.toInt())).name();
} else if(d->m_valueType == QMetaType::QTime) {
return value.toTime().toString("HHmm");
} else {
return value.toString();
}
}