forked from EasyRPG/Player
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoutput.h
197 lines (169 loc) · 4.72 KB
/
output.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/*
* This file is part of EasyRPG Player.
*
* EasyRPG Player is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EasyRPG Player is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EasyRPG Player. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef EP_OUTPUT_H
#define EP_OUTPUT_H
// Headers
#include <string>
#include <iosfwd>
#include <fmt/core.h>
#include "filesystem_stream.h"
enum class LogLevel {
Error,
Warning,
Info,
Debug
};
using LogCallbackUserData = void*;
using LogCallbackFn = void (*)(LogLevel lvl, std::string const& message,
LogCallbackUserData userdata);
/**
* Output Namespace.
*/
namespace Output {
/** @return the configurated log level */
LogLevel GetLogLevel();
/**
* Sets the log level for filtering logs
*
* @param ll the new log level
*/
void SetLogLevel(LogLevel lvl);
/**
* Sets terminal log colors
*
* @param colored whether to color terminal log
*/
void SetTermColor(bool colored);
/**
* Closes the log file handle and trims the file.
*/
void Quit();
/**
* Takes screenshot and save it in the save directory.
*
* @return true if success, otherwise false.
*/
bool TakeScreenshot();
/**
* Takes screenshot and save it to specified file.
*
* @param file file to save.
* @return true if success, otherwise false.
*/
bool TakeScreenshot(StringView file);
/**
* Takes screenshot and save it to specified stream.
*
* @param os output stream that PNG will be stored.
* @return true if success, otherwise false.
*/
bool TakeScreenshot(std::ostream& os);
/**
* Shows/Hides the output log overlay.
*/
void ToggleLog();
/**
* Ignores pause in Warning and Error.
*
* @param val whether to ignore pause.
*/
void IgnorePause(bool val);
/**
* Outputs debug messages over custom logger. Useful for emulators.
*
* @param fn custom callback function
* @param userdata passed as is to callback
*/
void SetLogCallback(LogCallbackFn fn, LogCallbackUserData userdata = nullptr);
/** @return the Loglevel as string */
std::string LogLevelToString(LogLevel lvl);
/**
* Displays an info string with formatted string.
*
* @param fmtstr the format string
* @param args formatting arguments
*/
template <typename FmtStr, typename... Args>
void Info(FmtStr&& fmtstr, Args&&... args);
/**
* Displays an info string msg.
*
* @param msg string to display.
*/
void InfoStr(std::string const& msg);
/**
* Display a warning with formatted string.
*
* @param fmtstr the format string
* @param args formatting arguments
*/
template <typename FmtStr, typename... Args>
void Warning(FmtStr&& fmtstr, Args&&... args);
/**
* Display a warning.
*
* @param warn : warning to display.
*/
void WarningStr(std::string const& warn);
/**
* Raises an error message with formatted string and
* closes the player afterwards.
*
* @param fmtstr the format string
* @param args formatting arguments
*/
template <typename FmtStr, typename... Args>
[[noreturn]] void Error(FmtStr&& fmtstr, Args&&... args);
/**
* Display an error message and closes the player
* afterwards.
*
* @param err error to display.
*/
[[noreturn]] void ErrorStr(std::string const& err);
/**
* Prints a debug message to the console.
*
* @param fmtstr the format string
* @param args formatting arguments
*/
template <typename FmtStr, typename... Args>
void Debug(FmtStr&& fmtstr, Args&&... args);
/**
* Prints a debug message to the console.
*
* @param msg formatted debug text to display.
*/
void DebugStr(std::string const& msg);
}
template <typename FmtStr, typename... Args>
inline void Output::Info(FmtStr&& fmtstr, Args&&... args) {
InfoStr(fmt::format(std::forward<FmtStr>(fmtstr), std::forward<Args>(args)...));
}
template <typename FmtStr, typename... Args>
inline void Output::Error(FmtStr&& fmtstr, Args&&... args) {
ErrorStr(fmt::format(std::forward<FmtStr>(fmtstr), std::forward<Args>(args)...));
}
template <typename FmtStr, typename... Args>
inline void Output::Warning(FmtStr&& fmtstr, Args&&... args) {
WarningStr(fmt::format(std::forward<FmtStr>(fmtstr), std::forward<Args>(args)...));
}
template <typename FmtStr, typename... Args>
inline void Output::Debug(FmtStr&& fmtstr, Args&&... args) {
DebugStr(fmt::format(std::forward<FmtStr>(fmtstr), std::forward<Args>(args)...));
}
#endif