60 FXIMPLEMENT(
GNEParametersDialog, FXDialogBox, GNEParametersDialogMap, ARRAYNUMBER(GNEParametersDialogMap))
74 myParameterDialogParent(ParameterDialogParent) {
80 FXScrollWindow* scrollWindow =
new FXScrollWindow(
this, LAYOUT_FILL);
94 while ((myParameterDialogParent->myEditedParameters.size() + 1) < myParameterRows.size()) {
95 delete myParameterRows.back();
96 myParameterRows.pop_back();
98 while ((myParameterDialogParent->myEditedParameters.size() + 1) > myParameterRows.size()) {
99 myParameterRows.push_back(
new ParameterRow(
this, myVerticalFrameRow));
102 for (
int i = 0; i < (int)myParameterDialogParent->myEditedParameters.size(); i++) {
103 myParameterRows.at(i)->enableRow(myParameterDialogParent->myEditedParameters.at(i).first, myParameterDialogParent->myEditedParameters.at(i).second);
106 myParameterRows.back()->toogleAddButton();
112 myParameterDialogParent->myEditedParameters = newParameters;
120 myParameterDialogParent->myEditedParameters.push_back(newParameter);
128 myParameterDialogParent->myEditedParameters.clear();
137 if (myParameterRows.size() > 0) {
138 myKeyLabel->setWidth(myParameterRows.front()->keyField->getWidth());
140 return FXGroupBox::onPaint(o, f, p);
147 for (
int i = 0; i < (int)myParameterRows.size(); i++) {
148 if (myParameterRows.at(i)->keyField == obj) {
150 myParameterDialogParent->myEditedParameters.at(i).first = myParameterRows.at(i)->keyField->getText().text();
153 myParameterRows.at(i)->keyField->setTextColor(FXRGB(0, 0, 0));
155 myParameterRows.at(i)->keyField->setTextColor(FXRGB(255, 0, 0));
156 myParameterRows.at(i)->keyField->killFocus();
158 }
else if (myParameterRows.at(i)->valueField == obj) {
160 myParameterDialogParent->myEditedParameters.at(i).second = myParameterRows.at(i)->valueField->getText().text();
163 myParameterRows.at(i)->valueField->setTextColor(FXRGB(0, 0, 0));
165 myParameterRows.at(i)->valueField->setTextColor(FXRGB(255, 0, 0));
166 myParameterRows.at(i)->valueField->killFocus();
177 if (myParameterRows.back()->button == obj) {
179 myParameterDialogParent->myEditedParameters.push_back(std::make_pair(
"",
""));
185 for (
int i = 0; i < (int)myParameterRows.size(); i++) {
186 if (myParameterRows.at(i)->button == obj && i < (int)myParameterDialogParent->myEditedParameters.size()) {
188 myParameterDialogParent->myEditedParameters.erase(myParameterDialogParent->myEditedParameters.begin() + i);
206 if (verticalFrameParent->id()) {
207 horizontalFrame->create();
216 delete horizontalFrame;
223 keyField->setText(
"");
225 valueField->setText(
"");
226 valueField->disable();
235 keyField->setText(parameter.c_str());
237 keyField->setTextColor(FXRGB(0, 0, 0));
239 keyField->setTextColor(FXRGB(255, 0, 0));
243 valueField->setText(value.c_str());
245 valueField->setTextColor(FXRGB(0, 0, 0));
247 valueField->setTextColor(FXRGB(255, 0, 0));
249 valueField->enable();
259 keyField->setText(
"");
261 valueField->setText(
"");
262 valueField->disable();
278 keyField->setText(other.
keyField->getText());
279 valueField->setText(other.
valueField->getText());
288 myParameterDialogParent(ParameterDialogParent) {
304 FXFileDialog opendialog(
this,
"Open Parameter Template");
306 opendialog.setSelectMode(SELECTFILE_EXISTING);
307 opendialog.setPatternList(
" Parameter Template files (*.xml)\nAll files (*)");
311 if (opendialog.execute()) {
313 std::string file = opendialog.getFilename().text();
315 int numberOfParametersbeforeLoad = (int)myParameterDialogParent->myEditedParameters.size();
319 WRITE_MESSAGE(
"Loading of Parameters From " + file +
" failed.");
322 WRITE_MESSAGE(
"Loaded " +
toString((
int)myParameterDialogParent->myEditedParameters.size() - numberOfParametersbeforeLoad) +
" Parameters.");
324 myParameterDialogParent->myParametersValues->updateValues();
334 "Select name of the Parameter Template file",
".xml",
344 for (
auto i = myParameterDialogParent->myEditedParameters.begin(); i != myParameterDialogParent->myEditedParameters.end(); i++) {
359 myParameterDialogParent->myParametersValues->clearParameters();
366 std::vector<std::pair<std::string, std::string> > ParametersNoEmpty;
367 std::vector<std::string> valuesEmpty;
369 for (
auto i = myParameterDialogParent->myEditedParameters.begin(); i != myParameterDialogParent->myEditedParameters.end(); i++) {
370 if (!i->first.empty()) {
371 ParametersNoEmpty.push_back(*i);
372 }
else if (i->first.empty() && !i->second.empty()) {
373 valuesEmpty.push_back(i->second);
377 std::sort(ParametersNoEmpty.begin(), ParametersNoEmpty.end());
379 for (
auto i : valuesEmpty) {
380 ParametersNoEmpty.push_back(std::make_pair(
"", i));
383 while (ParametersNoEmpty.size() < myParameterDialogParent->myEditedParameters.size()) {
384 ParametersNoEmpty.push_back(std::make_pair(
"",
""));
387 myParameterDialogParent->myParametersValues->setParameters(ParametersNoEmpty);
389 myParameterDialogParent->myParametersValues->updateValues();
397 FXDialogBox* ParameterHelpDialog =
new FXDialogBox(
this,
" Parameters Help",
GUIDesignDialogBox);
400 std::ostringstream help;
402 <<
"- Parameters are defined by a Key and a Value.\n"
403 <<
"- In Netedit can be defined using format key1=parameter1|key2=parameter2|...\n"
404 <<
" - Duplicated and empty Keys aren't valid.\n"
405 <<
" - Certain characters aren't allowed (\t\n\r@$%^&/|\\....)\n";
419 ParameterHelpDialog->create();
421 ParameterHelpDialog->show(PLACEMENT_CURSOR);
425 getApp()->runModalFor(ParameterHelpDialog);
434 myParametersOptionsParent(ParametersOptionsParent) {
444 SumoXMLTag tag = static_cast<SumoXMLTag>(element);
461 if (key.size() == 0) {
464 WRITE_WARNING(
"Key '" + key +
"' of Parameter contains invalid characters");
467 WRITE_WARNING(
"Value '" + value +
"'of Parameter contains invalid characters");
470 myParametersOptionsParent->myParameterDialogParent->myParametersValues->addParameter(std::make_pair(key, value));
494 FXHorizontalFrame* horizontalFrameParametersAndOptions =
new FXHorizontalFrame(mainFrame,
GUIDesignAuxiliarFrame);
518 if (i.first.empty()) {
520 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
522 FXMessageBox::warning(getApp(), MBOX_OK,
"Empty Parameter key",
"%s",
" Parameters with empty keys aren't allowed");
524 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
528 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
530 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Parameter key",
"%s",
"There are keys of Parameters with invalid characters");
532 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
536 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
538 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Parameter value",
"%s",
"There are values of Parameters with invalid characters");
540 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
545 std::vector<std::pair<std::string, std::string> > sortedParameters =
myEditedParameters;
546 std::sort(sortedParameters.begin(), sortedParameters.end());
547 for (
auto i = sortedParameters.begin(); i != sortedParameters.end(); i++) {
548 if (((i + 1) != sortedParameters.end()) && (i->first) == (i + 1)->first) {
550 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
552 FXMessageBox::warning(getApp(), MBOX_OK,
"Duplicated Parameters",
"%s",
" Parameters with the same Key aren't allowed");
554 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
561 getApp()->stopModal(
this, TRUE);
571 getApp()->stopModal(
this, FALSE);