SUMO - Simulation of Urban MObility
GUIGlChildWindow.cpp
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines