Skip to content

Commit

Permalink
Now number of additional childs can be limited. Refs #4018
Browse files Browse the repository at this point in the history
  • Loading branch information
Pablo Alvarez Lopez committed Jun 7, 2018
1 parent a319399 commit 0f70244
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/netedit/GNEAttributeCarrier.cpp
Expand Up @@ -178,7 +178,7 @@ GNEAttributeCarrier::TagValues::hasDialog() const {


bool
GNEAttributeCarrier::TagValues::hasLimitedNumberOfCHilds() const {
GNEAttributeCarrier::TagValues::hasLimitedNumberOfChilds() const {
return (myTagProperty & TAGPROPERTY_LIMITEDCHILDS) != 0;
}

Expand Down
2 changes: 1 addition & 1 deletion src/netedit/GNEAttributeCarrier.h
Expand Up @@ -144,7 +144,7 @@ class GNEAttributeCarrier : public GNEReferenceCounter {
bool hasDialog() const;

/// @brief return true if tag correspond to an element that only have a limited number of childs
bool hasLimitedNumberOfCHilds() const;
bool hasLimitedNumberOfChilds() const;

/// @brief return true if tag correspond to an element that can be reparent
bool canBeReparent() const;
Expand Down
50 changes: 35 additions & 15 deletions src/netedit/frames/GNEAdditionalFrame.cpp
Expand Up @@ -127,7 +127,7 @@ GNEAdditionalFrame::AdditionalSelector::AdditionalSelector(GNEAdditionalFrame *a
myAdditionalMatchBox->setNumVisible((int)myAdditionalMatchBox->getNumItems());

// set busstop as default additional
myAdditionalMatchBox->setCurrentItem(9);
myAdditionalMatchBox->setCurrentItem(10);

// AdditionalSelector is always shown
show();
Expand Down Expand Up @@ -171,9 +171,9 @@ GNEAdditionalFrame::AdditionalSelector::setCurrentAdditional(SumoXMLTag actualAd
myAdditionalFrameParent->getAdditionalParameters()->showAdditionalParameters();
// Show myAdditionalParentSelector if we're adding a additional with parent
if (tagValue.hasParent()) {
myAdditionalFrameParent->getAdditionalParentSelector()->showListOfAdditionals(tagValue.getParentTag());
myAdditionalFrameParent->getAdditionalParentSelector()->showListOfAdditionalParents(tagValue.getParentTag());
} else {
myAdditionalFrameParent->getAdditionalParentSelector()->hideListOfAdditionals();
myAdditionalFrameParent->getAdditionalParentSelector()->hideListOfAdditionalParents();
}
// Show SelectorParentEdges if we're adding an additional that own the attribute SUMO_ATTR_EDGES
if (GNEAttributeCarrier::hasAttribute(myCurrentAdditionalType, SUMO_ATTR_EDGES)) {
Expand All @@ -191,7 +191,7 @@ GNEAdditionalFrame::AdditionalSelector::setCurrentAdditional(SumoXMLTag actualAd
// hide all groupbox if additional isn't valid
myAdditionalFrameParent->getAdditionalParameters()->hideAdditionalParameters();
myAdditionalFrameParent->getNeteditAttributes()->hideNeteditAttributes();
myAdditionalFrameParent->getAdditionalParentSelector()->hideListOfAdditionals();
myAdditionalFrameParent->getAdditionalParentSelector()->hideListOfAdditionalParents();
myAdditionalFrameParent->getEdgeParentsSelector()->hideList();
myAdditionalFrameParent->getLaneParentsSelector()->hideList();
}
Expand Down Expand Up @@ -766,13 +766,14 @@ GNEAdditionalFrame::getLaneParentsSelector() const {

GNEAdditionalFrame::SelectorParentAdditional::SelectorParentAdditional(GNEAdditionalFrame *additionalFrameParent) :
FXGroupBox(additionalFrameParent->myContentFrame, "Parent selector", GUIDesignGroupBoxFrame),
myAdditionalFrameParent(additionalFrameParent) {
myAdditionalFrameParent(additionalFrameParent),
myAdditionalTypeParent(SUMO_TAG_NOTHING) {
// Create label with the type of SelectorParentAdditional
myAdditionalParentsLabel = new FXLabel(this, "No additional selected", 0, GUIDesignLabelLeftThick);
// Create list
myAdditionalParentsList = new FXList(this, this, MID_GNE_SET_TYPE, GUIDesignListSingleElement, 0, 0, 0, 100);
// Hide List
hideListOfAdditionals();
hideListOfAdditionalParents();
}


Expand Down Expand Up @@ -808,24 +809,41 @@ GNEAdditionalFrame::SelectorParentAdditional::setIDSelected(const std::string &i


void
GNEAdditionalFrame::SelectorParentAdditional::showListOfAdditionals(SumoXMLTag additionalType) {
GNEAdditionalFrame::SelectorParentAdditional::showListOfAdditionalParents(SumoXMLTag additionalType) {
myAdditionalTypeParent = additionalType;
myAdditionalParentsLabel->setText(("Parent type: " + toString(additionalType)).c_str());
myAdditionalParentsList->clearItems();
// obtain all additionals of class "type"
std::vector<GNEAdditional*> vectorOfAdditionalParents = myAdditionalFrameParent->getViewNet()->getNet()->getAdditionals(additionalType);
// fill list with IDs of additionals
for (auto i : vectorOfAdditionalParents) {
myAdditionalParentsList->appendItem(i->getID().c_str());
}
refreshListOfAdditionalParents();
show();
}


void
GNEAdditionalFrame::SelectorParentAdditional::hideListOfAdditionals() {
GNEAdditionalFrame::SelectorParentAdditional::hideListOfAdditionalParents() {
myAdditionalTypeParent = SUMO_TAG_NOTHING;
hide();
}


void
GNEAdditionalFrame::SelectorParentAdditional::refreshListOfAdditionalParents() {
myAdditionalParentsList->clearItems();
if(myAdditionalTypeParent != SUMO_TAG_NOTHING) {
// obtain all additionals of class "type"
std::vector<GNEAdditional*> vectorOfAdditionalParents = myAdditionalFrameParent->getViewNet()->getNet()->getAdditionals(myAdditionalTypeParent);
// fill list with IDs of additionals
for (auto i : vectorOfAdditionalParents) {
// Only show additionals that have unlimited number of childs, or limited but currently number under the limit
if(GNEAttributeCarrier::getTagProperties(myAdditionalTypeParent).hasLimitedNumberOfChilds()) {
if(i->getAdditionalChilds().size() < GNEAttributeCarrier::getTagProperties(myAdditionalTypeParent).getMaxNumberOfChilds()) {
myAdditionalParentsList->appendItem(i->getID().c_str());
}
} else {
myAdditionalParentsList->appendItem(i->getID().c_str());
}
}
}
}

// ---------------------------------------------------------------------------
// GNEAdditionalFrame::SelectorParentEdges - methods
// ---------------------------------------------------------------------------
Expand Down Expand Up @@ -1400,6 +1418,8 @@ GNEAdditionalFrame::addAdditional(GNENetElement* netElement, GNEAdditional* addi

// Create additional
if (GNEAdditionalHandler::buildAdditional(myViewNet, true, myAdditionalSelector->getCurrentAdditionalType(), valuesOfElement)) {
// Refresh additional Parent Selector (For additionals that have a limited number of childs)
myAdditionalParentSelector->refreshListOfAdditionalParents();
return ADDADDITIONAL_SUCCESS;
} else {
return ADDADDITIONAL_INVALID_ARGUMENTS;
Expand Down
10 changes: 8 additions & 2 deletions src/netedit/frames/GNEAdditionalFrame.h
Expand Up @@ -330,15 +330,21 @@ class GNEAdditionalFrame : public GNEFrame {
void setIDSelected(const std::string &id);

/// @brief Show list of SelectorParentAdditional
void showListOfAdditionals(SumoXMLTag additionalType);
void showListOfAdditionalParents(SumoXMLTag additionalTypeParent);

/// @brief hide SelectorParentAdditional
void hideListOfAdditionals();
void hideListOfAdditionalParents();

/// @brief Refresh list of Additional Parents
void refreshListOfAdditionalParents();

private:
/// @brief pointer to Additional Frame Parent
GNEAdditionalFrame * myAdditionalFrameParent;

/// @brief current additional type parent
SumoXMLTag myAdditionalTypeParent;

/// @brief Label with the name of additional
FXLabel* myAdditionalParentsLabel;

Expand Down

1 comment on commit 0f70244

@namdre
Copy link
Contributor

@namdre namdre commented on 0f70244 Jun 7, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

number of access for a stop is not limited. The max-accesses option only applies when adding them during osm import.

Please sign in to comment.