1 /**************************************************************************
2 * Otter Browser: Web browser controlled by the user, not vice-versa.
3 * Copyright (C) 2013 - 2018 Michal Dutkiewicz aka Emdek <michal@emdek.pl>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 **************************************************************************/
19 
20 #ifndef OTTER_CONSOLEWIDGET_H
21 #define OTTER_CONSOLEWIDGET_H
22 
23 #include <QtGui/QStandardItemModel>
24 #include <QtWidgets/QWidget>
25 
26 #include "../../../core/Console.h"
27 
28 namespace Otter
29 {
30 
31 namespace Ui
32 {
33 	class ErrorConsoleWidget;
34 }
35 
36 class ErrorConsoleWidget final : public QWidget
37 {
38 	Q_OBJECT
39 
40 public:
41 	explicit ErrorConsoleWidget(QWidget *parent = nullptr);
42 	~ErrorConsoleWidget();
43 
44 protected:
45 	enum DataRole
46 	{
47 		TimeRole = Qt::UserRole,
48 		CategoryRole,
49 		SourceRole,
50 		WindowRole
51 	};
52 
53 	enum MessagesScope
54 	{
55 		NoScope = 0,
56 		CurrentTabScope = 1,
57 		AllTabsScope = 2,
58 		OtherSourcesScope = 4
59 	};
60 
61 	Q_DECLARE_FLAGS(MessagesScopes, MessagesScope)
62 
63 	void showEvent(QShowEvent *event) override;
64 	void applyFilters(const QModelIndex &index, const QString &filter, const QVector<Console::MessageCategory> &categories, quint64 currentWindow);
65 	QVector<Console::MessageCategory> getCategories() const;
66 	quint64 getCurrentWindow();
67 
68 protected slots:
69 	void addMessage(const Console::Message &message);
70 	void filterCategories();
71 	void filterMessages(const QString &filter);
72 	void showContextMenu(const QPoint &position);
73 
74 private:
75 	QStandardItemModel *m_model;
76 	MessagesScopes m_messageScopes;
77 	Ui::ErrorConsoleWidget *m_ui;
78 };
79 
80 }
81 
82 #endif
83