Eclipse SUMO - Simulation of Urban MObility
GNEGenericParameterDialog.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // Dialog for edit rerouters
16 /****************************************************************************/
17 
18 // ===========================================================================
19 // included modules
20 // ===========================================================================
21 #include <config.h>
22 
25 #include <utils/xml/XMLSubSys.h>
26 #include <netedit/GNEViewNet.h>
27 
29 
30 
31 // ===========================================================================
32 // FOX callback mapping
33 // ===========================================================================
34 
35 FXDEFMAP(GNEGenericParameterDialog) GNEGenericParameterDialogMap[] = {
39  FXMAPFUNC(SEL_CHORE, FXDialogBox::ID_CANCEL, GNEGenericParameterDialog::onCmdCancel),
40  FXMAPFUNC(SEL_TIMEOUT, FXDialogBox::ID_CANCEL, GNEGenericParameterDialog::onCmdCancel),
41  FXMAPFUNC(SEL_COMMAND, FXDialogBox::ID_CANCEL, GNEGenericParameterDialog::onCmdCancel),
42  FXMAPFUNC(SEL_CLOSE, 0, GNEGenericParameterDialog::onCmdCancel),
43 };
44 
45 FXDEFMAP(GNEGenericParameterDialog::GenericParametersValues) GenericParametersValuesMap[] = {
49 };
50 
51 FXDEFMAP(GNEGenericParameterDialog::GenericParametersOptions) GenericParametersOptionsMap[] = {
57 };
58 
59 // Object implementation
60 FXIMPLEMENT(GNEGenericParameterDialog, FXDialogBox, GNEGenericParameterDialogMap, ARRAYNUMBER(GNEGenericParameterDialogMap))
61 FXIMPLEMENT(GNEGenericParameterDialog::GenericParametersValues, FXGroupBox, GenericParametersValuesMap, ARRAYNUMBER(GenericParametersValuesMap))
62 FXIMPLEMENT(GNEGenericParameterDialog::GenericParametersOptions, FXGroupBox, GenericParametersOptionsMap, ARRAYNUMBER(GenericParametersOptionsMap))
63 
64 // ===========================================================================
65 // member method definitions
66 // ===========================================================================
67 
68 // ---------------------------------------------------------------------------
69 // GNEGenericParameterDialog::GenericParametersValues - methods
70 // ---------------------------------------------------------------------------
71 
72 GNEGenericParameterDialog::GenericParametersValues::GenericParametersValues(FXHorizontalFrame* frame, std::vector<std::pair<std::string, std::string> >* genericParameters) :
73  FXGroupBox(frame, "Generic Parameters", GUIDesignGroupBoxFrameFill),
74  myGenericParameters(genericParameters) {
75  // create labels for keys and values
76  FXHorizontalFrame* horizontalFrameLabels = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
77  myKeyLabel = new FXLabel(horizontalFrameLabels, "key", nullptr, GUIDesignLabelThick100);
78  new FXLabel(horizontalFrameLabels, "value", nullptr, GUIDesignLabelCenterThick);
79  // create scroll windows
80  FXScrollWindow* scrollWindow = new FXScrollWindow(this, LAYOUT_FILL);
81  // create vertical frame for rows
82  myVerticalFrameRow = new FXVerticalFrame(scrollWindow, GUIDesignAuxiliarFrame);
83  // update values
84  updateValues();
85 }
86 
87 
89 
90 
91 void
93  // first show the correct number of rows
94  while ((myGenericParameters->size() + 1) < myGenericParameterRows.size()) {
95  delete myGenericParameterRows.back();
96  myGenericParameterRows.pop_back();
97  }
98  while ((myGenericParameters->size() + 1) > myGenericParameterRows.size()) {
100  }
101  // fill rows
102  for (int i = 0; i < (int)myGenericParameters->size(); i++) {
103  myGenericParameterRows.at(i)->enableRow(myGenericParameters->at(i).first, myGenericParameters->at(i).second);
104  }
105  // set last myGenericParameterRows with the add button
106  myGenericParameterRows.back()->toogleAddButton();
107 }
108 
109 
110 const std::vector<std::pair<std::string, std::string> >*
112  return myGenericParameters;
113 }
114 
115 
116 std::vector<std::pair<std::string, std::string> >
118  return *myGenericParameters;
119 }
120 
121 
122 void
123 GNEGenericParameterDialog::GenericParametersValues::setGenericParameters(const std::vector<std::pair<std::string, std::string> >& newGenericParameters) {
124  *myGenericParameters = newGenericParameters;
125  // update values
126  updateValues();
127 }
128 
129 
130 void
131 GNEGenericParameterDialog::GenericParametersValues::addGenericParameter(std::pair<std::string, std::string> newGenericParameter) {
132  myGenericParameters->push_back(newGenericParameter);
133  // update values
134  updateValues();
135 }
136 
137 
138 void
140  myGenericParameters->clear();
141  updateValues();
142 }
143 
144 
145 long
147  // size of key label has to be updated in every interation
148  if (myGenericParameterRows.size() > 0) {
149  myKeyLabel->setWidth(myGenericParameterRows.front()->keyField->getWidth());
150  }
151  return FXGroupBox::onPaint(o, f, p);
152 }
153 
154 
155 long
157  // find what value was changed
158  for (int i = 0; i < (int)myGenericParameterRows.size(); i++) {
159  if (myGenericParameterRows.at(i)->keyField == obj) {
160  // change key of Generic Parameter
161  myGenericParameters->at(i).first = myGenericParameterRows.at(i)->keyField->getText().text();
162  // change color of text field depending if key is valid or empty
164  myGenericParameterRows.at(i)->keyField->setTextColor(FXRGB(0, 0, 0));
165  } else {
166  myGenericParameterRows.at(i)->keyField->setTextColor(FXRGB(255, 0, 0));
167  myGenericParameterRows.at(i)->keyField->killFocus();
168  }
169  } else if (myGenericParameterRows.at(i)->valueField == obj) {
170  // change value of Generic Parameter
171  myGenericParameters->at(i).second = myGenericParameterRows.at(i)->valueField->getText().text();
172  // change color of text field depending if attribute is valid
174  myGenericParameterRows.at(i)->valueField->setTextColor(FXRGB(0, 0, 0));
175  } else {
176  myGenericParameterRows.at(i)->valueField->setTextColor(FXRGB(255, 0, 0));
177  myGenericParameterRows.at(i)->valueField->killFocus();
178  }
179  }
180  }
181  return 1;
182 }
183 
184 
185 long
187  // first check if add button was pressed
188  if (myGenericParameterRows.back()->button == obj) {
189  // create new generic parameter
190  myGenericParameters->push_back(std::make_pair("", ""));
191  // update values and finish
192  updateValues();
193  return 1;
194  } else {
195  // in other case, button press was a "remove button". Find id and remove the Generic Parameter
196  for (int i = 0; i < (int)myGenericParameterRows.size(); i++) {
197  if (myGenericParameterRows.at(i)->button == obj && i < (int)myGenericParameters->size()) {
198  // remove generic parameter
199  myGenericParameters->erase(myGenericParameters->begin() + i);
200  // update values and finish
201  updateValues();
202  return 1;
203  }
204  }
205  }
206  // Nothing to do
207  return 1;
208 }
209 
210 
212  horizontalFrame = new FXHorizontalFrame(verticalFrameParent, GUIDesignAuxiliarHorizontalFrame);
213  keyField = new FXTextField(horizontalFrame, GUIDesignTextFieldNCol, genericParametersValues, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
214  valueField = new FXTextField(horizontalFrame, GUIDesignTextFieldNCol, genericParametersValues, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
215  button = new FXButton(horizontalFrame, "", GUIIconSubSys::getIcon(ICON_REMOVE), genericParametersValues, MID_GNE_REMOVE_ATTRIBUTE, GUIDesignButtonIcon);
216  // only create elements if vertical frame was previously created
217  if (verticalFrameParent->id()) {
218  horizontalFrame->create();
219  }
220  // by defaults rows are disabled
221  disableRow();
222 }
223 
224 
226  // simply delete horizontalFrame (rest of elements will be automatic deleted due they are children of horizontal frame)
227  delete horizontalFrame;
228 }
229 
230 
231 void
233  // hide all
234  keyField->setText("");
235  keyField->disable();
236  valueField->setText("");
237  valueField->disable();
238  button->disable();
239  button->setIcon(GUIIconSubSys::getIcon(ICON_REMOVE));
240 }
241 
242 
243 void
244 GNEGenericParameterDialog::GenericParametersValues::GenericParameterRow::enableRow(const std::string& parameter, const std::string& value) const {
245  // restore color and enable key field
246  keyField->setText(parameter.c_str());
247  if (parameter.empty() || SUMOXMLDefinitions::isValidGenericParameterKey(parameter)) {
248  keyField->setTextColor(FXRGB(0, 0, 0));
249  } else {
250  keyField->setTextColor(FXRGB(255, 0, 0));
251  }
252  keyField->enable();
253  // restore color and enable value field
254  valueField->setText(value.c_str());
256  valueField->setTextColor(FXRGB(0, 0, 0));
257  } else {
258  valueField->setTextColor(FXRGB(255, 0, 0));
259  }
260  valueField->enable();
261  // enable button and set icon remove
262  button->enable();
263  button->setIcon(GUIIconSubSys::getIcon(ICON_REMOVE));
264 }
265 
266 
267 void
269  // clear and disable parameter and value fields
270  keyField->setText("");
271  keyField->disable();
272  valueField->setText("");
273  valueField->disable();
274  // enable remove button and set "add" icon and focus
275  button->enable();
276  button->setIcon(GUIIconSubSys::getIcon(ICON_ADD));
277  button->setFocus();
278 }
279 
280 
281 bool
283  return (button->getIcon() == GUIIconSubSys::getIcon(ICON_ADD));
284 }
285 
286 
287 void
289  keyField->setText(other.keyField->getText());
290  valueField->setText(other.valueField->getText());
291 }
292 
293 // ---------------------------------------------------------------------------
294 // GNEGenericParameterDialog::GenericParametersOptions - methods
295 // ---------------------------------------------------------------------------
296 
298  FXGroupBox(frame, "Options", GUIDesignGroupBoxFrame100),
299  myGenericParameterDialogParent(genericParameterDialogParent) {
300  // create buttons
306 }
307 
308 
310 
311 
312 long
314  // get the Additional file name
315  FXFileDialog opendialog(this, "Open Generic Parameter Template");
316  opendialog.setIcon(GUIIconSubSys::getIcon(ICON_GREENVEHICLE));
317  opendialog.setSelectMode(SELECTFILE_EXISTING);
318  opendialog.setPatternList("Generic Parameter Template files (*.xml)\nAll files (*)");
319  if (gCurrentFolder.length() != 0) {
320  opendialog.setDirectory(gCurrentFolder);
321  }
322  if (opendialog.execute()) {
323  gCurrentFolder = opendialog.getDirectory();
324  std::string file = opendialog.getFilename().text();
325  // save current number of generic parameters
326  int numberOfGenericParametersbeforeLoad = (int)myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size();
327  // Create additional handler and run parser
329  if (!XMLSubSys::runParser(handler, file, false)) {
330  WRITE_MESSAGE("Loading of Generic Parameters From " + file + " failed.");
331  }
332  // show loaded attributes
333  WRITE_MESSAGE("Loaded " + toString((int)myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size() - numberOfGenericParametersbeforeLoad) + " Generic Parameters.");
334  // update values
336  }
337  return 1;
338 }
339 
340 
341 long
343  // obtain file to save generic parameters
344  FXString file = MFXUtils::getFilename2Write(this,
345  "Select name of the Generic Parameter Template file", ".xml",
348  if (file == "") {
349  // None generic parameter file was selected, then stop function
350  return 1;
351  } else {
352  OutputDevice& device = OutputDevice::getDevice(file.text());
353  device.writeXMLHeader("genericParameter", "genericparameter_file.xsd");
354  // iterate over all generic parameters and save it in the filename
356  device.openTag(SUMO_TAG_PARAM);
357  device.writeAttr(SUMO_ATTR_KEY, i->first);
358  device.writeAttr(SUMO_ATTR_VALUE, i->second);
359  device.closeTag();
360  }
361  device.close();
362  }
363  return 1;
364 }
365 
366 
367 long
369  // simply clear generic parameters from GenericParametersValues
371  return 1;
372 }
373 
374 
375 long
377  std::vector<std::pair<std::string, std::string> > genericParametersNoEmpty;
378  std::vector<std::string> valuesEmpty;
379  // first extract empty values
381  if (!i->first.empty()) {
382  genericParametersNoEmpty.push_back(*i);
383  } else if (i->first.empty() && !i->second.empty()) {
384  valuesEmpty.push_back(i->second);
385  }
386  }
387  // now sort non-empty generic parameters
388  std::sort(genericParametersNoEmpty.begin(), genericParametersNoEmpty.end());
389  // add values without key
390  for (auto i : valuesEmpty) {
391  genericParametersNoEmpty.push_back(std::make_pair("", i));
392  }
393  // fill genericParametersNoEmpty with empty values
394  while (genericParametersNoEmpty.size() < myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size()) {
395  genericParametersNoEmpty.push_back(std::make_pair("", ""));
396  }
397  // finally replace generic parameters in myGenericParametersValues with genericParametersNoEmpty
399  // update values
401  return 1;
402 }
403 
404 
405 long
407  // Create dialog box
408  FXDialogBox* GenericParameterHelpDialog = new FXDialogBox(this, "Generic Parameters Help", GUIDesignDialogBox);
409  GenericParameterHelpDialog->setIcon(GUIIconSubSys::getIcon(ICON_APP_TABLE));
410  // set help text
411  std::ostringstream help;
412  help
413  << "- Generic Parameters are defined by a Key and a Value.\n"
414  << "- In Netedit can be defined using format key1=parameter1|key2=parameter2|...\n"
415  << " - Duplicated and empty Keys aren't valid.\n"
416  << " - Certain characters aren't allowed (\t\n\r@$%^&/|\\....)\n";
417  // Create label with the help text
418  new FXLabel(GenericParameterHelpDialog, help.str().c_str(), nullptr, GUIDesignLabelFrameInformation);
419  // Create horizontal separator
420  new FXHorizontalSeparator(GenericParameterHelpDialog, GUIDesignHorizontalSeparator);
421  // Create frame for OK Button
422  FXHorizontalFrame* myHorizontalFrameOKButton = new FXHorizontalFrame(GenericParameterHelpDialog, GUIDesignAuxiliarHorizontalFrame);
423  // Create Button Close (And two more horizontal frames to center it)
424  new FXHorizontalFrame(myHorizontalFrameOKButton, GUIDesignAuxiliarHorizontalFrame);
425  new FXButton(myHorizontalFrameOKButton, "OK\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), GenericParameterHelpDialog, FXDialogBox::ID_ACCEPT, GUIDesignButtonOK);
426  new FXHorizontalFrame(myHorizontalFrameOKButton, GUIDesignAuxiliarHorizontalFrame);
427  // Write Warning in console if we're in testing mode
428  WRITE_DEBUG("Opening Generic Parameter help dialog");
429  // create Dialog
430  GenericParameterHelpDialog->create();
431  // show in the given position
432  GenericParameterHelpDialog->show(PLACEMENT_CURSOR);
433  // refresh APP
434  getApp()->refresh();
435  // open as modal dialog (will block all windows until stop() or stopModal() is called)
436  getApp()->runModalFor(GenericParameterHelpDialog);
437  // Write Warning in console if we're in testing mode
438  WRITE_DEBUG("Closing Generic Parameter help dialog");
439  return 1;
440 }
441 
442 
444  SUMOSAXHandler(file),
445  myGenericParameterDialogParent(genericParameterDialogParent) {
446 }
447 
448 
450 
451 
452 void
454  // Obtain tag of element
455  SumoXMLTag tag = static_cast<SumoXMLTag>(element);
456  // only continue if tag is valid
457  if (tag != SUMO_TAG_NOTHING) {
458  // Call parse and build depending of tag
459  switch (tag) {
460  case SUMO_TAG_PARAM:
461  // Check that format of Generic Parameter is correct
462  if (!attrs.hasAttribute(SUMO_ATTR_KEY)) {
463  WRITE_WARNING("Key of Generic Parameter not defined");
464  } else if (!attrs.hasAttribute(SUMO_ATTR_VALUE)) {
465  WRITE_WARNING("Value of Generic Parameter not defined");
466  } else {
467  // obtain Key and value
468  std::string key = attrs.getString(SUMO_ATTR_KEY);
469  std::string value = attrs.getString(SUMO_ATTR_VALUE);
470  // check that parsed values are correct
472  if (key.size() == 0) {
473  WRITE_WARNING("Key of Generic Parameter cannot be empty");
474  } else {
475  WRITE_WARNING("Key '" + key + "' of Generic Parameter contains invalid characters");
476  }
478  WRITE_WARNING("Value '" + value + "'of Generic Parameter contains invalid characters");
479  } else {
480  // add generic parameter to vector of myGenericParameterDialogParent
482  }
483  }
484  break;
485  default:
486  break;
487  }
488  }
489 }
490 
491 // ---------------------------------------------------------------------------
492 // GNEGenericParameterDialog - methods
493 // ---------------------------------------------------------------------------
494 
495 GNEGenericParameterDialog::GNEGenericParameterDialog(GNEViewNet* viewNet, std::vector<std::pair<std::string, std::string> >* genericParameters) :
496  FXDialogBox(viewNet->getApp(), "Edit generic parameters", GUIDesignDialogBoxExplicitStretchable(400, 300)),
497  myViewNet(viewNet),
498  myCopyOfGenericParameters(*genericParameters) {
499  assert(genericParameters);
500  // set vehicle icon for this dialog
502  // create main frame
503  FXVerticalFrame* mainFrame = new FXVerticalFrame(this, GUIDesignAuxiliarFrame);
504  // create frame for Generic Parameters and options
505  FXHorizontalFrame* horizontalFrameGenericParametersAndOptions = new FXHorizontalFrame(mainFrame, GUIDesignAuxiliarFrame);
506  // create generic parameters values
507  myGenericParametersValues = new GenericParametersValues(horizontalFrameGenericParametersAndOptions, genericParameters);
508  // create generic parameters options
509  myGenericParametersOptions = new GenericParametersOptions(horizontalFrameGenericParametersAndOptions, this);
510  // add separator
511  new FXHorizontalSeparator(mainFrame, GUIDesignHorizontalSeparator);
512  // create dialog buttons bot centered
513  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(mainFrame, GUIDesignHorizontalFrame);
514  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
515  myAcceptButton = new FXButton(buttonsFrame, "accept\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), this, MID_GNE_ADDITIONALDIALOG_BUTTONACCEPT, GUIDesignButtonAccept);
516  myCancelButton = new FXButton(buttonsFrame, "cancel\t\tclose", GUIIconSubSys::getIcon(ICON_CANCEL), this, MID_GNE_ADDITIONALDIALOG_BUTTONCANCEL, GUIDesignButtonCancel);
517  myResetButton = new FXButton(buttonsFrame, "reset\t\tclose", GUIIconSubSys::getIcon(ICON_RESET), this, MID_GNE_ADDITIONALDIALOG_BUTTONRESET, GUIDesignButtonReset);
518  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
519 }
520 
521 
523 
524 
525 long
526 GNEGenericParameterDialog::onCmdAccept(FXObject*, FXSelector, void*) {
527  // check if all edited generic parameters are valid
528  for (auto i = myGenericParametersValues->getGenericParameters()->begin(); i != myGenericParametersValues->getGenericParameters()->end(); i++) {
529  if (i->first.empty()) {
530  // write warning if netedit is running in testing mode
531  WRITE_DEBUG("Opening FXMessageBox of type 'warning'");
532  // open warning Box
533  FXMessageBox::warning(getApp(), MBOX_OK, "Empty Generic Parameter key", "%s", "Generic Parameters with empty keys aren't allowed");
534  // write warning if netedit is running in testing mode
535  WRITE_DEBUG("Closed FXMessageBox of type 'warning' with 'OK'");
536  return 1;
537  } else if (!SUMOXMLDefinitions::isValidGenericParameterKey(i->first)) {
538  // write warning if netedit is running in testing mode
539  WRITE_DEBUG("Opening FXMessageBox of type 'warning'");
540  // open warning Box
541  FXMessageBox::warning(getApp(), MBOX_OK, "Invalid Generic Parameter key", "%s", "There are keys of Generic Parameters with invalid characters");
542  // write warning if netedit is running in testing mode
543  WRITE_DEBUG("Closed FXMessageBox of type 'warning' with 'OK'");
544  return 1;
545  } else if (!SUMOXMLDefinitions::isValidGenericParameterValue(i->second)) {
546  // write warning if netedit is running in testing mode
547  WRITE_DEBUG("Opening FXMessageBox of type 'warning'");
548  // open warning Box
549  FXMessageBox::warning(getApp(), MBOX_OK, "Invalid Generic Parameter value", "%s", "There are values of Generic Parameters with invalid characters");
550  // write warning if netedit is running in testing mode
551  WRITE_DEBUG("Closed FXMessageBox of type 'warning' with 'OK'");
552 
553  return 1;
554  }
555  }
556  // now check if there is duplicates generic parameters
557  std::vector<std::pair<std::string, std::string> > sortedGenericParameters = myGenericParametersValues->getCopyOfGenericParameters();
558  std::sort(sortedGenericParameters.begin(), sortedGenericParameters.end());
559  for (auto i = sortedGenericParameters.begin(); i != sortedGenericParameters.end(); i++) {
560  if (((i + 1) != sortedGenericParameters.end()) && (i->first) == (i + 1)->first) {
561  // write warning if netedit is running in testing mode
562  WRITE_DEBUG("Opening FXMessageBox of type 'warning'");
563  // open warning Box
564  FXMessageBox::warning(getApp(), MBOX_OK, "Duplicated Generic Parameters", "%s", "Generic Parameters with the same Key aren't allowed");
565  // write warning if netedit is running in testing mode
566  WRITE_DEBUG("Closed FXMessageBox of type 'warning' with 'OK'");
567  return 1;
568  }
569  }
570  // all ok, then close dialog
571  getApp()->stopModal(this, TRUE);
572  return 1;
573 }
574 
575 
576 long
577 GNEGenericParameterDialog::onCmdCancel(FXObject*, FXSelector, void*) {
578  // restore copy of generic parameters
580  // Stop Modal
581  getApp()->stopModal(this, FALSE);
582  return 1;
583 }
584 
585 
586 long
587 GNEGenericParameterDialog::onCmdReset(FXObject*, FXSelector, void*) {
588  // simply restore copy of generic parameters and continue editing
590  return 1;
591 }
592 
593 /****************************************************************************/
const std::vector< std::pair< std::string, std::string > > myCopyOfGenericParameters
#define GUIDesignDialogBoxExplicitStretchable(width, height)
design for dialog box with specift width and height that can be stretched (But not shrinked) ...
Definition: GUIDesigns.h:464
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:256
void close()
Closes the device and removes it from the dictionary.
long onCmdSortGenericParameters(FXObject *, FXSelector, void *)
event when user press sort generic parameters button
SumoXMLTag
Numbers representing SUMO-XML - element names.
#define GUIDesignHorizontalFrame
Definition: GUIDesigns.h:240
std::vector< std::pair< std::string, std::string > > getCopyOfGenericParameters() const
get a copy of current edited generic parameters
bool isButtonInAddMode() const
check if remove button is in mode "add"
const std::vector< std::pair< std::string, std::string > > * getGenericParameters() const
get current edited generic parameters
attribute removed
Definition: GUIAppEnum.h:617
FXButton * myAcceptButton
accept button
long onCmdAccept(FXObject *, FXSelector, void *)
long onCmdButtonPress(FXObject *, FXSelector, void *)
event when user press a remove (or add) button
#define GUIDesignButtonCancel
Cancel Button.
Definition: GUIDesigns.h:120
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
long onCmdHelpGenericParameter(FXObject *, FXSelector, void *)
event when user press help generic parameters button
FXString gCurrentFolder
The folder used as last.
SAX-handler base for SUMO-files.
static bool runParser(GenericSAXHandler &handler, const std::string &file, const bool isNet=false)
Runs the given handler on the given file; returns if everything&#39;s ok.
Definition: XMLSubSys.cpp:113
static bool isValidGenericParameterKey(const std::string &value)
whether the given string is a valid key for a generic parameter
static FXString getFilename2Write(FXWindow *parent, const FXString &header, const FXString &extension, FXIcon *icon, FXString &currentFolder)
Returns the file name to write.
Definition: MFXUtils.cpp:84
virtual bool hasAttribute(int id) const =0
Returns the information whether the named (by its enum-value) attribute is within the current list...
void copyValues(const GenericParameterRow &other)
copy values of other parameter Row
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:239
#define GUIDesignButtonRectangular100x23
button rectangular with thick and raise frame with a size of 100x23
Definition: GUIDesigns.h:81
virtual std::string getString(int id) const =0
Returns the string-value of the named (by its enum-value) attribute.
GNEGenericParameterDialog * myGenericParameterDialogParent
pointer to genericParameterDialog parent
Dialog for edit generic parameters.
FXLabel * myKeyLabel
label for key (its neccesary because has to be resized in every onPaint() iteration) ...
Generic parameters dialog sort.
Definition: GUIAppEnum.h:1049
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frames used to pack another frames extended in all directions ...
Definition: GUIDesigns.h:286
static bool isValidGenericParameterValue(const std::string &value)
whether the given string is a valid value for a generic parameter
long onCmdSetAttribute(FXObject *, FXSelector, void *)
event when user change an attribute
#define GUIDesignHorizontalSeparator
Definition: GUIDesigns.h:337
#define GUIDesignTextField
Definition: GUIDesigns.h:34
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:48
Encapsulated SAX-Attributes.
help button
Definition: GUIAppEnum.h:536
Generic parameters dialog clear.
Definition: GUIAppEnum.h:1047
bool writeXMLHeader(const std::string &rootElement, const std::string &schemaFile, std::map< SumoXMLAttr, std::string > attrs=std::map< SumoXMLAttr, std::string >())
Writes an XML header with optional configuration.
parameter associated to a certain key
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:289
FXDEFMAP(GNEGenericParameterDialog) GNEGenericParameterDialogMap[]
#define GUIDesignButtonReset
Reset Button.
Definition: GUIDesigns.h:123
GNEViewNet * myViewNet
to viewNet
std::vector< GenericParameterRow * > myGenericParameterRows
vector with the GenericParameterRows
long onCmdClearGenericParameters(FXObject *, FXSelector, void *)
event when user press clear generic parameters button
long onCmdSaveGenericParameters(FXObject *, FXSelector, void *)
event when user press save generic parameters button
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:246
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
Definition: GUIDesigns.h:210
void addGenericParameter(std::pair< std::string, std::string > newGenericParameter)
add a single generic parameter
#define GUIDesignGroupBoxFrameFill
Group box design extended over frame (X and Y)
Definition: GUIDesigns.h:258
#define GUIDesignButtonAccept
Accept Button.
Definition: GUIDesigns.h:117
FXButton * myResetButton
cancel button
#define GUIDesignButtonIcon
button only with icon (23x23)
Definition: GUIDesigns.h:75
#define GUIDesignLabelCenterThick
label extended over frame with thick and with text justify to center and height of 23 ...
Definition: GUIDesigns.h:183
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition: GUIDesigns.h:58
GenericParametersOptions * myGenericParametersOptions
pointer to generic parameters options
GenericParameterRow(GenericParametersValues *genericParametersValues, FXVerticalFrame *verticalFrameParent)
constructor
FXVerticalFrame * myVerticalFrameRow
vertical frame in which rows are placed
#define GUIDesignDialogBox
Definition: GUIDesigns.h:449
GNEGenericParameterDialog * myGenericParameterDialogParent
pointer to Shape Frame Parent
Generic parameters dialog load.
Definition: GUIAppEnum.h:1043
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
Generic parameters dialog save.
Definition: GUIAppEnum.h:1045
FXButton * myCancelButton
cancel button
GenericParametersValues * myGenericParametersValues
pointer to generic parameters values
std::vector< std::pair< std::string, std::string > > * myGenericParameters
edited generic parameters
void enableRow(const std::string &parameter, const std::string &value) const
enable rlow
attribute edited
Definition: GUIAppEnum.h:619
#define GUIDesignButtonOK
Definition: GUIDesigns.h:114
GNEGenericParameterHandler(GNEGenericParameterDialog *genericParameterDialogParent, const std::string &file)
Constructor.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
#define GUIDesignLabelThick100
label with thick, text justify to left and size of 100x23
Definition: GUIDesigns.h:213
void setGenericParameters(const std::vector< std::pair< std::string, std::string > > &newGenericParameters)
set generic parameters
long onCmdReset(FXObject *, FXSelector, void *)
event after press reset button
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
#define WRITE_MESSAGE(msg)
Definition: MsgHandler.h:240
long onCmdLoadGenericParameters(FXObject *, FXSelector, void *)
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
#define GUIDesignGroupBoxFrame100
Group box design for elements of width 100.
Definition: GUIDesigns.h:261