60 FXIMPLEMENT(
GNEGenericParameterDialog, FXDialogBox, GNEGenericParameterDialogMap, ARRAYNUMBER(GNEGenericParameterDialogMap))
74 myGenericParameters(genericParameters) {
80 FXScrollWindow* scrollWindow =
new FXScrollWindow(
this, LAYOUT_FILL);
94 while ((myGenericParameters->size() + 1) < myGenericParameterRows.size()) {
95 delete myGenericParameterRows.back();
96 myGenericParameterRows.pop_back();
98 while ((myGenericParameters->size() + 1) > myGenericParameterRows.size()) {
102 for (
int i = 0; i < (int)myGenericParameters->size(); i++) {
103 myGenericParameterRows.at(i)->enableRow(myGenericParameters->at(i).first, myGenericParameters->at(i).second);
106 myGenericParameterRows.back()->toogleAddButton();
110 const std::vector<std::pair<std::string, std::string> >*
112 return myGenericParameters;
116 std::vector<std::pair<std::string, std::string> >
118 return *myGenericParameters;
124 *myGenericParameters = newGenericParameters;
132 myGenericParameters->push_back(newGenericParameter);
140 myGenericParameters->clear();
148 if (myGenericParameterRows.size() > 0) {
149 myKeyLabel->setWidth(myGenericParameterRows.front()->keyField->getWidth());
151 return FXGroupBox::onPaint(o, f, p);
158 for (
int i = 0; i < (int)myGenericParameterRows.size(); i++) {
159 if (myGenericParameterRows.at(i)->keyField == obj) {
161 myGenericParameters->at(i).first = myGenericParameterRows.at(i)->keyField->getText().text();
164 myGenericParameterRows.at(i)->keyField->setTextColor(FXRGB(0, 0, 0));
166 myGenericParameterRows.at(i)->keyField->setTextColor(FXRGB(255, 0, 0));
167 myGenericParameterRows.at(i)->keyField->killFocus();
169 }
else if (myGenericParameterRows.at(i)->valueField == obj) {
171 myGenericParameters->at(i).second = myGenericParameterRows.at(i)->valueField->getText().text();
174 myGenericParameterRows.at(i)->valueField->setTextColor(FXRGB(0, 0, 0));
176 myGenericParameterRows.at(i)->valueField->setTextColor(FXRGB(255, 0, 0));
177 myGenericParameterRows.at(i)->valueField->killFocus();
188 if (myGenericParameterRows.back()->button == obj) {
190 myGenericParameters->push_back(std::make_pair(
"",
""));
196 for (
int i = 0; i < (int)myGenericParameterRows.size(); i++) {
197 if (myGenericParameterRows.at(i)->button == obj && i < (int)myGenericParameters->size()) {
199 myGenericParameters->erase(myGenericParameters->begin() + i);
217 if (verticalFrameParent->id()) {
218 horizontalFrame->create();
227 delete horizontalFrame;
234 keyField->setText(
"");
236 valueField->setText(
"");
237 valueField->disable();
246 keyField->setText(parameter.c_str());
248 keyField->setTextColor(FXRGB(0, 0, 0));
250 keyField->setTextColor(FXRGB(255, 0, 0));
254 valueField->setText(value.c_str());
256 valueField->setTextColor(FXRGB(0, 0, 0));
258 valueField->setTextColor(FXRGB(255, 0, 0));
260 valueField->enable();
270 keyField->setText(
"");
272 valueField->setText(
"");
273 valueField->disable();
289 keyField->setText(other.
keyField->getText());
290 valueField->setText(other.
valueField->getText());
299 myGenericParameterDialogParent(genericParameterDialogParent) {
315 FXFileDialog opendialog(
this,
"Open Generic Parameter Template");
317 opendialog.setSelectMode(SELECTFILE_EXISTING);
318 opendialog.setPatternList(
"Generic Parameter Template files (*.xml)\nAll files (*)");
322 if (opendialog.execute()) {
324 std::string file = opendialog.getFilename().text();
326 int numberOfGenericParametersbeforeLoad = (int)myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size();
330 WRITE_MESSAGE(
"Loading of Generic Parameters From " + file +
" failed.");
333 WRITE_MESSAGE(
"Loaded " +
toString((
int)myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size() - numberOfGenericParametersbeforeLoad) +
" Generic Parameters.");
335 myGenericParameterDialogParent->myGenericParametersValues->updateValues();
345 "Select name of the Generic Parameter Template file",
".xml",
353 device.
writeXMLHeader(
"genericParameter",
"genericparameter_file.xsd");
355 for (
auto i = myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->begin(); i != myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->end(); i++) {
370 myGenericParameterDialogParent->myGenericParametersValues->clearGenericParameters();
377 std::vector<std::pair<std::string, std::string> > genericParametersNoEmpty;
378 std::vector<std::string> valuesEmpty;
380 for (
auto i = myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->begin(); i != myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->end(); i++) {
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);
388 std::sort(genericParametersNoEmpty.begin(), genericParametersNoEmpty.end());
390 for (
auto i : valuesEmpty) {
391 genericParametersNoEmpty.push_back(std::make_pair(
"", i));
394 while (genericParametersNoEmpty.size() < myGenericParameterDialogParent->myGenericParametersValues->getGenericParameters()->size()) {
395 genericParametersNoEmpty.push_back(std::make_pair(
"",
""));
398 myGenericParameterDialogParent->myGenericParametersValues->setGenericParameters(genericParametersNoEmpty);
400 myGenericParameterDialogParent->myGenericParametersValues->updateValues();
408 FXDialogBox* GenericParameterHelpDialog =
new FXDialogBox(
this,
"Generic Parameters Help",
GUIDesignDialogBox);
411 std::ostringstream 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";
428 WRITE_DEBUG(
"Opening Generic Parameter help dialog");
430 GenericParameterHelpDialog->create();
432 GenericParameterHelpDialog->show(PLACEMENT_CURSOR);
436 getApp()->runModalFor(GenericParameterHelpDialog);
438 WRITE_DEBUG(
"Closing Generic Parameter help dialog");
445 myGenericParameterDialogParent(genericParameterDialogParent) {
455 SumoXMLTag tag = static_cast<SumoXMLTag>(element);
472 if (key.size() == 0) {
475 WRITE_WARNING(
"Key '" + key +
"' of Generic Parameter contains invalid characters");
478 WRITE_WARNING(
"Value '" + value +
"'of Generic Parameter contains invalid characters");
499 assert(genericParameters);
505 FXHorizontalFrame* horizontalFrameGenericParametersAndOptions =
new FXHorizontalFrame(mainFrame,
GUIDesignAuxiliarFrame);
529 if (i->first.empty()) {
531 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
533 FXMessageBox::warning(getApp(), MBOX_OK,
"Empty Generic Parameter key",
"%s",
"Generic Parameters with empty keys aren't allowed");
535 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
539 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
541 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Generic Parameter key",
"%s",
"There are keys of Generic Parameters with invalid characters");
543 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
547 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
549 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Generic Parameter value",
"%s",
"There are values of Generic Parameters with invalid characters");
551 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
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) {
562 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
564 FXMessageBox::warning(getApp(), MBOX_OK,
"Duplicated Generic Parameters",
"%s",
"Generic Parameters with the same Key aren't allowed");
566 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
571 getApp()->stopModal(
this, TRUE);
581 getApp()->stopModal(
this, FALSE);