72 myCurrentJunctionLabel =
new FXLabel(
this,
"No junction selected", 0,
GUIDesignLabelLeft);
81 if (junctionID.empty()) {
82 myCurrentJunctionLabel->setText(
"No junction selected");
84 myCurrentJunctionLabel->setText((std::string(
"Current Junction: ") + junctionID).c_str());
94 myCrossingFrameParent(crossingFrameParent),
124 myCrossingFrameParent->getViewNet()->update();
126 myUseSelectedEdges->disable();
128 if (i->isAttributeCarrierSelected()) {
129 myUseSelectedEdges->enable();
133 myClearEdgesSelection->enable();
134 myInvertEdgesSelection->enable();
143 myUseSelectedEdges->disable();
144 myClearEdgesSelection->disable();
145 myInvertEdgesSelection->disable();
147 myCrossingFrameParent->myCrossingParameters->disableCrossingParameters();
156 for (
auto j : i->getLanes()) {
157 j->setSpecialColor(
nullptr);
161 myCrossingFrameParent->getViewNet()->update();
169 myCrossingFrameParent->myCrossingParameters->useSelectedEdges(
myCurrentJunction);
176 myCrossingFrameParent->myCrossingParameters->clearEdges();
193 myCrossingFrameParent(crossingFrameParent),
194 myCurrentParametersValid(true) {
195 FXHorizontalFrame* crossingParameter =
nullptr;
228 myCrossingEdgesLabel->enable();
229 myCrossingEdges->enable();
230 myCrossingPriorityLabel->enable();
232 myCrossingPriorityCheckButton->disable();
234 myCrossingPriorityCheckButton->enable();
236 myCrossingWidthLabel->enable();
237 myCrossingWidth->enable();
238 myHelpCrossingAttribute->enable();
240 onCmdSetAttribute(
nullptr, 0,
nullptr);
241 myCrossingPriorityCheckButton->setCheck(hasTLS ?
true :
243 myCrossingWidth->setText(tagProperties.getDefaultValue(
SUMO_ATTR_WIDTH).c_str());
244 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
251 myCrossingEdges->setText(
"");
252 myCrossingPriorityCheckButton->setCheck(
false);
253 myCrossingPriorityCheckButton->setText(
"false");
254 myCrossingWidth->setText(
"");
256 myCrossingEdgesLabel->disable();
257 myCrossingEdges->disable();
258 myCrossingPriorityLabel->disable();
259 myCrossingPriorityCheckButton->disable();
260 myCrossingWidthLabel->disable();
261 myCrossingWidth->disable();
262 myHelpCrossingAttribute->disable();
263 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(
false);
269 return myCrossingEdgesLabel->isEnabled();
275 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
276 if (currentJunction !=
nullptr) {
280 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
282 std::vector<std::string>::iterator itFinder = std::find(crossingEdges.begin(), crossingEdges.end(), edge->
getID());
283 if (itFinder == crossingEdges.end()) {
284 crossingEdges.push_back(edge->
getID());
286 crossingEdges.erase(itFinder);
288 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
291 onCmdSetAttribute(
nullptr, 0,
nullptr);
298 myCrossingEdges->setText(
"");
300 onCmdSetAttribute(
nullptr, 0,
nullptr);
306 std::vector<std::string> crossingEdges;
308 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), i) == myCurrentSelectedEdges.end()) {
309 crossingEdges.push_back(i->getID());
312 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
314 onCmdSetAttribute(
nullptr, 0,
nullptr);
320 std::vector<std::string> crossingEdges;
322 if (i->isAttributeCarrierSelected()) {
323 crossingEdges.push_back(i->getID());
326 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
328 onCmdSetAttribute(
nullptr, 0,
nullptr);
334 std::vector<NBEdge*> NBEdgeVector;
336 for (
auto i : myCurrentSelectedEdges) {
337 NBEdgeVector.push_back(i->getNBEdge());
345 if (myCrossingPriorityCheckButton->getCheck()) {
355 return myCurrentParametersValid;
361 return GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text());
367 myCurrentParametersValid =
true;
369 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
371 myCurrentSelectedEdges.clear();
373 for (
auto i : crossingEdges) {
375 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
377 if (edge ==
nullptr) {
378 myCurrentParametersValid =
false;
380 myCurrentParametersValid =
false;
383 auto itFinder = std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), edge);
384 if (itFinder == myCurrentSelectedEdges.end()) {
385 myCurrentSelectedEdges.push_back(edge);
387 myCurrentSelectedEdges.erase(itFinder);
393 if (myCurrentParametersValid) {
394 myCrossingEdges->setTextColor(FXRGB(0, 0, 0));
395 myCrossingEdges->killFocus();
397 myCrossingEdges->setTextColor(FXRGB(255, 0, 0));
398 myCurrentParametersValid =
false;
402 for (
auto i : myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getGNEEdges()) {
403 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), i) != myCurrentSelectedEdges.end()) {
404 for (
auto j : i->getLanes()) {
405 j->setSpecialColor(&myCrossingFrameParent->getEdgeCandidateSelectedColor());
408 for (
auto j : i->getLanes()) {
409 j->setSpecialColor(&myCrossingFrameParent->getEdgeCandidateColor());
414 myCrossingFrameParent->getViewNet()->update();
417 if (crossingEdges.empty()) {
418 myCurrentParametersValid =
false;
422 if (myCrossingPriorityCheckButton->getCheck()) {
423 myCrossingPriorityCheckButton->setText(
"true");
425 myCrossingPriorityCheckButton->setText(
"false");
429 if (GNEAttributeCarrier::canParse<double>(myCrossingWidth->getText().text()) &&
430 GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text()) > 0) {
431 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
432 myCrossingWidth->killFocus();
434 myCrossingWidth->setTextColor(FXRGB(255, 0, 0));
435 myCurrentParametersValid =
false;
439 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(myCurrentParametersValid);
456 myCrossingFrameParent(crossingFrameParent) {
469 if (myCrossingFrameParent->myCrossingParameters->isCurrentParametersValid()) {
471 if (myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getNBNode()->checkCrossingDuplicated(myCrossingFrameParent->myCrossingParameters->getCrossingEdges()) ==
false) {
473 myCrossingFrameParent->myViewNet->getUndoList()->add(
new GNEChange_Crossing(myCrossingFrameParent->myEdgeSelector->getCurrentJunction(),
474 myCrossingFrameParent->myCrossingParameters->getCrossingEdges(),
475 myCrossingFrameParent->myCrossingParameters->getCrossingWidth(),
476 myCrossingFrameParent->myCrossingParameters->getCrossingPriority(),
481 myCrossingFrameParent->myEdgeSelector->onCmdClearSelection(0, 0, 0);
483 WRITE_WARNING(
"There is already another crossing with the same edges in the junction; Duplicated crossing aren't allowed.");
493 myCreateCrossingButton->enable();
495 myCreateCrossingButton->disable();
504 GNEFrame(horizontalFrameParent, viewNet,
"Crossings") {
519 FXLabel* colorCandidateLabel =
new FXLabel(groupBoxLegend,
"Candidate", 0,
GUIDesignLabelLeft);
521 FXLabel* colorSelectedLabel =
new FXLabel(groupBoxLegend,
"Selected", 0,
GUIDesignLabelLeft);