Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/gui/div/GUIMessageWindow.h
169684 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2003-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file GUIMessageWindow.h
15
/// @author Daniel Krajzewicz
16
/// @author Jakob Erdmann
17
/// @date Tue, 25 Nov 2003
18
///
19
// A logging window for the gui
20
/****************************************************************************/
21
#pragma once
22
#include <config.h>
23
24
#include <string>
25
#include <utils/foxtools/fxheader.h>
26
#include <utils/gui/events/GUIEvent.h>
27
#include <utils/gui/windows/GUIMainWindow.h>
28
#include <utils/iodevices/OutputDevice.h>
29
30
31
// ===========================================================================
32
// class declarations
33
// ===========================================================================
34
class GUIGlObject;
35
36
37
// ===========================================================================
38
// class definitions
39
// ===========================================================================
40
/**
41
* @class GUIMessageWindow
42
* @brief A logging window for the gui
43
*
44
* This class displays messages incoming to the gui from either the load or
45
* the run thread.
46
*
47
* The text is colored in dependence to its type (messages: green, warnings: yellow,
48
* errors: red)
49
*
50
* Each time a new message is passed, the window is reopened.
51
*/
52
class GUIMessageWindow : public FXText {
53
FXDECLARE(GUIMessageWindow)
54
public:
55
/** @brief Constructor
56
*
57
* @param[in] parent The parent window
58
*/
59
GUIMessageWindow(FXComposite* parent, GUIMainWindow* mainWindow);
60
61
/// @brief Destructor
62
~GUIMessageWindow();
63
64
/// @brief set cursor position over a certain line
65
virtual void setCursorPos(FXint pos, FXbool notify = FALSE);
66
67
/** @brief Adds new text to the window
68
*
69
* The type of the text is determined by the first parameter
70
*
71
* @param[in] eType The type of the event the message was generated by
72
* @param[in] msg The message
73
* @see GUIEventType
74
*/
75
void appendMsg(GUIEventType eType, const std::string& msg);
76
77
/// @brief Adds a a separator to this log window
78
void addSeparator();
79
80
/// @brief Clears the window
81
void clear();
82
83
/// @brief register message handlers
84
void registerMsgHandlers();
85
86
/// @brief unregister message handlers
87
void unregisterMsgHandlers();
88
89
/// @brief switch locate links on and off
90
static void enableLocateLinks(const bool val) {
91
myLocateLinks = val;
92
}
93
94
/// @brief ask whether locate links is enabled
95
static bool locateLinksEnabled() {
96
return myLocateLinks;
97
}
98
99
/// @brief switch locate links on and off
100
static void setBreakPointOffset(SUMOTime val) {
101
myBreakPointOffset = val;
102
}
103
104
/// @brief ask whether locate links is enabled
105
static SUMOTime getBreakPointOffset() {
106
return myBreakPointOffset;
107
}
108
109
/// @brief handle keys
110
long onKeyPress(FXObject* o, FXSelector sel, void* data);
111
112
/// @brief The text colors used
113
static FXHiliteStyle* getStyles();
114
115
protected:
116
/// @brief FOX needs this
117
FOX_CONSTRUCTOR(GUIMessageWindow)
118
119
private:
120
/// @brief class MsgOutputDevice
121
class MsgOutputDevice : public OutputDevice {
122
123
public:
124
/// @brief constructor
125
MsgOutputDevice(GUIMessageWindow* msgWindow, GUIEventType type) :
126
myMsgWindow(msgWindow),
127
myType(type) { }
128
129
/// @brief destructor
130
~MsgOutputDevice() { }
131
132
protected:
133
/// @brief get Output Stream
134
std::ostream& getOStream() {
135
return myStream;
136
}
137
/// @brief write hook
138
void postWriteHook() {
139
myMsgWindow->appendMsg(myType, myStream.str());
140
myStream.str("");
141
}
142
143
private:
144
/// @brief pointer to message Windows
145
GUIMessageWindow* myMsgWindow;
146
147
/// @brief output string stream
148
std::ostringstream myStream;
149
150
/// @brief type of event
151
GUIEventType myType;
152
};
153
154
/// @brief get active string object
155
const GUIGlObject* getActiveStringObject(const FXString& text, const FXint pos, const FXint lineS, const FXint lineE) const;
156
157
/// @brief get time string object
158
SUMOTime getTimeString(const FXString& text, const FXint pos) const;
159
160
/// @brief fill styles
161
void fillStyles();
162
163
/// @brief main window
164
GUIMainWindow* myMainWindow;
165
166
/// @brief whether messages are linked to the GUI elements
167
static bool myLocateLinks;
168
169
/// @brief Offset when creating breakpoint by clicking on time links
170
static SUMOTime myBreakPointOffset;
171
172
/// @brief The text colors used
173
static FXHiliteStyle* myStyles;
174
175
/// @brief The time text to look for
176
static std::string myTimeText;
177
178
/// @brief The translated type strings text to look for
179
static std::map<std::string, std::string> myTypeStrings;
180
181
/// @brief The instances of message retriever encapsulations
182
OutputDevice* myErrorRetriever, *myMessageRetriever, *myWarningRetriever;
183
};
184
185