121 if ((
int)msg.size() <= lineWidth) {
125 size_t nextLineBreak = msg.find(
'\n');
126 size_t spaceAfterLine = msg.find(
' ', lineWidth);
127 while (spaceAfterLine != std::string::npos) {
128 if (nextLineBreak == std::string::npos || nextLineBreak > spaceAfterLine) {
129 msg = msg.replace(spaceAfterLine, 1,
"\n");
130 pos = spaceAfterLine + 1;
132 pos = nextLineBreak + 1;
134 spaceAfterLine = msg.find(
' ', pos + lineWidth);
135 nextLineBreak = msg.find(
'\n', pos);
151 msg =
build(msg, addType);
163 msg =
build(msg, addType);
205 inform(
toString(i.second) +
" total messages of type: " + i.first);
272 _putenv_s(
"LANGUAGE", locale.data());
274 setenv(
"LANGUAGE", locale.data(),
true);
277 if (!setlocale(LC_MESSAGES,
"")) {
280 const char* sumoPath = getenv(
"SUMO_HOME");
281 if (sumoPath ==
nullptr) {
282 if (!bindtextdomain(
"sumo",
nullptr)) {
283 WRITE_WARNING(
TL(
"Environment variable SUMO_HOME is not set, could not find localized messages."));
287 const std::string path = sumoPath + std::string(
"/data/locale/");
288 if (!bindtextdomain(
"sumo", path.data())) {
293 bind_textdomain_codeset(
"sumo",
"UTF-8");
309 if (oc.
getBool(
"no-warnings")) {
313 if (oc.
isSet(
"log",
false)) {
316 if (!oc.
getBool(
"no-warnings")) {
321 if (oc.
isSet(
"message-log",
false)) {
325 if (oc.
isSet(
"error-log",
false)) {
354 myType(type), myWasInformed(false), myAggregationThreshold(-1) {
#define WRITE_WARNINGF(...)
#define WRITE_WARNING(msg)
#define UNUSED_PARAMETER(x)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
virtual void addRetriever(OutputDevice *retriever)
Adds a further retriever to the instance responsible for a certain msg type.
std::vector< std::string > myInitialMessages
storage for initial messages
static MsgHandler * getGLDebugInstance()
Returns the instance to add GLdebug to.
bool wasInformed() const
Returns the information whether any messages were added.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
static void enableDebugGLMessages(bool enable)
enable/disable gl-debug messages
static MsgHandler * myGLDebugInstance
The instance to handle glDebug.
static std::string insertLineBreaks(std::string msg, int lineWidth)
reformats a long string to contain newline after a certain line length in px (depending on the curren...
virtual void endProcessMsg(std::string msg)
Ends a process information.
std::string build(const std::string &msg, bool addType)
Builds the string which includes the mml-message type.
static Factory myFactory
The function to call for new MsgHandlers, nullptr means use default constructor.
bool myWasInformed
information whether an output occurred at all
static void setupI18n(const std::string &locale="")
set up gettext stuff
static void initOutputOptions()
init output options
static MsgHandler * myErrorInstance
The instance to handle errors.
static MsgHandler * getDebugInstance()
Returns the instance to add debug to.
static MsgHandler * myMessageInstance
The instance to handle normal messages.
bool isRetriever(OutputDevice *retriever) const
Returns whether the given output device retrieves messages from the handler.
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
std::map< const std::string, int > myAggregationCount
count for messages of the same type
static void enableDebugMessages(bool enable)
enable/disable debug messages
static bool myAmProcessingProcess
Information whether a process information is printed to cout.
std::vector< OutputDevice * > myRetrievers
The list of retrievers that shall be informed about new messages or errors.
MsgHandler *(* Factory)(MsgType)
virtual ~MsgHandler()
destructor
virtual void clear(bool resetInformed=true)
Clears information whether an error occurred previously and print aggregated message summary.
static MsgHandler * myDebugInstance
The instance to handle debug.
void setAggregationThreshold(const int thresh)
static MsgHandler * myWarningInstance
The instance to handle warnings.
virtual void endProcessMsg2(bool success, long duration=-1)
Ends a process information with predefined messages.
virtual void beginProcessMsg(std::string msg, bool addType=true)
Begins a process information.
static bool myWriteDebugMessages
Flag to enable or disable debug GL Functions.
static bool myWriteDebugGLMessages
static void cleanupOnEnd()
Removes pending handler.
static void removeRetrieverFromAllInstances(OutputDevice *out)
ensure that that given output device is no longer used as retriever by any instance
virtual void removeRetriever(OutputDevice *retriever)
Removes the retriever from the handler.
int myAggregationThreshold
do not output more messages of the same type if the count exceeds this threshold
@ MT_GLDEBUG
The message is GL debug output.
@ MT_DEBUG
The message is debug output.
@ MT_MESSAGE
The message is only something to show.
@ MT_ERROR
The message is an error.
@ MT_WARNING
The message is a warning.
MsgHandler(MsgType type)
standard constructor
static MsgHandler * getMessageInstance()
Returns the instance to add normal messages to.
A storage for options typed value containers)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.