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};
89
90#define LOG(C, L) (*LogController::global())(mLOG_ ## L, _mLOG_CAT_ ## C)
91
92}