/* * 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 . * * Authors: iaom */ #ifndef UKUI_NOTIFICATION_POPUP_NOTIFICATION_H #define UKUI_NOTIFICATION_POPUP_NOTIFICATION_H #include "ukui-notification_global.h" #include #include #include #include #include #include #include #include #include namespace UkuiNotification { class PopupNotificationPrivate; typedef QList> ActionList; /** * @short 表示一条通知。 * @author iaom */ class UKUINOTIFICATION_EXPORT PopupNotification { friend class NotificationSettingsTest; Q_GADGET /** * 通知ID。 */ Q_PROPERTY(uint id READ id) /** * 应用名称。 */ Q_PROPERTY(QString applicationName READ applicationName WRITE setApplicationName) /** * 应用图标名。 */ Q_PROPERTY(QString applicationIconName READ applicationIconName WRITE setApplicationIconName) /** * 通知摘要。 */ Q_PROPERTY(QString summary READ summary WRITE setSummary) /** * 通知消息体。 */ Q_PROPERTY(QString body READ body WRITE setBody) /** * 通知创建时间。 */ Q_PROPERTY(QDateTime createdTime READ createdTime) /** * 是否有默认action,通常用于点击通知弹窗时执行。 */ Q_PROPERTY(bool hasDefaultAction READ hasDefaultAction) /** * 通知action列表,表示通知包含的actions及执行动作信息,列表中两个为一组,偶数位(从0开始)表示一条action的唯一标识,奇数位表示要显示给用户的的内容。 * 一般点击消息体产生的action为“default”,对应的内容无要求,一般不会显示给用户(但是需要在发送协议中和action拼成一组)。有额外需要用户操作的action则会在通知弹窗里以按钮形式展示。 */ Q_PROPERTY(ActionList actions READ actions) /** * 通知超时失效时间(通知失效后会发送NotificationClosed信号,并且通知弹窗无法再继续操作)-1:系统默认;0 不会超时; >0 表示超时时间。 */ Q_PROPERTY(int timeout READ timeout WRITE setTimeout) /** * 是否支持hints中的action-icon功能。 */ Q_PROPERTY(bool enableActionIcons READ enableActionIcons) /** * 对应hints中的image-data字段。 */ Q_PROPERTY(QImage image READ image) /** * 当加载image-data失败,或通过image-path加载image失败时(image-path不是URL),icon会被设置为image-path数据。 */ Q_PROPERTY(QString icon READ icon) /** * 当设置为true时,通知中心将不会在用户点击action按钮后自动移除消息。仅当用户关闭或被通知发送者关闭才会移除通知。 */ Q_PROPERTY(bool resident READ resident) /** * 设置为true后,通知服务将通知视为临时的(不会一直存在)。 */ Q_PROPERTY(bool transient READ transient) /** * 通知发送时播放的声音文件路径。 */ Q_PROPERTY(QString soundFile READ soundFile) /** * 声音主题中的声音名称。 */ Q_PROPERTY(QString soundName READ soundName) /** * 指定通知服务静音,通常用于通知发送者播放自己的声音。 */ Q_PROPERTY(bool suppressSound READ suppressSound) /** * 当前通知的种类。 */ Q_PROPERTY(QString category READ category) /** * 紧急程度。 */ Q_PROPERTY(Urgency urgency READ urgency WRITE setUrgency) /** * 表示当前通知要显示在哪个DISPLAY上。 */ Q_PROPERTY(QString display READ display) /** * 和action对应,依次表示每个action的状态(包括default action)。 */ Q_PROPERTY(QStringList actionState READ actionState) /** * 设置为true后,通知将不会被折叠。 */ Q_PROPERTY(bool noFold READ noFold) /** * 通知弹窗持续时间,超过此时间后被收纳进通知中心(单位秒)。-1:表示消息通知常驻,不会收纳进通知中心;0:表示通知将直接进入侧边栏通知中心,不会弹窗;>0: 表示通知弹窗持续时间。 */ Q_PROPERTY(int popupTimeout READ popupTimeout) public: /** * The notification urgency. */ enum Urgency { /** * 低:不弹窗提醒,直接进入通知中心;重复应用通知会折叠。 */ LowUrgency = 0, /** * 普通:弹窗默认6s后关闭,进入通知中心;重复应用通知会折叠。 */ NormalUrgency = 1, /** * 重要:通知弹窗默认常驻,可点击关闭;通知不会折叠。 */ CriticalUrgency = 2, }; Q_ENUM(Urgency) explicit PopupNotification(uint id = 0); PopupNotification(const PopupNotification &other); PopupNotification &operator=(const PopupNotification &other); PopupNotification &operator=(PopupNotification &&other) Q_DECL_NOEXCEPT; ~PopupNotification(); /** * 通知ID。 */ uint id() const; /** * 应用名称。 */ QString applicationName() const; void setApplicationName(const QString &applicationName); /** * 应用图标名。 */ QString applicationIconName() const; void setApplicationIconName(const QString &applicationIconName); /** * 通知摘要。 */ QString summary() const; void setSummary(const QString &summary); /** * 通知消息体。 */ QString body() const; void setBody(const QString &body); /** * 是否有默认action,通常用于点击通知弹窗时执行。 */ bool hasDefaultAction() const; /** * 默认action的label名称。 */ QString defaultActionLabel(); void setActions(const QStringList &actions); ActionList actions() const; QStringList actionState() const; QVariantMap hints() const; void setHints(const QVariantMap &hints); int timeout() const; void setTimeout(int timeout); QDateTime createdTime() const; //m_hints /** * 使用图标显示action * @return */ bool enableActionIcons() const; /** * 分类 * @return */ QString category() const; /** * desktop名称(不带.desktop后缀) * @return */ QString desktopEntry() const; /** * 对应image-data字段 * @return */ QImage image() const; /** * 当加载image-data失败,或通过image-path加载image失败时(image-path不是URL),icon会被设置为image-path数据 * @return */ QString icon() const; /** * 是否持续显示,不会自动移除,直到被用户手动或发送者删除 * @return */ bool resident() const; /** * 通知发送时播放的声音文件路径 * @return */ QString soundFile() const; /** * 声音主题中的声音名称 * @return */ QString soundName() const; /** * 是否静音 * @return */ bool suppressSound() const; /** * 暂时通知(会自动移除) * @return */ bool transient() const; Urgency urgency() const; void setUrgency(Urgency urgency); /** * 通知发送者所在的display * @return */ QString display() const; /** * 是否不折叠 * @return */ bool noFold() const; /** * 弹窗持续时间 * @return */ int popupTimeout() const; private: PopupNotificationPrivate *d = nullptr; }; } #endif //UKUI_NOTIFICATION_POPUP_NOTIFICATION_H