GUIGLObjectPopupMenu* GUIPerson::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIPersonPopupMenu(app, parent, *this, myAdditionalVisualizations); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); if (hasActiveAddVisualisation(&parent, VO_SHOW_ROUTE)) { new FXMenuCommand(ret, "Hide Current Route", 0, ret, MID_HIDE_CURRENTROUTE); } else { new FXMenuCommand(ret, "Show Current Route", 0, ret, MID_SHOW_CURRENTROUTE); } if (hasActiveAddVisualisation(&parent, VO_SHOW_WALKINGAREA_PATH)) { new FXMenuCommand(ret, "Hide Walkingarea Path", 0, ret, MID_HIDE_WALKINGAREA_PATH); } else { new FXMenuCommand(ret, "Show Walkingarea Path", 0, ret, MID_SHOW_WALKINGAREA_PATH); } new FXMenuSeparator(ret); if (parent.getTrackedID() != getGlID()) { new FXMenuCommand(ret, "Start Tracking", 0, ret, MID_START_TRACK); } else { new FXMenuCommand(ret, "Stop Tracking", 0, ret, MID_STOP_TRACK); } new FXMenuSeparator(ret); // buildShowParamsPopupEntry(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu* GUITrafficLightLogicWrapper::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { myApp = &app; GUIGLObjectPopupMenu* ret = new GUITrafficLightLogicWrapperPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); // const MSTLLogicControl::TLSLogicVariants& vars = myTLLogicControl.get(myTLLogic.getID()); std::vector<MSTrafficLightLogic*> logics = vars.getAllLogics(); if (logics.size() > 1) { std::vector<MSTrafficLightLogic*>::const_iterator i; size_t index = 0; for (i = logics.begin(); i != logics.end(); ++i, ++index) { if (!vars.isActive(*i)) { new FXMenuCommand(ret, ("Switch to '" + (*i)->getProgramID() + "'").c_str(), GUIIconSubSys::getIcon(ICON_FLAG_MINUS), ret, (FXSelector)(MID_SWITCH + index)); } } new FXMenuSeparator(ret); } new FXMenuCommand(ret, "Switch off", GUIIconSubSys::getIcon(ICON_FLAG_MINUS), ret, MID_SWITCH_OFF); new FXMenuCommand(ret, "Track Phases", 0, ret, MID_TRACKPHASES); new FXMenuCommand(ret, "Show Phases", 0, ret, MID_SHOWPHASES); new FXMenuSeparator(ret); MSTrafficLightLogic* tll = myTLLogicControl.getActive(myTLLogic.getID()); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); new FXMenuCommand(ret, ("phase: " + toString(tll->getCurrentPhaseIndex())).c_str(), 0, 0, 0); new FXMenuSeparator(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu* GNEJunction::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildPositionCopyEntry(ret, false); //if (parent.getVisualisationSettings()->editMode != GNE_MODE_CONNECT) { // // XXX if joinable // new FXMenuCommand(ret, "Join adjacent edges", 0, &parent, MID_GNE_JOIN_EDGES); //} FXMenuCommand* mcCustomShape = new FXMenuCommand(ret, "Set custom shape", 0, &parent, MID_GNE_NODE_SHAPE); FXMenuCommand* mcReplace = new FXMenuCommand(ret, "Replace by geometry node", 0, &parent, MID_GNE_NODE_REPLACE); const int editMode = parent.getVisualisationSettings()->editMode; const bool wrongMode = (editMode == GNE_MODE_CONNECT || editMode == GNE_MODE_TLS || editMode == GNE_MODE_CREATE_EDGE); if (wrongMode) { mcCustomShape->handle(&parent, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE), 0); } // checkIsRemovable requiers turnarounds to be computed. This is ugly if (myNBNode.getIncomingEdges().size() == 2 && myNBNode.getOutgoingEdges().size() == 2) { NBTurningDirectionsComputer::computeTurnDirectionsForNode(&myNBNode, false); } if (wrongMode || !myNBNode.checkIsRemovable()) { mcReplace->handle(&parent, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE), 0); } // let the GNEViewNet store the popup position (dynamic_cast<GNEViewNet&>(parent)).markPopupPosition(); return ret; }
GUIGLObjectPopupMenu* GNELane::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); new FXMenuCommand(ret, "Copy edge name to clipboard", 0, ret, MID_COPY_EDGE_NAME); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildPositionCopyEntry(ret, false); const int editMode = parent.getVisualisationSettings()->editMode; myTLSEditor = 0; if (editMode != GNE_MODE_CONNECT && editMode != GNE_MODE_TLS && editMode != GNE_MODE_CREATE_EDGE) { new FXMenuCommand(ret, "Split edge here", 0, &parent, MID_GNE_SPLIT_EDGE); new FXMenuCommand(ret, "Split edges in both direction here", 0, &parent, MID_GNE_SPLIT_EDGE_BIDI); new FXMenuCommand(ret, "Reverse edge", 0, &parent, MID_GNE_REVERSE_EDGE); new FXMenuCommand(ret, "Add reverse direction", 0, &parent, MID_GNE_ADD_REVERSE_EDGE); new FXMenuCommand(ret, "Set geometry endpoint here", 0, &parent, MID_GNE_SET_EDGE_ENDPOINT); new FXMenuCommand(ret, "Restore geometry endpoint", 0, &parent, MID_GNE_RESET_EDGE_ENDPOINT); if (gSelected.isSelected(GLO_LANE, getGlID())) { new FXMenuCommand(ret, "Straighten selected Edges", 0, &parent, MID_GNE_STRAIGHTEN); } else { new FXMenuCommand(ret, "Straighten edge", 0, &parent, MID_GNE_STRAIGHTEN); } if (gSelected.isSelected(GLO_LANE, getGlID())) { new FXMenuCommand(ret, "Duplicate selected lanes", 0, &parent, MID_GNE_DUPLICATE_LANE); } else { new FXMenuCommand(ret, "Duplicate lane", 0, &parent, MID_GNE_DUPLICATE_LANE); } } else if (editMode == GNE_MODE_TLS) { myTLSEditor = static_cast<GNEViewNet&>(parent).getViewParent()->getTLSEditorFrame(); if (myTLSEditor->controlsEdge(myParentEdge)) { new FXMenuCommand(ret, "Select state for all links from this edge:", 0, 0, 0); const std::vector<std::string> names = GNEInternalLane::LinkStateNames.getStrings(); for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); it++) { FXuint state = GNEInternalLane::LinkStateNames.get(*it); FXMenuRadio* mc = new FXMenuRadio(ret, (*it).c_str(), this, FXDataTarget::ID_OPTION + state); mc->setSelBackColor(MFXUtils::getFXColor(GNEInternalLane::colorForLinksState(state))); mc->setBackColor(MFXUtils::getFXColor(GNEInternalLane::colorForLinksState(state))); } } } else { FXMenuCommand* mc = new FXMenuCommand(ret, "Additional options available in 'Inspect Mode'", 0, 0, 0); mc->handle(&parent, FXSEL(SEL_COMMAND, FXWindow::ID_DISABLE), 0); } // buildShowParamsPopupEntry(ret, false); new FXMenuSeparator(ret); const SUMOReal pos = getShape().nearest_offset_to_point2D(parent.getPositionInformation()); const SUMOReal height = getShape().positionAtOffset2D(getShape().nearest_offset_to_point2D(parent.getPositionInformation())).z(); new FXMenuCommand(ret, ("Shape pos: " + toString(pos)).c_str(), 0, 0, 0); new FXMenuCommand(ret, ("Length pos: " + toString(getPositionRelativeToShapeLenght(pos))).c_str(), 0, 0, 0); new FXMenuCommand(ret, ("Height: " + toString(height)).c_str(), 0, 0, 0); // new FXMenuSeparator(ret); // buildPositionCopyEntry(ret, false); // let the GNEViewNet store the popup position (dynamic_cast<GNEViewNet&>(parent)).markPopupPosition(); return ret; }
GUIGLObjectPopupMenu* GUIChargingStation::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildShowParamsPopupEntry(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu * GUIJunctionWrapper::getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) throw() { GUIGLObjectPopupMenu *ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu* GUITriggeredRerouter::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUITriggeredRerouterPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildShowManipulatorPopupEntry(ret, false); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu* GUIPolygon::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app, false); FXString t(myType.c_str()); new FXMenuCommand(ret, "(" + t + ")", 0, 0, 0); new FXMenuSeparator(ret); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu* GUIEdge::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); if (MSGlobals::gUseMesoSim) { buildShowParamsPopupEntry(ret); } const SUMOReal pos = getLanes()[0]->getShape().nearest_offset_to_point2D(parent.getPositionInformation()); new FXMenuCommand(ret, ("pos: " + toString(pos)).c_str(), 0, 0, 0); buildPositionCopyEntry(ret, false); return ret; }
GUIGLObjectPopupMenu * GUILaneWrapper::getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) throw() { GUIGLObjectPopupMenu *ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); // buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); // buildShowParamsPopupEntry(ret, false); SUMOReal pos = myShape.nearest_position_on_line_to_point(parent.getPositionInformation()); new FXMenuCommand(ret, ("pos: " + toString(pos)).c_str(), 0, 0, 0); new FXMenuSeparator(ret); buildPositionCopyEntry(ret, false); return ret; }
// ------ inherited from GUIGlObject GUIGLObjectPopupMenu* GUILane::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); buildPopupHeader(ret, app); buildCenterPopupEntry(ret); // buildNameCopyPopupEntry(ret); buildSelectionPopupEntry(ret); // buildShowParamsPopupEntry(ret, false); const SUMOReal pos = interpolateGeometryPosToLanePos(myShape.nearest_offset_to_point2D(parent.getPositionInformation())); new FXMenuCommand(ret, ("pos: " + toString(pos)).c_str(), 0, 0, 0); new FXMenuSeparator(ret); buildPositionCopyEntry(ret, false); return ret; }