File indexing completed on 2024-05-19 05:03:53

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "bannermessagewidget.h"
0007 #include "ruqolawidgets_debug.h"
0008 #include <KLocalizedString>
0009 #include <QAction>
0010 #include <QDesktopServices>
0011 #include <QUrl>
0012 
0013 BannerMessageWidget::BannerMessageWidget(QWidget *parent)
0014     : KMessageWidget(parent)
0015 {
0016     setVisible(false);
0017     setCloseButtonVisible(false);
0018     setMessageType(Information);
0019     setWordWrap(true);
0020     setPosition(KMessageWidget::Header);
0021 
0022     auto readAction = new QAction(i18n("Mark as Read"), this);
0023     readAction->setObjectName(QStringLiteral("read_action"));
0024     connect(readAction, &QAction::triggered, this, &BannerMessageWidget::slotReadInfo);
0025     addAction(readAction);
0026     connect(this, &BannerMessageWidget::linkActivated, this, &BannerMessageWidget::slotOpenUrl);
0027 }
0028 
0029 BannerMessageWidget::~BannerMessageWidget() = default;
0030 
0031 void BannerMessageWidget::slotReadInfo()
0032 {
0033     if (mBannerInfos.isEmpty()) {
0034         qCWarning(RUQOLAWIDGETS_LOG) << "banner info is empty! It's a bug";
0035     } else {
0036         const auto info = mBannerInfos.takeFirst();
0037 
0038         Q_EMIT infoWasRead(info.identifier);
0039         updateInfo();
0040     }
0041 }
0042 
0043 const QVector<BannerInfos::UnreadInformation> &BannerMessageWidget::bannerInfos() const
0044 {
0045     return mBannerInfos;
0046 }
0047 
0048 void BannerMessageWidget::setBannerInfos(const QVector<BannerInfos::UnreadInformation> &newBannerInfo)
0049 {
0050     if (mBannerInfos != newBannerInfo) {
0051         mBannerInfos = newBannerInfo;
0052         updateInfo();
0053     }
0054 }
0055 
0056 void BannerMessageWidget::updateInfo()
0057 {
0058     if (mBannerInfos.isEmpty()) {
0059         animatedHide();
0060     } else {
0061         const auto info = mBannerInfos.first();
0062         setText(info.i18nMessage);
0063         animatedShow();
0064     }
0065 }
0066 
0067 void BannerMessageWidget::slotOpenUrl(const QString &url)
0068 {
0069     QDesktopServices::openUrl(QUrl(url));
0070 }
0071 
0072 #include "moc_bannermessagewidget.cpp"