all repos — mgba @ 1093849ad5f6103d8eb1817e9b913255a3218eb9

mGBA Game Boy Advance Emulator

src/platform/qt/LogController.h (view raw)

 1/* Copyright (c) 2013-2015 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#pragma once
 7
 8#include "GBAApp.h"
 9
10#include <mgba/core/log.h>
11
12#include <QObject>
13#include <QStringList>
14#include <QTextStream>
15#include <memory>
16
17namespace QGBA {
18
19class ConfigController;
20
21class LogController : public QObject {
22Q_OBJECT
23
24private:
25	class Stream {
26	public:
27		Stream(LogController* controller, int level, int category);
28		~Stream();
29
30		Stream& operator<<(const QString&);
31
32	private:
33		int m_level;
34		int m_category;
35		LogController* m_log;
36
37		QStringList m_queue;
38	};
39
40public:
41	LogController(int levels, QObject* parent = nullptr);
42	~LogController();
43
44	int levels() const { return m_filter.defaultLevels; }
45	int levels(int category) const;
46	mLogFilter* filter() { return &m_filter; }
47
48	Stream operator()(int category, int level);
49
50	static LogController* global();
51	static QString toString(int level);
52	static int categoryId(const char*);
53
54	void load(const ConfigController*);
55	void save(ConfigController*) const;
56
57signals:
58	void logPosted(int level, int category, const QString& log);
59	void levelsSet(int levels);
60	void levelsEnabled(int levels);
61	void levelsDisabled(int levels);
62	void levelsSet(int levels, int category);
63	void levelsEnabled(int levels, int category);
64	void levelsDisabled(int levels, int category);
65
66public slots:
67	void postLog(int level, int category, const QString& string);
68	void setLevels(int levels);
69	void enableLevels(int levels);
70	void disableLevels(int levels);
71	void setLevels(int levels, int category);
72	void enableLevels(int levels, int category);
73	void disableLevels(int levels, int category);
74	void clearLevels(int category);
75
76	void logToFile(bool);
77	void logToStdout(bool);
78	void setLogFile(const QString&);
79
80private:
81	mLogFilter m_filter;
82	bool m_logToFile;
83	bool m_logToStdout;
84	std::unique_ptr<QFile> m_logFile;
85	std::unique_ptr<QTextStream> m_logStream;
86
87	static LogController s_global;
88	static int s_qtCat;
89};
90
91#define LOG(C, L) (*LogController::global())(mLOG_ ## L, _mLOG_CAT_ ## C)
92
93}