GUITrafficLightLogicWrapper.cpp

Go to the documentation of this file.
00001 /****************************************************************************/
00007 // A wrapper for tl-logics to allow their visualisation and interaction
00008 /****************************************************************************/
00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00010 // Copyright 2001-2010 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 <cassert>
00031 #include <utils/gui/globjects/GUIGlObject.h>
00032 #include <utils/gui/globjects/GUIGlObjectStorage.h>
00033 #include <gui/GUIApplicationWindow.h>
00034 #include <gui/GUITLLogicPhasesTrackerWindow.h>
00035 #include <microsim/MSLane.h>
00036 #include <microsim/traffic_lights/MSTrafficLightLogic.h>
00037 #include <microsim/traffic_lights/MSTLLogicControl.h>
00038 #include <utils/gui/globjects/GUIGLObjectPopupMenu.h>
00039 #include <gui/GUIGlobals.h>
00040 #include <utils/gui/windows/GUIAppEnum.h>
00041 #include <utils/gui/images/GUIIconSubSys.h>
00042 #include <guisim/GLObjectValuePassConnector.h>
00043 #include <microsim/logging/FunctionBinding.h>
00044 #include <microsim/logging/FuncBinding_StringParam.h>
00045 #include "GUITrafficLightLogicWrapper.h"
00046 #include <utils/gui/div/GUIGlobalSelection.h>
00047 
00048 #ifdef CHECK_MEMORY_LEAKS
00049 #include <foreign/nvwa/debug_new.h>
00050 #endif // CHECK_MEMORY_LEAKS
00051 
00052 
00053 // ===========================================================================
00054 // FOX callback mapping
00055 // ===========================================================================
00056 FXDEFMAP(GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu)
00057 GUITrafficLightLogicWrapperPopupMenuMap[]= {
00058     FXMAPFUNC(SEL_COMMAND,  MID_SHOWPHASES,             GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdShowPhases),
00059     FXMAPFUNC(SEL_COMMAND,  MID_TRACKPHASES,            GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdBegin2TrackPhases),
00060     FXMAPFUNC(SEL_COMMAND,  MID_SWITCH_OFF,             GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdSwitchTLS2Off),
00061     FXMAPFUNCS(SEL_COMMAND, MID_SWITCH, MID_SWITCH+20, GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdSwitchTLSLogic),
00062 };
00063 
00064 // Object implementation
00065 FXIMPLEMENT(GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu, GUIGLObjectPopupMenu, GUITrafficLightLogicWrapperPopupMenuMap, ARRAYNUMBER(GUITrafficLightLogicWrapperPopupMenuMap))
00066 
00067 
00068 // ===========================================================================
00069 // method definitions
00070 // ===========================================================================
00071 /* -------------------------------------------------------------------------
00072  * GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu - methods
00073  * ----------------------------------------------------------------------- */
00074 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::GUITrafficLightLogicWrapperPopupMenu(
00075     GUIMainWindow &app, GUISUMOAbstractView &parent,
00076     GUIGlObject &o)
00077         : GUIGLObjectPopupMenu(app, parent, o) {}
00078 
00079 
00080 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::~GUITrafficLightLogicWrapperPopupMenu() throw() {}
00081 
00082 
00083 
00084 long
00085 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdBegin2TrackPhases(
00086     FXObject*,FXSelector,void*) {
00087     assert(myObject->getType()==GLO_TLLOGIC);
00088     static_cast<GUITrafficLightLogicWrapper*>(myObject)->begin2TrackPhases();
00089     return 1;
00090 }
00091 
00092 
00093 long
00094 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdShowPhases(
00095     FXObject*,FXSelector,void*) {
00096     assert(myObject->getType()==GLO_TLLOGIC);
00097     static_cast<GUITrafficLightLogicWrapper*>(myObject)->showPhases();
00098     return 1;
00099 }
00100 
00101 
00102 long
00103 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdSwitchTLS2Off(
00104     FXObject*,FXSelector sel,void*) {
00105     assert(myObject->getType()==GLO_TLLOGIC);
00106     static_cast<GUITrafficLightLogicWrapper*>(myObject)->switchTLSLogic(-1);
00107     return 1;
00108 }
00109 
00110 
00111 long
00112 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu::onCmdSwitchTLSLogic(
00113     FXObject*,FXSelector sel,void*) {
00114     assert(myObject->getType()==GLO_TLLOGIC);
00115     static_cast<GUITrafficLightLogicWrapper*>(myObject)->switchTLSLogic(FXSELID(sel)-MID_SWITCH);
00116     return 1;
00117 }
00118 
00119 
00120 
00121 /* -------------------------------------------------------------------------
00122  * GUITrafficLightLogicWrapper - methods
00123  * ----------------------------------------------------------------------- */
00124 GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapper(
00125     GUIGlObjectStorage &idStorage,
00126     MSTLLogicControl &control, MSTrafficLightLogic &tll) throw()
00127         : GUIGlObject(idStorage, "tl-logic:"+tll.getID()),
00128         myTLLogicControl(control), myTLLogic(tll) {}
00129 
00130 
00131 GUITrafficLightLogicWrapper::~GUITrafficLightLogicWrapper() throw() {}
00132 
00133 
00134 GUIGLObjectPopupMenu *
00135 GUITrafficLightLogicWrapper::getPopUpMenu(GUIMainWindow &app,
00136         GUISUMOAbstractView &parent) throw() {
00137     myApp = &app;
00138     GUIGLObjectPopupMenu *ret = new GUITrafficLightLogicWrapperPopupMenu(app, parent, *this);
00139     buildPopupHeader(ret, app);
00140     buildCenterPopupEntry(ret);
00141     //
00142     const MSTLLogicControl::TLSLogicVariants &vars = myTLLogicControl.get(myTLLogic.getID());
00143     std::vector<MSTrafficLightLogic*> logics = vars.getAllLogics();
00144     if (logics.size()>1) {
00145         std::vector<MSTrafficLightLogic*>::const_iterator i;
00146         size_t index = 0;
00147         for (i=logics.begin(); i!=logics.end(); ++i, ++index) {
00148             if (!vars.isActive(*i)) {
00149                 new FXMenuCommand(ret, ("Switch to '" + (*i)->getSubID() + "'").c_str(),
00150                                   GUIIconSubSys::getIcon(ICON_FLAG_MINUS), ret, (FXSelector)(MID_SWITCH+index));
00151             }
00152         }
00153         new FXMenuSeparator(ret);
00154     }
00155     new FXMenuCommand(ret, "Switch off", GUIIconSubSys::getIcon(ICON_FLAG_MINUS), ret, MID_SWITCH_OFF);
00156     new FXMenuCommand(ret, "Track Phases", 0, ret, MID_TRACKPHASES);
00157     new FXMenuCommand(ret, "Show Phases", 0, ret, MID_SHOWPHASES);
00158     new FXMenuSeparator(ret);
00159     //
00160     buildNameCopyPopupEntry(ret);
00161     buildSelectionPopupEntry(ret);
00162     buildPositionCopyEntry(ret, false);
00163     return ret;
00164 }
00165 
00166 
00167 void
00168 GUITrafficLightLogicWrapper::begin2TrackPhases() {
00169     GUITLLogicPhasesTrackerWindow *window =
00170         new GUITLLogicPhasesTrackerWindow(*myApp, myTLLogic, *this,
00171                                           new FuncBinding_StringParam<MSTLLogicControl, std::pair<SUMOTime, MSPhaseDefinition> >
00172                                           (&MSNet::getInstance()->getTLSControl(), &MSTLLogicControl::getPhaseDef, myTLLogic.getID()));
00173     window->create();
00174     window->show();
00175 }
00176 
00177 
00178 void
00179 GUITrafficLightLogicWrapper::showPhases() {
00180     GUITLLogicPhasesTrackerWindow *window =
00181         new GUITLLogicPhasesTrackerWindow(*myApp, myTLLogic, *this,
00182                                           static_cast<MSSimpleTrafficLightLogic&>(myTLLogic).getPhases());
00183     window->setBeginTime(0);
00184     window->create();
00185     window->show();
00186 }
00187 
00188 
00189 GUIParameterTableWindow *
00190 GUITrafficLightLogicWrapper::getParameterWindow(GUIMainWindow &,
00191         GUISUMOAbstractView &) throw() {
00192     return 0;
00193 }
00194 
00195 
00196 const std::string &
00197 GUITrafficLightLogicWrapper::getMicrosimID() const throw() {
00198     return myTLLogic.getID();
00199 }
00200 
00201 
00202 Boundary
00203 GUITrafficLightLogicWrapper::getCenteringBoundary() const throw() {
00204     Boundary ret;
00205     const MSTrafficLightLogic::LaneVectorVector &lanes = myTLLogic.getLanes();
00206     for (MSTrafficLightLogic::LaneVectorVector::const_iterator i=lanes.begin(); i!=lanes.end(); ++i) {
00207         const MSTrafficLightLogic::LaneVector &lanes2 = (*i);
00208         for (MSTrafficLightLogic::LaneVector::const_iterator j=lanes2.begin(); j!=lanes2.end(); ++j) {
00209             ret.add((*j)->getShape()[-1]);
00210         }
00211     }
00212     ret.grow(20);
00213     return ret;
00214 }
00215 
00216 
00217 void
00218 GUITrafficLightLogicWrapper::switchTLSLogic(int to) {
00219     if (to==-1) {
00220         myTLLogicControl.switchTo(myTLLogic.getID(), "off");
00221         return;
00222     }
00223     const MSTLLogicControl::TLSLogicVariants &vars = myTLLogicControl.get(myTLLogic.getID());
00224     std::vector<MSTrafficLightLogic*> logics = vars.getAllLogics();
00225     myTLLogicControl.switchTo(myTLLogic.getID(), logics[to]->getSubID());
00226 }
00227 
00228 
00229 int
00230 GUITrafficLightLogicWrapper::getLinkIndex(const MSLink * const link) const {
00231     return myTLLogic.getLinkIndex(link);
00232 }
00233 
00234 
00235 void
00236 GUITrafficLightLogicWrapper::drawGL(const GUIVisualizationSettings &s) const throw() {
00237 }
00238 
00239 
00240 /****************************************************************************/
00241 

Generated on Wed May 5 00:06:30 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6