68 FXIMPLEMENT(
GNEGenericParameterDialog, FXDialogBox, GNEGenericParameterDialogMap, ARRAYNUMBER(GNEGenericParameterDialogMap))
82 myGenericParameterDialogParent(genericParameterDialogParent),
83 myGenericParameters(genericParameters) {
89 FXScrollWindow* scrollWindow =
new FXScrollWindow(
this, LAYOUT_FILL);
119 const std::vector<std::pair<std::string, std::string> >*
125 std::vector<std::pair<std::string, std::string> >
160 return FXGroupBox::onPaint(o, f, p);
226 if (verticalFrameParent->id()) {
227 horizontalFrame->create();
236 delete horizontalFrame;
243 keyField->setText(
"");
245 valueField->setText(
"");
246 valueField->disable();
255 keyField->setText(parameter.c_str());
257 keyField->setTextColor(FXRGB(0, 0, 0));
259 keyField->setTextColor(FXRGB(255, 0, 0));
263 valueField->setText(value.c_str());
265 valueField->setTextColor(FXRGB(0, 0, 0));
267 valueField->setTextColor(FXRGB(255, 0, 0));
269 valueField->enable();
279 keyField->setText(
"");
281 valueField->setText(
"");
282 valueField->disable();
298 keyField->setText(other.
keyField->getText());
299 valueField->setText(other.
valueField->getText());
324 FXFileDialog opendialog(
this,
"Open Generic Parameter Template");
326 opendialog.setSelectMode(SELECTFILE_EXISTING);
327 opendialog.setPatternList(
"Generic Parameter Template files (*.xml)\nAll files (*)");
331 if (opendialog.execute()) {
333 std::string file = opendialog.getFilename().text();
339 WRITE_MESSAGE(
"Loading of Generic Parameters From " + file +
" failed.");
354 "Select name of the Generic Parameter Template file",
".xml",
362 device.
writeXMLHeader(
"genericParameter",
"genericparameter_file.xsd");
386 std::vector<std::pair<std::string, std::string> > genericParametersNoEmpty;
387 std::vector<std::string> valuesEmpty;
390 if (!i->first.empty()) {
391 genericParametersNoEmpty.push_back(*i);
392 }
else if (i->first.empty() && !i->second.empty()) {
393 valuesEmpty.push_back(i->second);
397 std::sort(genericParametersNoEmpty.begin(), genericParametersNoEmpty.end());
399 for (
auto i : valuesEmpty) {
400 genericParametersNoEmpty.push_back(std::make_pair(
"", i));
404 genericParametersNoEmpty.push_back(std::make_pair(
"",
""));
417 FXDialogBox* GenericParameterHelpDialog =
new FXDialogBox(
this,
"Generic Parameters Help",
GUIDesignDialogBox);
420 std::ostringstream help;
422 <<
"- Generic Parameters are defined by a Key and a Value.\n" 423 <<
"- In Netedit can be defined using format key1=parameter1|key2=parameter2|...\n" 424 <<
" - Duplicated and empty Keys aren't valid.\n" 425 <<
" - Certain characters aren't allowed (\t\n\r@$%^&/|\\....)\n";
437 WRITE_DEBUG(
"Opening Generic Parameter help dialog");
439 GenericParameterHelpDialog->create();
441 GenericParameterHelpDialog->show(PLACEMENT_CURSOR);
445 getApp()->runModalFor(GenericParameterHelpDialog);
447 WRITE_DEBUG(
"Closing Generic Parameter help dialog");
455 myMaximumNumberOfAttributesShown(false) {
482 if (key.size() == 0) {
485 WRITE_WARNING(
"Key '" + key +
"' of Generic Parameter contains invalid characters");
488 WRITE_WARNING(
"Value '" + value +
"'of Generic Parameter contains invalid characters");
509 assert(genericParameters);
515 FXHorizontalFrame* horizontalFrameGenericParametersAndOptions =
new FXHorizontalFrame(mainFrame,
GUIDesignAuxiliarFrame);
539 if (i->first.empty()) {
541 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
543 FXMessageBox::warning(getApp(), MBOX_OK,
"Empty Generic Parameter key",
"%s",
"Generic Parameters with empty keys aren't allowed");
545 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
549 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
551 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Generic Parameter key",
"%s",
"There are keys of Generic Parameters with invalid characters");
553 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
557 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
559 FXMessageBox::warning(getApp(), MBOX_OK,
"Invalid Generic Parameter value",
"%s",
"There are values of Generic Parameters with invalid characters");
561 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
568 std::sort(sortedGenericParameters.begin(), sortedGenericParameters.end());
569 for (
auto i = sortedGenericParameters.begin(); i != sortedGenericParameters.end(); i++) {
570 if (((i + 1) != sortedGenericParameters.end()) && (i->first) == (i + 1)->first) {
572 WRITE_DEBUG(
"Opening FXMessageBox of type 'warning'");
574 FXMessageBox::warning(getApp(), MBOX_OK,
"Duplicated Generic Parameters",
"%s",
"Generic Parameters with the same Key aren't allowed");
576 WRITE_DEBUG(
"Closed FXMessageBox of type 'warning' with 'OK'");
581 getApp()->stopModal(
this, TRUE);
591 getApp()->stopModal(
this, FALSE);
const std::vector< std::pair< std::string, std::string > > myCopyOfGenericParameters
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.
#define GUIDesignDialogBoxExplicitStretchable
design for dialog box with specift width and height that can be stretched (But not shrinked) ...
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
GNEGenericParameterDialog * myGenericParameterDialogParent
pointer to Shape Frame Parent
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.