SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00009 // 00010 /****************************************************************************/ 00011 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00012 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00013 /****************************************************************************/ 00014 // 00015 // This file is part of SUMO. 00016 // SUMO is free software: you can redistribute it and/or modify 00017 // it under the terms of the GNU General Public License as published by 00018 // the Free Software Foundation, either version 3 of the License, or 00019 // (at your option) any later version. 00020 // 00021 /****************************************************************************/ 00022 00023 00024 // =========================================================================== 00025 // included modules 00026 // =========================================================================== 00027 #ifdef _MSC_VER 00028 #include <windows_config.h> 00029 #else 00030 #include <config.h> 00031 #endif 00032 00033 #include <utils/gui/images/GUIIconSubSys.h> 00034 #include <utils/gui/windows/GUIAppEnum.h> 00035 #include <utils/foxtools/MFXCheckableButton.h> 00036 #include <utils/gui/div/GUIGlobalSelection.h> 00037 #include "GUIGlChildWindow.h" 00038 00039 #ifdef CHECK_MEMORY_LEAKS 00040 #include <foreign/nvwa/debug_new.h> 00041 #endif // CHECK_MEMORY_LEAKS 00042 00043 00044 // =========================================================================== 00045 // FOX callback mapping 00046 // =========================================================================== 00047 FXDEFMAP(GUIGlChildWindow) GUIGlChildWindowMap[] = { 00048 FXMAPFUNC(SEL_COMMAND, MID_RECENTERVIEW, GUIGlChildWindow::onCmdRecenterView), 00049 FXMAPFUNC(SEL_COMMAND, MID_EDITVIEWPORT, GUIGlChildWindow::onCmdEditViewport), 00050 FXMAPFUNC(SEL_COMMAND, MID_SHOWTOOLTIPS, GUIGlChildWindow::onCmdShowToolTips), 00051 FXMAPFUNC(SEL_COMMAND, MID_ZOOM_STYLE, GUIGlChildWindow::onCmdZoomStyle), 00052 FXMAPFUNC(SEL_COMMAND, MID_COLOURSCHEMECHANGE, GUIGlChildWindow::onCmdChangeColorScheme), 00053 FXMAPFUNC(SEL_COMMAND, MID_EDITVIEWSCHEME, GUIGlChildWindow::onCmdEditViewScheme), 00054 }; 00055 00056 FXIMPLEMENT(GUIGlChildWindow, FXMDIChild, GUIGlChildWindowMap, ARRAYNUMBER(GUIGlChildWindowMap)) 00057 00058 00059 // =========================================================================== 00060 // member method definitions 00061 // =========================================================================== 00062 GUIGlChildWindow::GUIGlChildWindow( 00063 FXMDIClient* p, 00064 GUIMainWindow* parentWindow, 00065 FXMDIMenu* mdimenu, const FXString& name, 00066 FXIcon* ic, 00067 FXuint opts, FXint x, FXint y, FXint w, FXint h) : 00068 FXMDIChild(p, name, ic, mdimenu, opts, x, y, w, h), 00069 myView(0), 00070 myParent(parentWindow) { 00071 // Make MDI Window Menu 00072 setTracking(); 00073 myContentFrame = 00074 new FXVerticalFrame(this, 00075 FRAME_SUNKEN | LAYOUT_SIDE_TOP | LAYOUT_FILL_X | LAYOUT_FILL_Y, 00076 0, 0, 0, 0, 0, 0, 0, 0); 00077 // build the tool bar 00078 buildNavigationToolBar(); // always there (recenter) 00079 buildColoringToolBar(); // always there (coloring) 00080 buildScreenshotToolBar(); // always there (screen shot) 00081 } 00082 00083 00084 GUIGlChildWindow::~GUIGlChildWindow() { 00085 delete myLocatorPopup; 00086 delete myNavigationToolBar; 00087 } 00088 00089 00090 void 00091 GUIGlChildWindow::create() { 00092 FXMDIChild::create(); 00093 myNavigationToolBar->create(); 00094 myLocatorPopup->create(); 00095 myView->create(); 00096 } 00097 00098 00099 void 00100 GUIGlChildWindow::buildNavigationToolBar() { 00101 myNavigationToolBar = new FXToolBar(myContentFrame, LAYOUT_SIDE_TOP | LAYOUT_FILL_X | FRAME_RAISED); 00102 // build the view settings 00103 // recenter view 00104 new FXButton(myNavigationToolBar, 00105 "\tRecenter View\tRecenter view to the simulated area.", 00106 GUIIconSubSys::getIcon(ICON_RECENTERVIEW), this, MID_RECENTERVIEW, 00107 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT); 00108 // add viewport button 00109 new FXButton(myNavigationToolBar, 00110 "\tEdit Viewport...\tOpens a menu which lets you edit the viewport.", 00111 GUIIconSubSys::getIcon(ICON_EDITVIEWPORT), this, MID_EDITVIEWPORT, 00112 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT); 00113 // toggle button for zooming style 00114 MFXCheckableButton* zoomBut = new MFXCheckableButton(false, myNavigationToolBar, 00115 "\tToggles Zooming Style\tToggles whether zooming is based at cursor position or at the center of the view.", 00116 GUIIconSubSys::getIcon(ICON_ZOOMSTYLE), this, MID_ZOOM_STYLE, 00117 BUTTON_NORMAL | LAYOUT_FIX_WIDTH | LAYOUT_FIX_HEIGHT, 00118 0, 0, 23, 23); 00119 zoomBut->setChecked(getApp()->reg().readIntEntry("gui", "zoomAtCenter", 1) != 1); 00120 00121 // build the locator popup 00122 myLocatorPopup = new FXPopup(myNavigationToolBar, POPUP_VERTICAL); 00123 myLocatorButton = new FXMenuButton(myNavigationToolBar, "\tLocate Structures\tLocate structures within the network.", 00124 GUIIconSubSys::getIcon(ICON_LOCATE), myLocatorPopup, 00125 MENUBUTTON_RIGHT | LAYOUT_TOP | BUTTON_TOOLBAR | FRAME_RAISED | FRAME_THICK); 00126 // add toggle button for tool-tips on/off 00127 new MFXCheckableButton(false, myNavigationToolBar, 00128 "\tToggles Tool Tips\tToggles whether tool tips shall be shown.", 00129 GUIIconSubSys::getIcon(ICON_SHOWTOOLTIPS), this, MID_SHOWTOOLTIPS, 00130 BUTTON_NORMAL | LAYOUT_FIX_WIDTH | LAYOUT_FIX_HEIGHT, 00131 0, 0, 23, 23); 00132 00133 } 00134 00135 00136 void 00137 GUIGlChildWindow::buildColoringToolBar() { 00138 // in fact, we currently are not able to build another bar 00139 // we just add somthing to the navigation bar 00140 // myColoringToolBar = new FXToolBar(myContentFrame,LAYOUT_DOCK_SAME|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_RAISED); 00141 new FXToolBarGrip(myNavigationToolBar, NULL, 0, TOOLBARGRIP_SINGLE | FRAME_SUNKEN); 00142 00143 // build coloring tools 00144 // combo 00145 myColoringSchemes = 00146 new FXComboBox(myNavigationToolBar, 12, this, MID_COLOURSCHEMECHANGE, 00147 FRAME_SUNKEN | LAYOUT_LEFT | LAYOUT_TOP | COMBOBOX_STATIC | LAYOUT_CENTER_Y); 00148 // editor 00149 new FXButton(myNavigationToolBar, 00150 "\tEdit Coloring Schemes...\tOpens a menu which lets you edit the coloring schemes.", 00151 GUIIconSubSys::getIcon(ICON_COLORWHEEL), this, MID_EDITVIEWSCHEME, 00152 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT); 00153 } 00154 00155 00156 void 00157 GUIGlChildWindow::buildScreenshotToolBar() { 00158 // in fact, we currently are not able to build another bar 00159 // we just add somthing to the navigation bar 00160 // myScreenshotToolBar = new FXToolBar(myContentFrame,LAYOUT_DOCK_SAME|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_RAISED); 00161 new FXToolBarGrip(myNavigationToolBar, NULL, 0, TOOLBARGRIP_SINGLE | FRAME_SUNKEN); 00162 // snapshot 00163 new FXButton(myNavigationToolBar, 00164 "\tMake Snapshot\tMakes a snapshot of the view.", 00165 GUIIconSubSys::getIcon(ICON_CAMERA), this, MID_MAKESNAPSHOT, 00166 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT); 00167 } 00168 00169 00170 FXGLCanvas* 00171 GUIGlChildWindow::getBuildGLCanvas() const { 00172 return myView; 00173 } 00174 00175 00176 FXToolBar& 00177 GUIGlChildWindow::getNavigationToolBar(GUISUMOAbstractView&) { 00178 return *myNavigationToolBar; 00179 } 00180 00181 00182 FXPopup* 00183 GUIGlChildWindow::getLocatorPopup() { 00184 return myLocatorPopup; 00185 } 00186 00187 00188 FXComboBox& 00189 GUIGlChildWindow::getColoringSchemesCombo() { 00190 return *myColoringSchemes; 00191 } 00192 00193 00194 long 00195 GUIGlChildWindow::onCmdRecenterView(FXObject*, FXSelector, void*) { 00196 myView->recenterView(); 00197 myView->update(); 00198 return 1; 00199 } 00200 00201 00202 long 00203 GUIGlChildWindow::onCmdEditViewport(FXObject*, FXSelector, void*) { 00204 myView->showViewportEditor(); 00205 return 1; 00206 } 00207 00208 00209 long 00210 GUIGlChildWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) { 00211 myView->showViewschemeEditor(); 00212 return 1; 00213 } 00214 00215 00216 long 00217 GUIGlChildWindow::onCmdShowToolTips(FXObject* sender, FXSelector, void*) { 00218 MFXCheckableButton* button = static_cast<MFXCheckableButton*>(sender); 00219 button->setChecked(!button->amChecked()); 00220 myView->showToolTips(button->amChecked()); 00221 update(); 00222 myView->update(); 00223 return 1; 00224 } 00225 00226 00227 long 00228 GUIGlChildWindow::onCmdZoomStyle(FXObject* sender, FXSelector, void*) { 00229 MFXCheckableButton* button = static_cast<MFXCheckableButton*>(sender); 00230 button->setChecked(!button->amChecked()); 00231 getApp()->reg().writeIntEntry("gui", "zoomAtCenter", 00232 button->amChecked() ? 0 : 1); 00233 update(); 00234 myView->update(); 00235 return 1; 00236 } 00237 00238 00239 long 00240 GUIGlChildWindow::onCmdChangeColorScheme(FXObject*, FXSelector , void* data) { 00241 myView->setColorScheme((char*) data); 00242 return 1; 00243 } 00244 00245 00246 void 00247 GUIGlChildWindow::setView(GUIGlID id) { 00248 // this is used by the locator widget. zoom using fixed distance makes it easier to identify objects 00249 // (long streets in particular) 00250 myView->centerTo(id, true); 00251 myView->update(); 00252 } 00253 00254 00255 bool 00256 GUIGlChildWindow::isSelected(GUIGlObject* o) const { 00257 return gSelected.isSelected(o->getType(), o->getGlID()); 00258 } 00259 /****************************************************************************/ 00260