long GNEConnectorFrame::onCmdClearSelectedConnections(FXObject*, FXSelector, void*) { onCmdCancel(0, 0, 0); myViewNet->getUndoList()->p_begin("clear connections from selected lanes, edges and junctions"); const std::set<GUIGlID> ids = gSelected.getSelected(); for (std::set<GUIGlID>::const_iterator it = ids.begin(); it != ids.end(); it++) { GUIGlID id = *it; GUIGlObject* object = GUIGlObjectStorage::gIDStorage.getObjectBlocking(id); if (object) { switch (object->getType()) { case GLO_JUNCTION: { GNEJunction* junction = dynamic_cast<GNEJunction*>(object); junction->setLogicValid(false, myViewNet->getUndoList()); // clear connections junction->setLogicValid(false, myViewNet->getUndoList(), GNEAttributeCarrier::MODIFIED); // prevent re-guessing break; } case GLO_EDGE: { const GNEEdge::LaneVector& lanes = dynamic_cast<GNEEdge*>(object)->getLanes(); for (GNEEdge::LaneVector::const_iterator l_it = lanes.begin(); l_it != lanes.end(); ++l_it) { removeConnections(*l_it); } break; } case GLO_LANE: removeConnections(dynamic_cast<GNELane*>(object)); break; default: break; } } } myViewNet->getUndoList()->p_end(); return 1; }
long GNEConnectorFrame::onCmdResetSelectedConnections(FXObject*, FXSelector, void*) { onCmdCancel(0, 0, 0); myViewNet->getUndoList()->p_begin("reset connections from selected lanes"); const std::set<GUIGlID> nodeIDs = gSelected.getSelected(GLO_JUNCTION); for (std::set<GUIGlID>::const_iterator nid_it = nodeIDs.begin(); nid_it != nodeIDs.end(); nid_it++) { GUIGlObject* object = GUIGlObjectStorage::gIDStorage.getObjectBlocking(*nid_it); if (object) { GNEJunction* junction = dynamic_cast<GNEJunction*>(object); if (junction) { junction->setLogicValid(false, myViewNet->getUndoList()); } else { throw ProcessError("Wrong object type returned from gIDStorage"); } } } myViewNet->getUndoList()->p_end(); return 1; }