SUMO - Simulation of Urban MObility

GUIGlChildWindow.cpp

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