71 myCurrentJunctionLabel =
new FXLabel(
this,
"No junction selected", 0,
GUIDesignLabelLeft);
80 if (junctionID.empty()) {
81 myCurrentJunctionLabel->setText(
"No junction selected");
83 myCurrentJunctionLabel->setText((std::string(
"Current Junction: ") + junctionID).c_str());
93 myCrossingFrameParent(crossingFrameParent),
123 myCrossingFrameParent->getViewNet()->update();
125 myUseSelectedEdges->disable();
127 if (i->isAttributeCarrierSelected()) {
128 myUseSelectedEdges->enable();
132 myClearEdgesSelection->enable();
133 myInvertEdgesSelection->enable();
142 myUseSelectedEdges->disable();
143 myClearEdgesSelection->disable();
144 myInvertEdgesSelection->disable();
146 myCrossingFrameParent->myCrossingParameters->disableCrossingParameters();
155 for (
auto j : i->getLanes()) {
156 j->setSpecialColor(
nullptr);
160 myCrossingFrameParent->getViewNet()->update();
168 myCrossingFrameParent->myCrossingParameters->useSelectedEdges(
myCurrentJunction);
175 myCrossingFrameParent->myCrossingParameters->clearEdges();
192 myCrossingFrameParent(crossingFrameParent),
193 myCurrentParametersValid(true) {
194 FXHorizontalFrame* crossingParameter =
nullptr;
227 myCrossingEdgesLabel->enable();
228 myCrossingEdges->enable();
229 myCrossingPriorityLabel->enable();
232 myCrossingPriorityCheckButton->disable();
234 myCrossingPriorityCheckButton->enable();
236 myCrossingWidthLabel->enable();
237 myCrossingWidth->enable();
238 myHelpCrossingAttribute->enable();
240 onCmdSetAttribute(
nullptr, 0,
nullptr);
243 myCrossingPriorityCheckButton->setCheck(TRUE);
245 myCrossingPriorityCheckButton->setCheck(GNEAttributeCarrier::parse<bool>(tagProperties.getDefaultValue(
SUMO_ATTR_PRIORITY)));
247 myCrossingWidth->setText(tagProperties.getDefaultValue(
SUMO_ATTR_WIDTH).c_str());
248 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
255 myCrossingEdges->setText(
"");
256 myCrossingPriorityCheckButton->setCheck(
false);
257 myCrossingPriorityCheckButton->setText(
"false");
258 myCrossingWidth->setText(
"");
260 myCrossingEdgesLabel->disable();
261 myCrossingEdges->disable();
262 myCrossingPriorityLabel->disable();
263 myCrossingPriorityCheckButton->disable();
264 myCrossingWidthLabel->disable();
265 myCrossingWidth->disable();
266 myHelpCrossingAttribute->disable();
267 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(
false);
273 return myCrossingEdgesLabel->isEnabled();
279 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
280 if (currentJunction !=
nullptr) {
284 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
286 std::vector<std::string>::iterator itFinder = std::find(crossingEdges.begin(), crossingEdges.end(), edge->
getID());
287 if (itFinder == crossingEdges.end()) {
288 crossingEdges.push_back(edge->
getID());
290 crossingEdges.erase(itFinder);
292 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
295 onCmdSetAttribute(
nullptr, 0,
nullptr);
302 myCrossingEdges->setText(
"");
304 onCmdSetAttribute(
nullptr, 0,
nullptr);
310 std::vector<std::string> crossingEdges;
312 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), i) == myCurrentSelectedEdges.end()) {
313 crossingEdges.push_back(i->getID());
316 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
318 onCmdSetAttribute(
nullptr, 0,
nullptr);
324 std::vector<std::string> crossingEdges;
326 if (i->isAttributeCarrierSelected()) {
327 crossingEdges.push_back(i->getID());
330 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
332 onCmdSetAttribute(
nullptr, 0,
nullptr);
338 std::vector<NBEdge*> NBEdgeVector;
340 for (
auto i : myCurrentSelectedEdges) {
341 NBEdgeVector.push_back(i->getNBEdge());
349 if (myCrossingPriorityCheckButton->getCheck()) {
359 return myCurrentParametersValid;
365 return GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text());
371 myCurrentParametersValid =
true;
373 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
375 myCurrentSelectedEdges.clear();
377 for (
auto i : crossingEdges) {
379 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
381 if (edge ==
nullptr) {
382 myCurrentParametersValid =
false;
384 myCurrentParametersValid =
false;
387 auto itFinder = std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), edge);
388 if (itFinder == myCurrentSelectedEdges.end()) {
389 myCurrentSelectedEdges.push_back(edge);
391 myCurrentSelectedEdges.erase(itFinder);
397 if (myCurrentParametersValid) {
398 myCrossingEdges->setTextColor(FXRGB(0, 0, 0));
399 myCrossingEdges->killFocus();
401 myCrossingEdges->setTextColor(FXRGB(255, 0, 0));
402 myCurrentParametersValid =
false;
406 for (
auto i : myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getGNEEdges()) {
407 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), i) != myCurrentSelectedEdges.end()) {
408 for (
auto j : i->getLanes()) {
409 j->setSpecialColor(&myCrossingFrameParent->getEdgeCandidateSelectedColor());
412 for (
auto j : i->getLanes()) {
413 j->setSpecialColor(&myCrossingFrameParent->getEdgeCandidateColor());
418 myCrossingFrameParent->getViewNet()->update();
421 if (crossingEdges.empty()) {
422 myCurrentParametersValid =
false;
426 if (myCrossingPriorityCheckButton->getCheck()) {
427 myCrossingPriorityCheckButton->setText(
"true");
429 myCrossingPriorityCheckButton->setText(
"false");
433 if (GNEAttributeCarrier::canParse<double>(myCrossingWidth->getText().text()) &&
434 GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text()) > 0) {
435 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
436 myCrossingWidth->killFocus();
438 myCrossingWidth->setTextColor(FXRGB(255, 0, 0));
439 myCurrentParametersValid =
false;
443 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(myCurrentParametersValid);
460 myCrossingFrameParent(crossingFrameParent) {
473 if (myCrossingFrameParent->myCrossingParameters->isCurrentParametersValid()) {
475 if (myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getNBNode()->checkCrossingDuplicated(myCrossingFrameParent->myCrossingParameters->getCrossingEdges()) ==
false) {
477 myCrossingFrameParent->myViewNet->getUndoList()->add(
new GNEChange_Crossing(myCrossingFrameParent->myEdgeSelector->getCurrentJunction(),
478 myCrossingFrameParent->myCrossingParameters->getCrossingEdges(),
479 myCrossingFrameParent->myCrossingParameters->getCrossingWidth(),
480 myCrossingFrameParent->myCrossingParameters->getCrossingPriority(),
485 myCrossingFrameParent->myEdgeSelector->onCmdClearSelection(0, 0, 0);
487 WRITE_WARNING(
"There is already another crossing with the same edges in the junction; Duplicated crossing aren't allowed.");
497 myCreateCrossingButton->enable();
499 myCreateCrossingButton->disable();
508 GNEFrame(horizontalFrameParent, viewNet,
"Crossings") {
523 FXLabel* colorCandidateLabel =
new FXLabel(groupBoxLegend,
"Candidate", 0,
GUIDesignLabelLeft);
525 FXLabel* colorSelectedLabel =
new FXLabel(groupBoxLegend,
"Selected", 0,
GUIDesignLabelLeft);