52 FXIMPLEMENT_ABSTRACT(
GUIMessageWindow, FXText, GUIMessageWindowMap, ARRAYNUMBER(GUIMessageWindowMap))
58 FXText(parent,
nullptr, 0, 0, 0, 0, 0, 50),
59 myMainWindow(mainWindow),
60 myErrorRetriever(
nullptr),
61 myMessageRetriever(
nullptr),
62 myWarningRetriever(
nullptr) {
68 setHiliteStyles(myStyles);
69 myTimeText =
TL(
" time");
96 const FXint idS =
MAX2(text.rfind(
" '", pos), text.rfind(
"='", pos));
97 const FXint idE = text.find(
"'", pos);
98 if (idS >= 0 && idE >= 0 && idS >= lineS && idE <= lineE) {
99 FXint typeS = text.rfind(
" ", idS - 1);
101 if (text.at(typeS + 1) ==
'(') {
104 std::string type(text.mid(typeS + 1, idS - typeS - 1).lower().text());
109 const std::string id(text.mid(idS + 2, idE - idS - 2).text());
110 const std::string typedID = type +
":" + id;
121 const FXint end = text.find_first_of(
" ,", pos + 1);
124 time = text.mid(pos, end - pos).text();
126 time = text.mid(pos, text.length() - pos).text();
130 if (time.back() ==
'\n') {
136 if (time.back() ==
'.') {
143 if (time.front() ==
' ') {
144 time = time.substr(1);
158 FXText::setCursorPos(pos, notify);
161 std::vector<std::string> viewIDs =
main->getViewIDs();
162 if (viewIDs.empty()) {
166 const FXString text = getText();
168 if (glObj !=
nullptr) {
171 if (getApp()->getKeyState(KEY_Control_L)) {
175 const int lookback =
MIN2(pos, 20);
176 const int start =
MAX2(lineStart(pos), pos - lookback);
177 const FXString candidate = text.mid(start, lineEnd(pos) - start);
178 FXint timePos = candidate.find(
myTimeText.c_str());
182 if (pos >= 0 && pos > start + timePos) {
187 if (std::find(breakpoints.begin(), breakpoints.end(), t) == breakpoints.end()) {
188 breakpoints.push_back(t);
189 std::sort(breakpoints.begin(), breakpoints.end());
232 FXString text(msg.c_str());
234 FXint pos = text.find(
"'");
237 if (glObj !=
nullptr) {
239 FXString insText = text.left(pos + 1);
240 FXText::appendStyledText(insText, style + 1);
241 text.erase(0, pos + 1);
242 pos = text.find(
"'");
243 insText = text.left(pos);
244 FXText::appendStyledText(insText, style + 4);
247 pos = text.find(
"'", pos + 1);
251 const int timeTerm = (int)
myTimeText.size() + 1;
257 FXString insText = text.left(pos + timeTerm);
258 FXText::appendStyledText(insText, style + 1);
259 text.erase(0, pos + timeTerm);
260 pos = text.find(
" ");
262 pos = text.rfind(
".");
264 insText = text.left(pos);
265 FXText::appendStyledText(insText, style + 4);
270 FXText::appendStyledText(text, style + 1,
true);
271 FXText::setCursorPos(getLength() - 1);
272 FXText::setBottomLine(getLength() - 1);
282 std::string msg =
"----------------------------------------------------------------------------------------\n";
283 FXText::appendStyledText(msg.c_str(), (FXint) msg.length(), 1,
true);
284 FXText::setCursorPos(getLength() - 1);
285 FXText::setBottomLine(getLength() - 1);
295 if (getLength() == 0) {
298 FXText::removeText(0, getLength() - 1,
true);
336 FXEvent* e = (FXEvent*) ptr;
338 if (e->state & CONTROLMASK) {
339 return FXText::onKeyPress(o, sel, ptr);
353 const FXColor white = FXRGB(0xff, 0xff, 0xff);
354 const FXColor blue = FXRGB(0x00, 0x00, 0x88);
355 const FXColor green = FXRGB(0x00, 0x88, 0x00);
356 const FXColor red = FXRGB(0x88, 0x00, 0x00);
357 const FXColor yellow = FXRGB(0xe6, 0x98, 0x00);
358 const FXColor fuchsia = FXRGB(0x88, 0x00, 0x88);
361 myStyles[0].normalBackColor = white;
362 myStyles[0].selectForeColor = white;
365 myStyles[0].hiliteBackColor = white;
366 myStyles[0].activeBackColor = white;
370 myStyles[1].normalForeColor = green;
371 myStyles[1].selectBackColor = green;
372 myStyles[1].hiliteForeColor = green;
374 myStyles[4].style = STYLE_UNDERLINE;
381 myStyles[5].style = STYLE_UNDERLINE;
384 myStyles[3].normalForeColor = yellow;
385 myStyles[3].selectBackColor = yellow;
386 myStyles[3].hiliteForeColor = yellow;
388 myStyles[6].style = STYLE_UNDERLINE;
391 myStyles[7].normalForeColor = fuchsia;
392 myStyles[7].selectBackColor = fuchsia;
393 myStyles[7].hiliteForeColor = fuchsia;
@ MESSAGE_OCCURRED
send when a message occured
@ GLDEBUG_OCCURRED
send when a gldebug occured
@ ERROR_OCCURRED
send when a error occured
@ DEBUG_OCCURRED
send when a debug occured
@ WARNING_OCCURRED
send when a warning occured
GUISelectedStorage gSelected
A global holder of selected objects.
FXDEFMAP(GUIMessageWindow) GUIMessageWindowMap[]
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
int main(int argc, char *argv[])
void setView(GUIGlID id)
Centers the view onto the given artifact.
GUIGlID getGlID() const
Returns the numerical id of the object.
void unblockObject(GUIGlID id)
Marks an object as unblocked.
GUIGlObject * getObjectBlocking(GUIGlID id) const
Returns the object from the container locking it.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
virtual const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
virtual void setBreakpoints(const std::vector< SUMOTime > &)
Sets the breakpoints of the parent application.
virtual void setStatusBarText(const std::string &)
get status bar text (can be implemented in children)
static GUIMainWindow * getInstance()
get instance
A logging window for the gui.
GUIMainWindow * myMainWindow
main window
OutputDevice * myGLDebugRetriever
void addSeparator()
Adds a a separator to this log window.
OutputDevice * myErrorRetriever
The instances of message retriever encapsulations.
void unregisterMsgHandlers()
unregister message handlers
static SUMOTime myBreakPointOffset
Offset when creating breakpoint by clicking on time links.
void clear()
Clears the window.
void fillStyles()
fill styles
static std::string myTimeText
The time text to look for.
static FXHiliteStyle * myStyles
The text colors used.
static bool myLocateLinks
whether messages are linked to the GUI elements
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
static FXHiliteStyle * getStyles()
The text colors used.
virtual void setCursorPos(FXint pos, FXbool notify=FALSE)
set cursor position over a certain line
SUMOTime getTimeString(const FXString &text, const FXint pos) const
get time string object
static std::map< std::string, std::string > myTypeStrings
The translated type strings text to look for.
OutputDevice * myWarningRetriever
OutputDevice * myMessageRetriever
OutputDevice * myDebugRetriever
~GUIMessageWindow()
Destructor.
long onKeyPress(FXObject *o, FXSelector sel, void *data)
handle keys
const GUIGlObject * getActiveStringObject(const FXString &text, const FXint pos, const FXint lineS, const FXint lineE) const
get active string object
void registerMsgHandlers()
register message handlers
void toggleSelection(GUIGlID id)
Toggles selection of an object.
virtual void addRetriever(OutputDevice *retriever)
Adds a further retriever to the instance responsible for a certain msg type.
static MsgHandler * getGLDebugInstance()
Returns the instance to add GLdebug to.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
static MsgHandler * getDebugInstance()
Returns the instance to add debug to.
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
virtual void removeRetriever(OutputDevice *retriever)
Removes the retriever from the handler.
static MsgHandler * getMessageInstance()
Returns the instance to add normal messages to.
static std::string to_lower_case(const std::string &str)
Transfers the content to lower case.