60 FXIMPLEMENT(
GNEGenericParameterDialog, FXDialogBox, GNEGenericParameterDialogMap, ARRAYNUMBER(GNEGenericParameterDialogMap))
74 myGenericParameters(genericParameters) {
80 FXScrollWindow* scrollWindow =
new FXScrollWindow(
this, LAYOUT_FILL);
110 const std::vector<std::pair<std::string, std::string> >*
116 std::vector<std::pair<std::string, std::string> >
151 return FXGroupBox::onPaint(o, f, p);
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();
330 WRITE_MESSAGE(
"Loading of Generic Parameters From " + file +
" failed.");
345 "Select name of the Generic Parameter Template file",
".xml",
353 device.
writeXMLHeader(
"genericParameter",
"genericparameter_file.xsd");
377 std::vector<std::pair<std::string, std::string> > genericParametersNoEmpty;
378 std::vector<std::string> valuesEmpty;
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));
395 genericParametersNoEmpty.push_back(std::make_pair(
"",
""));
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");
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);
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) ...
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
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
std::vector< std::pair< std::string, std::string > > getCopyOfGenericParameters() const
get a copy of current edited generic parameters
~GNEGenericParameterDialog()
destructor
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
FXButton * myAcceptButton
accept button
long onCmdAccept(FXObject *, FXSelector, void *)
long onCmdButtonPress(FXObject *, FXSelector, void *)
event when user press a remove (or add) button
void toogleAddButton()
toogle add button
#define GUIDesignButtonCancel
Cancel Button.
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.
load generic parameters from a filename
~GenericParametersValues()
destructor
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's ok.
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 ¤tFolder)
Returns the file name to write.
virtual bool hasAttribute(int id) const =0
Returns the information whether the named (by its enum-value) attribute is within the current list...
FXButton * mySortButton
sort button
void copyValues(const GenericParameterRow &other)
copy values of other parameter Row
#define WRITE_WARNING(msg)
#define GUIDesignButtonRectangular100x23
button rectangular with thick and raise frame with a size of 100x23
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.
FXButton * mySaveButton
save button
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frames used to pack another frames extended in all directions ...
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
#define GUIDesignTextField
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
FXButton * myHelpButton
help button
Encapsulated SAX-Attributes.
Generic parameters dialog clear.
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 ...
FXTextField * valueField
TextField for value.
FXDEFMAP(GNEGenericParameterDialog) GNEGenericParameterDialogMap[]
#define GUIDesignButtonReset
Reset Button.
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
void disableRow()
disable row
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
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)
GNEGenericParameterDialog()
FOX needs this.
#define GUIDesignButtonAccept
Accept Button.
FXButton * myResetButton
cancel button
#define GUIDesignButtonIcon
button only with icon (23x23)
void updateValues()
update values
~GNEGenericParameterHandler()
Destructor.
#define GUIDesignLabelCenterThick
label extended over frame with thick and with text justify to center and height of 23 ...
#define GUIDesignTextFieldNCol
Num of column of text field.
GenericParametersOptions * myGenericParametersOptions
pointer to generic parameters options
GenericParameterRow(GenericParametersValues *genericParametersValues, FXVerticalFrame *verticalFrameParent)
constructor
FXVerticalFrame * myVerticalFrameRow
vertical frame in which rows are placed
#define GUIDesignDialogBox
~GenericParametersOptions()
destructor
GNEGenericParameterDialog * myGenericParameterDialogParent
pointer to Shape Frame Parent
Generic parameters dialog load.
FXButton * myLoadButton
load button
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
Generic parameters dialog save.
FXButton * myCancelButton
cancel button
~GenericParameterRow()
destructor
long onPaint(FXObject *o, FXSelector f, void *p)
FXButton * myClearButton
clear 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 ¶meter, const std::string &value) const
enable rlow
#define GUIDesignButtonOK
void clearGenericParameters()
clear all generic parameters
GNEGenericParameterHandler(GNEGenericParameterDialog *genericParameterDialogParent, const std::string &file)
Constructor.
Static storage of an output device and its base (abstract) implementation.
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
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)
GenericParametersOptions()
FOX needs this.
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.
class for generic parameters Row
FXTextField * keyField
TextField for parameter.
#define GUIDesignGroupBoxFrame100
Group box design for elements of width 100.