62 myPersonTypeFrameParent(personTypeFrameParent),
63 myCurrentPersonType(
nullptr) {
67 for (
const auto& i : myPersonTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(
SUMO_TAG_PTYPE)) {
68 myTypeMatchBox->appendItem(i.first.c_str());
73 if (myTypeMatchBox->getNumItems() <= 20) {
74 myTypeMatchBox->setNumVisible((
int)myTypeMatchBox->getNumItems());
76 myTypeMatchBox->setNumVisible(20);
88 return myCurrentPersonType;
94 myCurrentPersonType = vType;
95 refreshPersonTypeSelector();
102 myTypeMatchBox->clearItems();
104 for (
const auto& i : myPersonTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(
SUMO_TAG_PTYPE)) {
105 myTypeMatchBox->appendItem(i.first.c_str());
108 if (myTypeMatchBox->getNumItems() <= 20) {
109 myTypeMatchBox->setNumVisible((
int)myTypeMatchBox->getNumItems());
111 myTypeMatchBox->setNumVisible(20);
114 for (
int i = 0; i < (int)myTypeMatchBox->getNumItems(); i++) {
115 if (myTypeMatchBox->getItem(i).text() == myCurrentPersonType->getID()) {
116 myTypeMatchBox->setCurrentItem(i);
125 for (
int i = 0; i < (int)myTypeMatchBox->getNumItems(); i++) {
126 if (myTypeMatchBox->getItem(i).text() == myCurrentPersonType->getID()) {
127 myTypeMatchBox->setCurrentItem(i);
132 myPersonTypeFrameParent->myPersonTypeEditor->refreshPersonTypeEditorModul();
134 myPersonTypeFrameParent->myPersonTypeAttributesEditor->showAttributeEditorModul(
false,
true);
141 for (
const auto& i : myPersonTypeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(
SUMO_TAG_PTYPE)) {
142 if (i.first == myTypeMatchBox->getText().text()) {
144 myCurrentPersonType = i.second;
146 myTypeMatchBox->setTextColor(FXRGB(0, 0, 0));
148 myPersonTypeFrameParent->myPersonTypeEditor->refreshPersonTypeEditorModul();
150 myPersonTypeFrameParent->myPersonTypeAttributesEditor->showAttributeEditorModul(
false,
true);
152 WRITE_DEBUG((
"Selected item '" + myTypeMatchBox->getText() +
"' in PersonTypeSelector").text());
156 myCurrentPersonType =
nullptr;
158 myPersonTypeFrameParent->myPersonTypeEditor->refreshPersonTypeEditorModul();
160 myPersonTypeFrameParent->myPersonTypeAttributesEditor->hideAttributesEditorModul();
162 myTypeMatchBox->setTextColor(FXRGB(255, 0, 0));
164 WRITE_DEBUG(
"Selected invalid item in PersonTypeSelector");
174 myPersonTypeFrameParent(personTypeFrameParent) {
191 refreshPersonTypeEditorModul();
205 if (myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType() ==
nullptr) {
207 myDeletePersonTypeButton->disable();
208 myResetDefaultPersonTypeButton->disable();
209 myCopyPersonTypeButton->disable();
210 }
else if (GNEAttributeCarrier::parse<bool>(myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getAttribute(
GNE_ATTR_DEFAULT_VTYPE))) {
212 myCopyPersonTypeButton->enable();
214 myDeletePersonTypeButton->hide();
215 myResetDefaultPersonTypeButton->show();
217 if (GNEAttributeCarrier::parse<bool>(myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getAttribute(
GNE_ATTR_DEFAULT_VTYPE_MODIFIED))) {
218 myResetDefaultPersonTypeButton->enable();
220 myResetDefaultPersonTypeButton->disable();
224 myCopyPersonTypeButton->enable();
226 myDeletePersonTypeButton->show();
227 myDeletePersonTypeButton->enable();
228 myResetDefaultPersonTypeButton->hide();
238 std::string personTypeID = myPersonTypeFrameParent->myViewNet->getNet()->generateDemandElementID(
SUMO_TAG_PTYPE);
242 myPersonTypeFrameParent->myViewNet->getUndoList()->p_begin(
"create person type");
244 myPersonTypeFrameParent->myViewNet->getUndoList()->p_end();
246 myPersonTypeFrameParent->myPersonTypeSelector->setCurrentPersonType(personType);
248 myPersonTypeFrameParent->myPersonTypeEditor->refreshPersonTypeEditorModul();
256 if (myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getChildDemandElements().size() > 0) {
257 std::string plural = myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getChildDemandElements().size() == 1 ? (
"") : (
"s");
259 WRITE_DEBUG(
"Opening FXMessageBox 'remove vType'");
261 FXuint answer = FXMessageBox::question(getApp(), MBOX_YES_NO,
263 (
"Delete " +
toString(
SUMO_TAG_PTYPE) +
" '" + myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getID() +
264 "' will remove " +
toString(myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->getChildDemandElements().size()) +
265 " person" + plural +
". Continue?").c_str());
269 WRITE_DEBUG(
"Closed FXMessageBox 'remove vType' with 'No'");
270 }
else if (answer == 4) {
271 WRITE_DEBUG(
"Closed FXMessageBox 'remove vType' with 'ESC'");
275 myPersonTypeFrameParent->myViewNet->getUndoList()->p_begin(
"delete person type");
277 myPersonTypeFrameParent->myViewNet->getNet()->deleteDemandElement(myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType(),
278 myPersonTypeFrameParent->myViewNet->getUndoList());
280 myPersonTypeFrameParent->myViewNet->getUndoList()->p_end();
284 myPersonTypeFrameParent->myViewNet->getUndoList()->p_begin(
"delete person type");
286 myPersonTypeFrameParent->myViewNet->getNet()->deleteDemandElement(myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType(),
287 myPersonTypeFrameParent->myViewNet->getUndoList());
289 myPersonTypeFrameParent->myViewNet->getUndoList()->p_end();
298 myPersonTypeFrameParent->getViewNet()->getUndoList()->p_begin(
"reset default person type values");
303 myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->setAttribute(i.getAttr(),
"", myPersonTypeFrameParent->myViewNet->getUndoList());
311 myPersonTypeFrameParent->myPersonTypeSelector->getCurrentPersonType()->setAttribute(
GNE_ATTR_DEFAULT_VTYPE_MODIFIED,
"false", myPersonTypeFrameParent->myViewNet->getUndoList());
313 myPersonTypeFrameParent->getViewNet()->getUndoList()->p_end();
315 myPersonTypeFrameParent->myPersonTypeSelector->refreshPersonTypeSelector();
323 std::string personTypeID = myPersonTypeFrameParent->myViewNet->getNet()->generateDemandElementID(
SUMO_TAG_PTYPE);
331 myPersonTypeFrameParent->myViewNet->getUndoList()->p_begin(
"copy person type");
333 myPersonTypeFrameParent->myViewNet->getUndoList()->add(
new GNEChange_DemandElement(personTypeCopy,
true),
true);
335 myPersonTypeFrameParent->myViewNet->getUndoList()->p_end();
337 myPersonTypeFrameParent->myPersonTypeSelector->refreshPersonTypeSelector();
339 myPersonTypeFrameParent->myPersonTypeSelector->setCurrentPersonType(personTypeCopy);
341 myPersonTypeFrameParent->myPersonTypeEditor->refreshPersonTypeEditorModul();
351 GNEFrame(horizontalFrameParent, viewNet,
"Person Types") {
FXDEFMAP(GNEPersonTypeFrame::PersonTypeSelector) personTypeSelectorMap[]
@ MID_GNE_DELETE
delete element
@ MID_GNE_COPY
copy element
@ MID_GNE_CREATE
create element
@ MID_GNE_SET_TYPE
used to select a type of element in a combo box
@ MID_GNE_RESET
reset element
#define GUIDesignComboBox
#define GUIDesignComboBoxNCol
number of column of every combo box
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
@ SVC_PEDESTRIAN
pedestrian
const std::string DEFAULT_PEDTYPE_ID
const std::string DEFAULT_VTYPE_ID
@ SUMO_TAG_PTYPE
description of a person type (used in NETEDIT)
@ GNE_ATTR_DEFAULT_VTYPE
Flag to check if VType is a default VType.
@ GNE_ATTR_DEFAULT_VTYPE_MODIFIED
Flag to check if a default VType was modified.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static const GNETagProperties & getTagProperties(SumoXMLTag tag)
get Tag Properties
An Element which don't belongs to GNENet but has influency in the simulation.
void showAttributeEditorModul(bool includeExtended, bool forceAttributeEnabled)
show attributes of multiple ACs
GNEViewNet * myViewNet
View Net.
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
virtual void show()
show Frame
virtual void hide()
hide Frame
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
FXButton * myResetDefaultPersonTypeButton
"delete default person type" button
long onCmdCreatePersonType(FXObject *, FXSelector, void *)
PersonTypeEditor(GNEPersonTypeFrame *personTypeFrameParent)
FOX-declaration.
void showPersonTypeEditorModul()
show PersonTypeEditor modul
FXButton * myCopyPersonTypeButton
"copy person type"
long onCmdDeletePersonType(FXObject *, FXSelector, void *)
Called when "Delete Vehicle Type" button is clicked.
void refreshPersonTypeEditorModul()
update PersonTypeEditor modul
~PersonTypeEditor()
destructor
FXButton * myDeletePersonTypeButton
"delete person type" button
long onCmdResetPersonType(FXObject *, FXSelector, void *)
Called when "Delete Vehicle Type" button is clicked.
FXButton * myCreatePersonTypeButton
"create person type" button
void hidePersonTypeEditorModul()
hide PersonTypeEditor box
long onCmdCopyPersonType(FXObject *, FXSelector, void *)
Called when "Copy Vehicle Type" button is clicked.
void setCurrentPersonType(GNEDemandElement *vType)
set current Vehicle Type
~PersonTypeSelector()
destructor
void refreshPersonTypeSelector()
refresh person type
GNEDemandElement * getCurrentPersonType() const
get current Vehicle Type
long onCmdSelectItem(FXObject *, FXSelector, void *)
PersonTypeSelector * myPersonTypeSelector
person type selector
void attributeUpdated()
function called after set a valid attribute in AttributeCreator/AttributeEditor/ParametersEditor/....
~GNEPersonTypeFrame()
Destructor.
GNEFrameAttributesModuls::AttributesEditor * myPersonTypeAttributesEditor
editorinternal person type attributes
PersonTypeEditor * myPersonTypeEditor
Vehicle Type editor (Create, copy, etc.)
GNEPersonTypeFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet)
Constructor.
PersonTypeSelector * getPersonTypeSelector() const
get person type selector
GNENet * getNet() const
get the net object
C++ TraCI client API implementation.