84 if (dialogTest->
fixSolution ==
"savePositionInvalids") {
86 }
else if (dialogTest->
fixSolution ==
"fixPositions") {
88 }
else if (dialogTest->
fixSolution ==
"selectPositionInvalids") {
90 }
else if (dialogTest->
fixSolution ==
"activatePositionFriendlyPos") {
108 bool continueSaving =
true;
121 "fix positions of invalid additionals");
124 invalidSingleLaneAdditional->fixAdditionalProblem();
129 "select invalid additionals");
136 continueSaving =
false;
142 "fix multilane additionals problems");
147 invalidMultiLaneAdditional->fixAdditionalProblem();
152 for (
const auto& invalidMultiLaneAdditional : copyOfInvalidMultiLaneAdditionals) {
153 if (!invalidMultiLaneAdditional->isAdditionalValid()) {
174 invalidSingleLaneAdditional->fixAdditionalProblem();
193 FXGroupBox(fixAdditionalPositions->myMainFrame,
"Stopping places and E2 detectors with conflicts",
GUIDesignGroupBoxFrameFill) {
202 myInvalidSingleLaneAdditionals = invalidSingleLaneAdditionals;
203 myInvalidMultiLaneAdditionals = invalidMultiLaneAdditionals;
205 myTable->clearItems();
207 myTable->setTableSize(
int(myInvalidSingleLaneAdditionals.size() + myInvalidMultiLaneAdditionals.size()), 3);
209 myTable->setSelBackColor(FXRGBA(255, 255, 255, 255));
210 myTable->setSelTextColor(FXRGBA(0, 0, 0, 255));
211 myTable->setEditable(
false);
212 myTable->setVisibleColumns(4);
214 myTable->setColumnWidth(1, 160);
215 myTable->setColumnWidth(2, 280);
216 myTable->setColumnText(0,
"");
218 myTable->setColumnText(2,
"Conflict");
219 myTable->getRowHeader()->setWidth(0);
222 FXTableItem* item =
nullptr;
224 for (
const auto& invalidSingleLaneAdditional : myInvalidSingleLaneAdditionals) {
226 item =
new FXTableItem(
"", invalidSingleLaneAdditional->getACIcon());
227 item->setIconPosition(FXTableItem::CENTER_X);
228 myTable->setItem(indexRow, 0, item);
230 item =
new FXTableItem(invalidSingleLaneAdditional->getID().c_str());
231 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
232 myTable->setItem(indexRow, 1, item);
234 item =
new FXTableItem(invalidSingleLaneAdditional->getAdditionalProblem().c_str());
235 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
236 myTable->setItem(indexRow, 2, item);
241 for (
const auto& invalidMultiLaneAdditional : myInvalidMultiLaneAdditionals) {
243 item =
new FXTableItem(
"", invalidMultiLaneAdditional->getACIcon());
244 item->setIconPosition(FXTableItem::CENTER_X);
245 myTable->setItem(indexRow, 0, item);
247 item =
new FXTableItem(invalidMultiLaneAdditional->getID().c_str());
248 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
249 myTable->setItem(indexRow, 1, item);
251 item =
new FXTableItem((invalidMultiLaneAdditional->getAdditionalProblem()).c_str());
252 item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
253 myTable->setItem(indexRow, 2, item);
286 if (option == activateFriendlyPosition) {
287 activateFriendlyPosition->setCheck(
true);
288 fixPositions->setCheck(
false);
289 saveInvalids->setCheck(
false);
290 selectInvalids->setCheck(
false);
291 }
else if (option == fixPositions) {
292 activateFriendlyPosition->setCheck(
false);
293 fixPositions->setCheck(
true);
294 saveInvalids->setCheck(
false);
295 selectInvalids->setCheck(
false);
296 }
else if (option == saveInvalids) {
297 activateFriendlyPosition->setCheck(
false);
298 fixPositions->setCheck(
false);
299 saveInvalids->setCheck(
true);
300 selectInvalids->setCheck(
false);
301 }
else if (option == selectInvalids) {
302 activateFriendlyPosition->setCheck(
false);
303 fixPositions->setCheck(
false);
304 saveInvalids->setCheck(
false);
305 selectInvalids->setCheck(
true);
312 activateFriendlyPosition->enable();
313 fixPositions->enable();
314 saveInvalids->enable();
315 selectInvalids->enable();
321 activateFriendlyPosition->disable();
322 fixPositions->disable();
323 saveInvalids->disable();
324 selectInvalids->disable();
358 if (option == buildConnectionBetweenLanes) {
359 buildConnectionBetweenLanes->setCheck(
true);
360 removeInvalidElements->setCheck(
false);
361 }
else if (option == removeInvalidElements) {
362 buildConnectionBetweenLanes->setCheck(
false);
363 removeInvalidElements->setCheck(
true);
366 if (option == activateFriendlyPosition) {
367 activateFriendlyPosition->setCheck(
true);
368 fixPositions->setCheck(
false);
369 }
else if (option == fixPositions) {
370 activateFriendlyPosition->setCheck(
false);
371 fixPositions->setCheck(
true);
378 buildConnectionBetweenLanes->enable();
379 removeInvalidElements->enable();
380 activateFriendlyPosition->enable();
381 fixPositions->enable();
387 buildConnectionBetweenLanes->disable();
388 removeInvalidElements->disable();
389 activateFriendlyPosition->disable();
390 fixPositions->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 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 GUIDesignHorizontalFrame
Horizontal frame extended over frame parent with padding and spacing.
GUIIcon
An enumeration of icons used by the gui applications.
@ 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)
constructor
FXTable * myTable
list with the stoppingPlaces and detectors
std::vector< GNEAdditional * > myInvalidSingleLaneAdditionals
vector with the invalid single-lane additionals
void updateList(const std::vector< GNEAdditional * > &invalidSingleLaneAdditionals, const std::vector< GNEAdditional * > &invalidMultiLaneAdditionals)
update list with the invalid additionals
groupbox for group all radio buttons related to additionals with consecutive lanes
ConsecutiveLaneOptions(GNEFixAdditionalElements *fixAdditionalPositions)
build consecutive lane Options
FXRadioButton * removeInvalidElements
Option "remove invalid elements".
void selectOption(FXObject *option)
select option
FXRadioButton * fixPositions
Option "Fix Positions and save".
FXRadioButton * buildConnectionBetweenLanes
Option "build connections between lanes".
FXRadioButton * activateFriendlyPosition
Option "Activate friendlyPos and save".
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 * fixPositions
Option "Fix Positions and save".
FXRadioButton * selectInvalids
Option "Select invalid stops and cancel".
FXRadioButton * activateFriendlyPosition
Option "Activate friendlyPos and save".
FXRadioButton * saveInvalids
Option "Save invalid".
void disablePositionOptions()
disable position options
PositionOptions(GNEFixAdditionalElements *fixAdditionalPositions)
build Position Options
void enablePositionOptions()
enable position options
void selectOption(FXObject *option)
select option
~GNEFixAdditionalElements()
destructor
FXuint openDialog(const std::vector< GNEAdditional * > &invalidSingleLaneAdditionals, const std::vector< GNEAdditional * > &invalidMultiLaneAdditionals)
open fix additional dialog
PositionOptions * myPositionOptions
position options
long onCmdSelectOption(FXObject *obj, FXSelector, void *)
event when user select a option
ConsecutiveLaneOptions * myConsecutiveLaneOptions
consecutive lane options
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
AdditionalList * myAdditionalList
Additional List.
void runInternalTest(const InternalTestStep::DialogTest *modalArguments)
run internal test
long onCmdAccept(FXObject *, FXSelector, void *)
event after press accept button
long openFixDialog()
open dialog
GNEViewNet * myViewNet
view net
Buttons * myButtons
buttons
long closeFixDialog(const bool success)
stop fix elements dialog accepting changes
FXVerticalFrame * myMainFrame
main
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 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
dialog arguments (used for certain functions that opens modal dialogs)
const std::string fixSolution
solution for fix dialogs
MFXGroupBoxModule (based on FXGroupBox)