Warning, file /graphics/glaxnimate/src/gui/widgets/window_message_widget.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "window_message_widget.hpp"
0008 
0009 #include <queue>
0010 
0011 #include <QPushButton>
0012 
0013 using namespace glaxnimate::gui;
0014 
0015 class glaxnimate::gui::WindowMessageWidget::Private
0016 {
0017 public:
0018     std::queue<Message> messages;
0019 };
0020 
0021 glaxnimate::gui::WindowMessageWidget::WindowMessageWidget(QWidget* parent)
0022     : KMessageWidget(parent), d(std::make_unique<WindowMessageWidget::Private>())
0023 {
0024     setCloseButtonVisible(true);
0025     hide();
0026     connect(this, &KMessageWidget::hideAnimationFinished, this, &WindowMessageWidget::next_message);
0027 }
0028 glaxnimate::gui::WindowMessageWidget::~WindowMessageWidget() = default;
0029 
0030 void glaxnimate::gui::WindowMessageWidget::queue_message(WindowMessageWidget::Message msg)
0031 {
0032     d->messages.emplace(std::move(msg));
0033     if ( d->messages.size() == 1 )
0034     {
0035         show_message(d->messages.front());
0036     }
0037 }
0038 
0039 void glaxnimate::gui::WindowMessageWidget::next_message()
0040 {
0041     // clearActions();
0042     d->messages.pop();
0043     if ( d->messages.empty() )
0044         hide();
0045     else
0046         show_message(d->messages.front());
0047 }
0048 
0049 void glaxnimate::gui::WindowMessageWidget::show_message(const WindowMessageWidget::Message& msg)
0050 {
0051     setMessageType(msg.severity);
0052     setText(msg.message);
0053 
0054     for ( const auto& action : msg.actions )
0055     {
0056         addAction(action.get());
0057         connect(action.get(), &QAction::triggered, this, &KMessageWidget::animatedHide);
0058     }
0059 
0060     switch ( msg.severity )
0061     {
0062         case KMessageWidget::Information:
0063             if ( !msg.actions.empty() && msg.message.endsWith("?") )
0064                 setIcon(QIcon::fromTheme("dialog-question"));
0065             else
0066                 setIcon(QIcon::fromTheme("dialog-information"));
0067             break;
0068         case KMessageWidget::Warning:
0069             setIcon(QIcon::fromTheme("dialog-warning"));
0070             break;
0071         case KMessageWidget::Error:
0072             setIcon(QIcon::fromTheme("dialog-error"));
0073             break;
0074         case KMessageWidget::Positive:
0075             setIcon(QIcon::fromTheme("dialog-ok"));
0076             break;
0077     }
0078 
0079     animatedShow();
0080 }