00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
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
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
00065 FXIMPLEMENT(GUITrafficLightLogicWrapper::GUITrafficLightLogicWrapperPopupMenu, GUIGLObjectPopupMenu, GUITrafficLightLogicWrapperPopupMenuMap, ARRAYNUMBER(GUITrafficLightLogicWrapperPopupMenuMap))
00066
00067
00068
00069
00070
00071
00072
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
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