54 TL("Select a solution for StoppingPlaces and
E2 detectors")) {
57 TL(
"Activate friendlyPos and save"),
"",
58 TL(
"Friendly pos parameter will be activated in all stopping places and E2 detectors"),
62 TL(
"Save invalid positions"),
"",
63 TL(
"Save stopping places and E2 detectors with invalid positions"),
67 TL(
"Fix positions and save"),
"",
68 TL(
"Position of stopping places and E2 detectors will be fixed"),
72 TL(
"Select invalid additionals"),
"",
73 TL(
"Cancel saving of additionals and select invalid stopping places and E2 detectors"),
76 registerOption(myActivateFriendlyPosition);
77 registerOption(mySaveInvalids);
78 registerOption(myFixPositions);
79 registerOption(mySelectInvalids);
81 myActivateFriendlyPosition->setCheck(
true);
88 if (solution ==
"savePositionInvalids") {
90 }
else if (solution ==
"fixPositions") {
92 }
else if (solution ==
"selectPositionInvalids") {
94 }
else if (solution ==
"activatePositionFriendlyPos") {
102 if (myConflictedElements.size() > 0) {
103 auto undoList = myFixElementDialogParent->getApplicationWindow()->getUndoList();
105 if (myActivateFriendlyPosition->getCheck() == TRUE) {
106 undoList->begin(myConflictedElements.front().getElement(),
109 for (
const auto& conflictedElement : myConflictedElements) {
113 }
else if (myFixPositions->getCheck() == TRUE) {
114 undoList->begin(myConflictedElements.front().getElement(),
115 TL(
"fix positions of invalid additionals"));
117 for (
const auto& conflictedElement : myConflictedElements) {
118 conflictedElement.getElement()->fixAdditionalProblem();
121 }
else if (mySelectInvalids->getCheck() == TRUE) {
122 undoList->begin(myConflictedElements.front().getElement(),
123 TL(
"select invalid additionals"));
125 for (
const auto& conflictedElement : myConflictedElements) {
126 conflictedElement.getElement()->setAttribute(
GNE_ATTR_SELECTED,
"true", undoList);
139 if (obj == myActivateFriendlyPosition) {
140 myActivateFriendlyPosition->setCheck(
true);
141 myFixPositions->setCheck(
false);
142 mySaveInvalids->setCheck(
false);
143 mySelectInvalids->setCheck(
false);
144 }
else if (obj == myFixPositions) {
145 myActivateFriendlyPosition->setCheck(
false);
146 myFixPositions->setCheck(
true);
147 mySaveInvalids->setCheck(
false);
148 mySelectInvalids->setCheck(
false);
149 }
else if (obj == mySaveInvalids) {
150 myActivateFriendlyPosition->setCheck(
false);
151 myFixPositions->setCheck(
false);
152 mySaveInvalids->setCheck(
true);
153 mySelectInvalids->setCheck(
false);
154 }
else if (obj == mySelectInvalids) {
155 myActivateFriendlyPosition->setCheck(
false);
156 myFixPositions->setCheck(
false);
157 mySaveInvalids->setCheck(
false);
158 mySelectInvalids->setCheck(
true);
169 TL(
"Select a solution for Multilane E2 detectors")) {
172 TL(
"Build connections between lanes"),
"",
173 TL(
"New connections will be created between non-connected lanes"),
177 TL(
"Remove invalid E2 detectors"),
"",
178 TL(
"Remove Multilane E2 Detectors with non-connected lanes"),
182 TL(
"Activate friendlyPos and save"),
"",
183 TL(
"Friendly pos parameter will be activated in all stopping places and E2 detectors"),
187 TL(
"Fix positions and save"),
"",
188 TL(
"Position of stopping places and E2 detectors will be fixed"),
208 if (myConflictedElements.size() > 0) {
209 auto net = myFixElementDialogParent->getApplicationWindow()->getViewNet()->getNet();
210 auto undoList = myFixElementDialogParent->getApplicationWindow()->getUndoList();
212 undoList->begin(myConflictedElements.front().getElement(),
213 TL(
"fix multilane additionals problems"));
215 if (myBuildConnectionBetweenLanes->getCheck() == TRUE) {
217 for (
const auto& conflictedElement : myConflictedElements) {
218 conflictedElement.getElement()->fixAdditionalProblem();
221 const std::vector<ConflictElement> copyOfConflictedElements = myConflictedElements;
222 myConflictedElements.clear();
223 for (
const auto& conflictedElement : copyOfConflictedElements) {
224 if (!conflictedElement.getElement()->isAdditionalValid()) {
225 myConflictedElements.push_back(conflictedElement);
228 }
else if (myRemoveInvalidElements->getCheck() == TRUE) {
230 for (
const auto& conflictedElement : myConflictedElements) {
231 net->deleteAdditional(conflictedElement.getElement(), undoList);
234 myConflictedElements.clear();
237 if (myActivateFriendlyPosition->getCheck() == TRUE) {
239 for (
const auto& conflictedElement : myConflictedElements) {
242 }
else if (myFixPositions->getCheck() == TRUE) {
244 for (
const auto& conflictedElement : myConflictedElements) {
245 conflictedElement.getElement()->fixAdditionalProblem();
258 if (obj == myBuildConnectionBetweenLanes) {
259 myBuildConnectionBetweenLanes->setCheck(
true);
260 myRemoveInvalidElements->setCheck(
false);
261 }
else if (obj == myRemoveInvalidElements) {
262 myBuildConnectionBetweenLanes->setCheck(
false);
263 myRemoveInvalidElements->setCheck(
true);
266 if (obj == myActivateFriendlyPosition) {
267 myActivateFriendlyPosition->setCheck(
true);
268 myFixPositions->setCheck(
false);
269 }
else if (obj == myFixPositions) {
270 myActivateFriendlyPosition->setCheck(
false);
271 myFixPositions->setCheck(
true);
281 const std::vector<GNEAdditional*>& elements) :
288 std::vector<ConflictElement> invalidSingleLanes, invalidMultiLanes;
290 for (
const auto& invalidAdditionalElement : elements) {
292 auto fixElement = ConflictElement(invalidAdditionalElement,
293 invalidAdditionalElement->getID(),
294 invalidAdditionalElement->getACIcon(),
295 invalidAdditionalElement->getAdditionalProblem());
297 if (invalidAdditionalElement->getTagProperty()->hasAttribute(
SUMO_ATTR_LANE)) {
298 invalidSingleLanes.push_back(fixElement);
299 }
else if (invalidAdditionalElement->getTagProperty()->hasAttribute(
SUMO_ATTR_LANES)) {
300 invalidMultiLanes.push_back(fixElement);
FXDEFMAP(GNEFixAdditionalElementsDialog::PositionOptions) PositionOptionsMap[]
@ MID_CHOOSEN_OPERATION
set type of selection
#define GUIDesignRadioButtonFix
design for radio button with fixed height (used in fix elements dialogs)
GUIIcon
An enumeration of icons used by the gui applications.
@ GNE_ATTR_SELECTED
element is selected
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
The main window of Netedit.
void openDialog(FXWindow *focusableElement=nullptr)
open dialog
fix consecutive lane options
long onCmdSelectOption(FXObject *obj, FXSelector, void *)
called when user select a option
FXRadioButton * myFixPositions
Option "Fix Positions and save".
FXRadioButton * myRemoveInvalidElements
Option "remove invalid elements".
bool applyFixOption()
apply selected fix option
FXRadioButton * myBuildConnectionBetweenLanes
FOX needs this.
void selectInternalTestSolution(const std::string &solution)
select internal test solution
FXRadioButton * myActivateFriendlyPosition
Option "Activate friendlyPos and save".
ConsecutiveLaneOptions(GNEFixAdditionalElementsDialog *fixAdditionalPositions)
FOX-declaration.
long onCmdSelectOption(FXObject *obj, FXSelector, void *)
called when user select a option
FXRadioButton * mySelectInvalids
Option "Select invalid stops and cancel".
FXRadioButton * myFixPositions
Option "Fix Positions and save".
bool applyFixOption()
apply selected fix option
FXRadioButton * mySaveInvalids
Option "Save invalid".
FXRadioButton * myActivateFriendlyPosition
FOX needs this.
void selectInternalTestSolution(const std::string &solution)
select internal test solution
GNEFixAdditionalElementsDialog(GNEApplicationWindow *mainWindow, const std::vector< GNEAdditional * > &elements)
Constructor.
ConsecutiveLaneOptions * myConsecutiveLaneOptions
consecutive lane options
~GNEFixAdditionalElementsDialog()
destructor
PositionOptions * myPositionOptions
position options
void registerOption(FXWindow *option)
add option to options container (used for adjust width and enable/disable)
void setInvalidElements(const std::vector< ConflictElement > &conflictedElements)
set invalid elements to fix
FXVerticalFrame * myRightFrameOptions
vertical right frame for options
FXVerticalFrame * myLeftFrameOptions
vertical left frame for options
FXVerticalFrame * myLeftFrame
left frame for fix options
static FXRadioButton * buildFXRadioButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXObject *tgt, FXSelector sel, FXuint opts=RADIOBUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build radio button
MFXGroupBoxModule (based on FXGroupBox)