40FXIMPLEMENT(
GNEFixAdditionalElements, FXDialogBox, GNEFixAdditionalElementsMap, ARRAYNUMBER(GNEFixAdditionalElementsMap))
54 myAdditionalList =
new AdditionalList(
this, invalidSingleLaneAdditionals, invalidMultiLaneAdditionals);
60 if (myAdditionalList->myInvalidSingleLaneAdditionals.empty()) {
61 myPositionOptions->disablePositionOptions();
64 if (myAdditionalList->myInvalidMultiLaneAdditionals.empty()) {
65 myConsecutiveLaneOptions->disableConsecutiveLaneOptions();
74 myKeepOldButton->setFocus();
92 bool continueSaving =
true;
105 "fix positions of invalid additionals");
108 i->fixAdditionalProblem();
113 "select invalid additionals");
120 continueSaving =
false;
126 "fix multilane additionals problems");
131 i->fixAdditionalProblem();
136 for (
auto i : copyOfInvalidMultiLaneAdditionals) {
137 if (!i->isAdditionalValid()) {
158 i->fixAdditionalProblem();
163 if (continueSaving) {
165 getApp()->stopModal(
this, TRUE);
168 getApp()->stopModal(
this, FALSE);
177 getApp()->stopModal(
this, FALSE);
186 FXGroupBox(fixAdditionalPositions->myMainFrame,
"Stopping places and E2 detectors with conflicts",
GUIDesignGroupBoxFrameFill),
187 myInvalidSingleLaneAdditionals(invalidSingleLaneAdditionals),
188 myInvalidMultiLaneAdditionals(invalidMultiLaneAdditionals) {
191 myTable->setSelBackColor(FXRGBA(255, 255, 255, 255));
192 myTable->setSelTextColor(FXRGBA(0, 0, 0, 255));
201 myTable->setColumnWidth(1, 160);
202 myTable->setColumnWidth(2, 280);
205 myTable->setColumnText(2,
"Conflict");
206 myTable->getRowHeader()->setWidth(0);
209 FXTableItem* item =
nullptr;
213 item =
new FXTableItem(
"", i->getACIcon());
214 item->setIconPosition(FXTableItem::CENTER_X);
215 myTable->setItem(indexRow, 0, item);
217 item =
new FXTableItem(i->getID().c_str());
218 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
219 myTable->setItem(indexRow, 1, item);
221 item =
new FXTableItem(i->getAdditionalProblem().c_str());
222 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
223 myTable->setItem(indexRow, 2, item);
230 item =
new FXTableItem(
"", i->getACIcon());
231 item->setIconPosition(FXTableItem::CENTER_X);
232 myTable->setItem(indexRow, 0, item);
234 item =
new FXTableItem(i->getID().c_str());
235 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
236 myTable->setItem(indexRow, 1, item);
238 item =
new FXTableItem((i->getAdditionalProblem()).c_str());
239 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
240 myTable->setItem(indexRow, 2, item);
273 if (option == activateFriendlyPositionAndSave) {
274 activateFriendlyPositionAndSave->setCheck(
true);
275 fixPositionsAndSave->setCheck(
false);
276 saveInvalid->setCheck(
false);
277 selectInvalidStopsAndCancel->setCheck(
false);
278 }
else if (option == fixPositionsAndSave) {
279 activateFriendlyPositionAndSave->setCheck(
false);
280 fixPositionsAndSave->setCheck(
true);
281 saveInvalid->setCheck(
false);
282 selectInvalidStopsAndCancel->setCheck(
false);
283 }
else if (option == saveInvalid) {
284 activateFriendlyPositionAndSave->setCheck(
false);
285 fixPositionsAndSave->setCheck(
false);
286 saveInvalid->setCheck(
true);
287 selectInvalidStopsAndCancel->setCheck(
false);
288 }
else if (option == selectInvalidStopsAndCancel) {
289 activateFriendlyPositionAndSave->setCheck(
false);
290 fixPositionsAndSave->setCheck(
false);
291 saveInvalid->setCheck(
false);
292 selectInvalidStopsAndCancel->setCheck(
true);
299 activateFriendlyPositionAndSave->enable();
300 fixPositionsAndSave->enable();
301 saveInvalid->enable();
302 selectInvalidStopsAndCancel->enable();
308 activateFriendlyPositionAndSave->disable();
309 fixPositionsAndSave->disable();
310 saveInvalid->disable();
311 selectInvalidStopsAndCancel->disable();
345 if (option == buildConnectionBetweenLanes) {
346 buildConnectionBetweenLanes->setCheck(
true);
347 removeInvalidElements->setCheck(
false);
348 }
else if (option == removeInvalidElements) {
349 buildConnectionBetweenLanes->setCheck(
false);
350 removeInvalidElements->setCheck(
true);
353 if (option == activateFriendlyPositionAndSave) {
354 activateFriendlyPositionAndSave->setCheck(
true);
355 fixPositionsAndSave->setCheck(
false);
356 }
else if (option == fixPositionsAndSave) {
357 activateFriendlyPositionAndSave->setCheck(
false);
358 fixPositionsAndSave->setCheck(
true);
365 buildConnectionBetweenLanes->enable();
366 removeInvalidElements->enable();
367 activateFriendlyPositionAndSave->enable();
368 fixPositionsAndSave->enable();
374 buildConnectionBetweenLanes->disable();
375 removeInvalidElements->disable();
376 activateFriendlyPositionAndSave->disable();
377 fixPositionsAndSave->disable();
FXDEFMAP(GNEFixAdditionalElements) GNEFixAdditionalElementsMap[]
@ MID_GNE_BUTTON_CANCEL
cancel button
@ MID_CHOOSEN_OPERATION
set type of selection
@ MID_GNE_FIXSTOPPINGPLACES_CHANGE
FixStoppingPlaces dialog.
@ MID_GNE_BUTTON_ACCEPT
accept button
#define GUIDesignTableAdditionals
design for tables used in additional dialogs
#define GUIDesignButtonAccept
Accept Button.
#define GUIDesignButtonCancel
Cancel Button.
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignVerticalSeparator
vertical separator
#define GUIDesignAuxiliarVerticalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignGroupBoxFrameFill
Group box design extended over frame (X and Y)
#define GUIDesignRadioButton
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frame extended in all directions
#define GUIDesignHorizontalFrame
Horizontal frame extended over frame parent with padding and spacing.
#define GUIDesignDialogBoxExplicitStretchable(width, height)
design for dialog box with specific width and height that can be stretched (But not shrunk)
@ GNE_ATTR_SELECTED
element is selected
int GUIDesignHeight
the default size for GUI elements
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::vector< GNEAdditional * > myInvalidMultiLaneAdditionals
vector with the invalid multi-lane additionals
AdditionalList(GNEFixAdditionalElements *fixAdditionalPositions, const std::vector< GNEAdditional * > &invalidSingleLaneAdditionals, const std::vector< GNEAdditional * > &invalidMultiLaneAdditionals)
constructor
FXTable * myTable
list with the stoppingPlaces and detectors
std::vector< GNEAdditional * > myInvalidSingleLaneAdditionals
vector with the invalid single-lane additionals
groupbox for group all radio buttons related to additionals with consecutive lanes
FXRadioButton * activateFriendlyPositionAndSave
Option "Activate friendlyPos and save".
ConsecutiveLaneOptions(GNEFixAdditionalElements *fixAdditionalPositions)
build consecutive lane Options
FXRadioButton * removeInvalidElements
Option "remove invalid elements".
void selectOption(FXObject *option)
select option
FXRadioButton * fixPositionsAndSave
Option "Fix Positions and save".
FXRadioButton * buildConnectionBetweenLanes
Option "build connections between lanes".
void disableConsecutiveLaneOptions()
disable consecutive lane options
void enableConsecutiveLaneOptions()
enable consecutive lane options
groupbox for group all radio buttons related to additionals with single lanes
FXRadioButton * fixPositionsAndSave
Option "Fix Positions and save".
FXRadioButton * selectInvalidStopsAndCancel
Option "Select invalid stops and cancel".
FXRadioButton * activateFriendlyPositionAndSave
Option "Activate friendlyPos and save".
void disablePositionOptions()
disable position options
PositionOptions(GNEFixAdditionalElements *fixAdditionalPositions)
build Position Options
void enablePositionOptions()
enable position options
void selectOption(FXObject *option)
select option
FXRadioButton * saveInvalid
Option "Save invalid".
Dialog for edit rerouters.
~GNEFixAdditionalElements()
destructor
PositionOptions * myPositionOptions
position options
long onCmdSelectOption(FXObject *obj, FXSelector, void *)
ConsecutiveLaneOptions * myConsecutiveLaneOptions
consecutive lane options
GNEViewNet * myViewNet
view net
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
AdditionalList * myAdditionalList
Additional List.
FXVerticalFrame * myMainFrame
main
long onCmdAccept(FXObject *, FXSelector, void *)
event after press accept button
void deleteAdditional(GNEAdditional *additional, GNEUndoList *undoList)
remove additional
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
GNENet * getNet() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_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 button
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
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
MFXGroupBoxModule (based on FXGroupBox)