Warning, file /graphics/glaxnimate/src/gui/widgets/window_message_widget.hpp 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 #ifndef WINDOWMESSAGEWIDGET_H
0008 #define WINDOWMESSAGEWIDGET_H
0009 
0010 #include <KMessageWidget>
0011 #include <QAction>
0012 #include <memory>
0013 
0014 #include "app/log/log_line.hpp"
0015 
0016 namespace glaxnimate::gui {
0017 
0018 class WindowMessageWidget : public KMessageWidget
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     struct Message
0024     {
0025         QString message;
0026         KMessageWidget::MessageType severity = KMessageWidget::Warning;
0027         std::vector<std::unique_ptr<QAction>> actions = {};
0028 
0029         template<class QObj, class Func>
0030         QAction* add_action(const QIcon& icon, const QString& label, QObj* context, Func functor)
0031         {
0032             actions.push_back(std::make_unique<QAction>(icon, label));
0033             connect(actions.back().get(), &QAction::triggered, context, functor);
0034             return actions.back().get();
0035         }
0036 
0037         QAction* add_action(const QIcon& icon, const QString& label)
0038         {
0039             actions.push_back(std::make_unique<QAction>(icon, label));
0040             return actions.back().get();
0041         }
0042     };
0043 
0044     WindowMessageWidget(QWidget* parent = nullptr);
0045     ~WindowMessageWidget();
0046 
0047     void queue_message(Message msg);
0048 
0049 private:
0050     void show_message(const Message& msg);
0051 
0052 private Q_SLOTS:
0053     void next_message();
0054 
0055 private:
0056     class Private;
0057     std::unique_ptr<Private> d;
0058 };
0059 
0060 } // namespace glaxnimate::gui
0061 #endif // WINDOWMESSAGEWIDGET_H