all repos — mgba @ df47cb1f9563ba59baa9fc80aa675b8b529a2cbd

mGBA Game Boy Advance Emulator

src/platform/qt/LogController.cpp (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#include "LogController.h"
 7
 8using namespace QGBA;
 9
10LogController LogController::s_global(GBA_LOG_ALL);
11
12LogController::LogController(int levels, QObject* parent)
13	: QObject(parent)
14	, m_logLevel(levels)
15{
16	if (this != &s_global) {
17		connect(&s_global, SIGNAL(logPosted(int, const QString&)), this, SLOT(postLog(int, const QString&)));
18		connect(this, SIGNAL(levelsSet(int)), &s_global, SLOT(setLevels(int)));
19		connect(this, SIGNAL(levelsEnabled(int)), &s_global, SLOT(enableLevels(int)));
20		connect(this, SIGNAL(levelsDisabled(int)), &s_global, SLOT(disableLevels(int)));
21	}
22}
23
24LogController::Stream LogController::operator()(int level) {
25	return Stream(this, level);
26}
27
28void LogController::postLog(int level, const QString& string) {
29	if (!(m_logLevel & level)) {
30		return;
31	}
32	emit logPosted(level, string);
33}
34
35void LogController::setLevels(int levels) {
36	m_logLevel = levels;
37	emit levelsSet(levels);
38}
39
40void LogController::enableLevels(int levels) {
41	m_logLevel |= levels;
42	emit levelsEnabled(levels);
43}
44
45void LogController::disableLevels(int levels) {
46	m_logLevel &= ~levels;
47	emit levelsDisabled(levels);
48}
49
50LogController* LogController::global() {
51	return &s_global;
52}
53
54QString LogController::toString(int level) {
55	switch (level) {
56	case GBA_LOG_DEBUG:
57		return tr("DEBUG");
58	case GBA_LOG_STUB:
59		return tr("STUB");
60	case GBA_LOG_INFO:
61		return tr("INFO");
62	case GBA_LOG_WARN:
63		return tr("WARN");
64	case GBA_LOG_ERROR:
65		return tr("ERROR");
66	case GBA_LOG_FATAL:
67		return tr("FATAL");
68	case GBA_LOG_GAME_ERROR:
69		return tr("GAME ERROR");
70	case GBA_LOG_SWI:
71		return tr("SWI");
72	case GBA_LOG_STATUS:
73		return tr("STATUS");
74	case GBA_LOG_SIO:
75		return tr("SIO");
76	}
77	return QString();
78}
79
80LogController::Stream::Stream(LogController* controller, int level)
81	: m_log(controller)
82	, m_level(level)
83{
84}
85
86LogController::Stream::~Stream() {
87	m_log->postLog(m_level, m_queue.join(" "));
88}
89
90LogController::Stream& LogController::Stream::operator<<(const QString& string) {
91	m_queue.append(string);
92	return *this;
93}