82 #ifdef CHECK_MEMORY_LEAKS
109 FXMAPFUNC(SEL_COMMAND,
MID_NEW_OSGVIEW, GUIApplicationWindow::onCmdNewOSG),
147 const std::
string& configPattern)
149 myLoadThread(0), myRunThread(0),
151 myAlternateSimDelay(0),
152 myRecentNets(a, "nets"), myConfigPattern(configPattern),
153 hadDependentBuild(false),
154 myShowTimeAsHMS(false) {
173 LAYOUT_SIDE_TOP | LAYOUT_FILL_X | FRAME_RAISED);
184 myStatusbar =
new FXStatusBar(
this, LAYOUT_SIDE_BOTTOM | LAYOUT_FILL_X | FRAME_RAISED);
188 0, 0, 20, 0, 0, 0, 0, 0, 0, 0);
192 0, 0, 20, 0, 0, 0, 0, 0, 0, 0);
198 SPLITTER_REVERSED | SPLITTER_VERTICAL | LAYOUT_FILL_X | LAYOUT_FILL_Y | SPLITTER_TRACKING | FRAME_RAISED | FRAME_THICK);
200 LAYOUT_FILL_X | LAYOUT_FILL_Y | FRAME_SUNKEN | FRAME_THICK);
203 FXMDIClient::ID_MDI_MENUWINDOW, LAYOUT_LEFT);
205 FXMDIClient::ID_MDI_MENUCLOSE, FRAME_RAISED | LAYOUT_RIGHT);
207 FXMDIClient::ID_MDI_MENURESTORE, FRAME_RAISED | LAYOUT_RIGHT);
209 FXMDIClient::ID_MDI_MENUMINIMIZE, FRAME_RAISED | LAYOUT_RIGHT);
241 if (getApp()->reg().readIntEntry(
"SETTINGS",
"maximized", 0) == 0) {
242 setX(getApp()->reg().readIntEntry(
"SETTINGS",
"x", 150));
243 setY(getApp()->reg().readIntEntry(
"SETTINGS",
"y", 150));
244 setWidth(getApp()->reg().readIntEntry(
"SETTINGS",
"width", 600));
245 setHeight(getApp()->reg().readIntEntry(
"SETTINGS",
"height", 400));
247 gCurrentFolder = getApp()->reg().readStringEntry(
"SETTINGS",
"basedir",
"");
248 FXMainWindow::create();
258 FXint width = getApp()->getNormalFont()->getTextWidth(
"8", 1) * 24;
262 show(PLACEMENT_SCREEN);
263 if (getApp()->reg().readIntEntry(
"SETTINGS",
"maximized", 0) == 1) {
266 myShowTimeAsHMS = (getApp()->reg().readIntEntry(
"gui",
"timeasHMS", 0) == 1);
301 FXMainWindow::detach();
313 "&Open Simulation...\tCtl-O\tOpen a simulation (Configuration file).",
316 "Open &Network...\tCtl-N\tOpen a network.",
319 "&Reload\tCtl-R\tReloads the simulation / the network.",
323 "&Close\tCtl-W\tClose the simulation.",
326 FXMenuSeparator* sep1 =
new FXMenuSeparator(
myFileMenu);
328 sep1->setSelector(FXRecentFiles::ID_ANYFILES);
342 FXMenuSeparator* sep2 =
new FXMenuSeparator(
myFileMenu);
344 sep2->setSelector(FXRecentFiles::ID_ANYFILES);
360 "&Quit\tCtl-Q\tQuit the Application.",
367 "Edit Chosen...\t\tOpens a Dialog for editing the List of chosen Items.",
371 "Edit Breakpoints...\t\tOpens a Dialog for editing breakpoints.",
378 "Application Settings...\t\tOpen a Dialog for Application Settings editing.",
381 "Gaming Mode\t\tToggle gaming mode on/off.",
384 "Locate Internal Structures\t\tList internal junctions and streets in the object locator.",
391 "Show Status Line\t\tToggle this Status Bar on/off.",
394 "Show Message Window\t\tToggle the Message Window on/off.",
397 "Show Simulation Time\t\tToggle the Simulation Time on/off.",
400 "Show Simulation Delay\t\tToggle the Simulation Delay Entry on/off.",
417 sep1->setSelector(FXMDIClient::ID_MDI_ANY);
425 "Clear Message Window\t\tClear the message window.",
443 LAYOUT_DOCK_NEXT | LAYOUT_SIDE_TOP | FRAME_RAISED);
449 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
452 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
455 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
461 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
466 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
469 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
472 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
478 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
482 BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
494 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED | LAYOUT_FILL_Y);
498 BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
501 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_Y);
511 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
517 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
521 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
529 getApp()->reg().writeIntEntry(
"SETTINGS",
"x", getX());
530 getApp()->reg().writeIntEntry(
"SETTINGS",
"y", getY());
531 getApp()->reg().writeIntEntry(
"SETTINGS",
"width", getWidth());
532 getApp()->reg().writeIntEntry(
"SETTINGS",
"height", getHeight());
533 getApp()->reg().writeStringEntry(
"SETTINGS",
"basedir",
gCurrentFolder.text());
534 getApp()->reg().writeIntEntry(
"SETTINGS",
"maximized", isMaximized() ? 1 : 0);
535 getApp()->reg().writeIntEntry(
"gui",
"timeasHMS",
myShowTimeAsHMS ? 1 : 0);
564 FXFileDialog opendialog(
this,
"Open Simulation Configuration");
566 opendialog.setSelectMode(SELECTFILE_EXISTING);
571 if (opendialog.execute()) {
573 std::string file = opendialog.getFilename().text();
584 FXFileDialog opendialog(
this,
"Open Network");
586 opendialog.setSelectMode(SELECTFILE_EXISTING);
587 opendialog.setPatternList(
"SUMO nets (*.net.xml)\nAll files (*)");
591 if (opendialog.execute()) {
593 std::string file = opendialog.getFilename().text();
603 load(
"",
false,
true);
611 myStatusbar->getStatusLine()->setText(
"Already loading!");
614 std::string file((
const char*)data);
630 myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
640 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
649 myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
659 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
669 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
693 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
736 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
746 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
756 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
766 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
776 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
786 d->show(PLACEMENT_OWNER);
817 GUIApplicationWindow::onCmdNewOSG(
FXObject*, FXSelector,
void*) {
829 about->show(PLACEMENT_OWNER);
835 FXEvent*
event = (FXEvent*)ptr;
837 setDNDData(FROM_CLIPBOARD, event->target,
string);
894 if (ec->
myNet != 0) {
896 std::map<int, traci::TraCIServer::CmdExecutor> execs;
911 if (ec->
myNet == 0) {
947 std::string settingsName = settings.
addSettings(view);
963 setTitle(
"SUMO Traffic Light Game");
973 getApp()->endWaitCursor();
1008 FXMessageBox::warning(
this, MBOX_OK,
"Simulation ended",
"%s", text.c_str());
1016 getApp()->beginWaitCursor();
1034 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
1038 FXuint opts = MDI_TRACKING;
1104 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1122 myStatusbar->getStatusLine()->setText(text.c_str());
1123 myStatusbar->getStatusLine()->setNormalText(text.c_str());
1130 const bool hideFraction =
myAmGaming || fmod(
TS, 1.) == 0.;
1131 const int BuffSize = 100;
1132 char buffer[BuffSize];
1134 const int hours = (
int)fracSeconds / 3600;
1135 const int minutes = ((
int)fracSeconds % 3600) / 60;
1136 fracSeconds = fracSeconds - 3600 * hours - 60 * minutes;
1137 const std::string format = (hideFraction ?
1138 "%02d-%02d-%02.0f" :
"%02d-%02d-%06.3f");
1139 snprintf(buffer, BuffSize, format.c_str(), hours, minutes, fracSeconds);
1141 const std::string format = (hideFraction ?
1142 "%13.0f" :
"%13.3f");
1143 snprintf(buffer, BuffSize, format.c_str(), fracSeconds);