48FXIMPLEMENT_ABSTRACT(
GUIMessageWindow, FXText, GUIMessageWindowMap, ARRAYNUMBER(GUIMessageWindowMap))
54 FXText(parent,
nullptr, 0, 0, 0, 0, 0, 50),
55 myMainWindow(mainWindow),
56 myStyles(new FXHiliteStyle[8]),
57 myErrorRetriever(
nullptr),
58 myMessageRetriever(
nullptr),
59 myWarningRetriever(
nullptr) {
62 const FXColor white = FXRGB(0xff, 0xff, 0xff);
63 const FXColor blue = FXRGB(0x00, 0x00, 0x88);
64 const FXColor green = FXRGB(0x00, 0x88, 0x00);
65 const FXColor red = FXRGB(0x88, 0x00, 0x00);
66 const FXColor yellow = FXRGB(0xe6, 0x98, 0x00);
67 const FXColor fuchsia = FXRGB(0x88, 0x00, 0x88);
69 myStyles[0].normalForeColor = blue;
70 myStyles[0].normalBackColor = white;
71 myStyles[0].selectForeColor = white;
72 myStyles[0].selectBackColor = blue;
73 myStyles[0].hiliteForeColor = blue;
74 myStyles[0].hiliteBackColor = white;
75 myStyles[0].activeBackColor = white;
76 myStyles[0].style = 0;
78 myStyles[1] = myStyles[0];
79 myStyles[1].normalForeColor = green;
80 myStyles[1].selectBackColor = green;
81 myStyles[1].hiliteForeColor = green;
82 myStyles[4] = myStyles[1];
83 myStyles[4].style = STYLE_UNDERLINE;
85 myStyles[2] = myStyles[0];
86 myStyles[2].normalForeColor = red;
87 myStyles[2].selectBackColor = red;
88 myStyles[2].hiliteForeColor = red;
89 myStyles[5] = myStyles[2];
90 myStyles[5].style = STYLE_UNDERLINE;
92 myStyles[3] = myStyles[0];
93 myStyles[3].normalForeColor = yellow;
94 myStyles[3].selectBackColor = yellow;
95 myStyles[3].hiliteForeColor = yellow;
96 myStyles[6] = myStyles[3];
97 myStyles[6].style = STYLE_UNDERLINE;
99 myStyles[7] = myStyles[0];
100 myStyles[7].normalForeColor = fuchsia;
101 myStyles[7].selectBackColor = fuchsia;
102 myStyles[7].hiliteForeColor = fuchsia;
104 setHiliteStyles(myStyles);
118 const FXint idS =
MAX2(text.rfind(
" '", pos), text.rfind(
"='", pos));
119 const FXint idE = text.find(
"'", pos);
120 if (idS >= 0 && idE >= 0 && idS >= lineS && idE <= lineE) {
121 FXint typeS = text.rfind(
" ", idS - 1);
123 if (text.at(typeS + 1) ==
'(') {
126 std::string type(text.mid(typeS + 1, idS - typeS - 1).lower().text());
127 if (type ==
"tllogic") {
129 }
else if (type ==
"busstop" || type ==
"trainstop") {
131 }
else if (type ==
"containerstop") {
132 type =
"containerStop";
133 }
else if (type ==
"chargingstation") {
134 type =
"chargingStation";
135 }
else if (type ==
"overheadwiresegment") {
136 type =
"overheadWireSegment";
137 }
else if (type ==
"parkingarea") {
138 type =
"parkingArea";
140 const std::string id(text.mid(idS + 2, idE - idS - 2).text());
141 const std::string typedID = type +
":" + id;
152 const FXint end = text.find(
" ", pos + 1);
155 time = text.mid(pos, end - pos).text();
157 time = text.mid(pos, text.length() - pos).text();
161 if (time.back() ==
'\n') {
167 if (time.back() ==
'.') {
174 if (time.front() ==
' ') {
175 time = time.substr(1);
189 FXText::setCursorPos(pos, notify);
192 std::vector<std::string> viewIDs =
main->getViewIDs();
193 if (viewIDs.empty()) {
197 const FXString text = getText();
199 if (glObj !=
nullptr) {
202 if (getApp()->getKeyState(KEY_Control_L)) {
206 const int lookback =
MIN2(pos, 20);
207 const int start =
MAX2(lineStart(pos), pos - lookback);
208 const FXString candidate = text.mid(start, lineEnd(pos) - start);
209 FXint timePos = candidate.find(
" time") + 6;
211 if (pos >= 0 && pos > start + timePos) {
212 t =
getTimeString(candidate, timePos, 0, candidate.length());
216 if (std::find(breakpoints.begin(), breakpoints.end(), t) == breakpoints.end()) {
217 breakpoints.push_back(t);
218 std::sort(breakpoints.begin(), breakpoints.end());
260 FXString text(msg.c_str());
262 FXint pos = text.find(
"'");
265 if (glObj !=
nullptr) {
267 FXString insText = text.left(pos + 1);
268 FXText::appendStyledText(insText, style + 1);
269 text.erase(0, pos + 1);
270 pos = text.find(
"'");
271 insText = text.left(pos);
272 FXText::appendStyledText(insText, style + 4);
275 pos = text.find(
"'", pos + 1);
278 pos = text.find(
" time");
284 FXString insText = text.left(pos + 6);
285 FXText::appendStyledText(insText, style + 1);
286 text.erase(0, pos + 6);
287 pos = text.find(
" ");
289 pos = text.rfind(
".");
291 insText = text.left(pos);
292 FXText::appendStyledText(insText, style + 4);
297 FXText::appendStyledText(text, style + 1,
true);
298 FXText::setCursorPos(getLength() - 1);
299 FXText::setBottomLine(getLength() - 1);
309 std::string msg =
"----------------------------------------------------------------------------------------\n";
310 FXText::appendStyledText(msg.c_str(), (FXint) msg.length(), 1,
true);
311 FXText::setCursorPos(getLength() - 1);
312 FXText::setBottomLine(getLength() - 1);
322 if (getLength() == 0) {
325 FXText::removeText(0, getLength() - 1,
true);
362 FXEvent* e = (FXEvent*) ptr;
364 if (e->state & CONTROLMASK) {
365 return FXText::onKeyPress(o, sel, ptr);
@ 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[]
std::string time2string(SUMOTime t)
convert SUMOTime to string
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
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
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.
SUMOTime getTimeString(const FXString &text, const FXint pos, const FXint lineS, const FXint lineE) const
static bool myLocateLinks
whether messages are linked to the GUI elements
FXHiliteStyle * myStyles
The text colors used.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
virtual void setCursorPos(FXint pos, FXbool notify=FALSE)
set cursor position over a certain line
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.