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 }