75 FXGroupBoxModule(createEdgeFrameParent->myContentFrame, "Template selector"),
76 myCreateEdgeFrameParent(createEdgeFrameParent),
77 myDefaultEdgeType(new
GNEEdgeType(createEdgeFrameParent)),
98 myUseDefaultEdgeType->setCheck(TRUE);
112 const int index = myEdgeTypesComboBox->getCurrentItem();
116 if (myUseDefaultEdgeType->getCheck()) {
118 myCreateFromTemplate->disable();
120 myEdgeTypesComboBox->disable();
122 myAddEdgeTypeButton->disable();
123 myDeleteEdgeTypeButton->disable();
125 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(myDefaultEdgeType, {
SUMO_ATTR_ID});
127 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
128 }
else if (myUseCustomEdgeType->getCheck()) {
130 myAddEdgeTypeButton->enable();
131 myDeleteEdgeTypeButton->enable();
133 if (myEdgeTypesComboBox->getNumItems() == 0) {
135 myEdgeTypesComboBox->disable();
136 myDeleteEdgeTypeButton->disable();
138 myCreateEdgeFrameParent->myEdgeTypeAttributes->hideAttributesCreatorModule();
139 myCreateEdgeFrameParent->myLaneTypeSelector->hideLaneTypeSelector();
142 myCreateFromTemplate->enable();
144 myEdgeTypesComboBox->enable();
146 myDeleteEdgeTypeButton->disable();
148 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(templateEditor->
getEdgeTemplate(), {SUMO_ATTR_ID});
149 myCreateEdgeFrameParent->myEdgeTypeAttributes->disableAttributesCreator();
151 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
154 myCreateFromTemplate->disable();
156 myEdgeTypesComboBox->enable();
158 myEdgeTypeSelected = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveEdgeType(myEdgeTypesComboBox->getText().text(),
false);
160 if (myEdgeTypeSelected) {
162 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(myEdgeTypeSelected, {});
164 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
167 myCreateEdgeFrameParent->myEdgeTypeAttributes->hideAttributesCreatorModule();
169 myCreateEdgeFrameParent->myLaneTypeSelector->hideLaneTypeSelector();
171 myEdgeTypesComboBox->setTextColor(FXRGB(255, 0, 0));
182 for (
int i = 0; i < myEdgeTypesComboBox->getNumItems(); i++) {
183 if (myEdgeTypesComboBox->getItem(i).text() == oldID) {
184 myEdgeTypesComboBox->setItemText(i, newID.c_str());
192 if (myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate()) {
193 if ((myUseCustomEdgeType->getCheck() == TRUE) && (myEdgeTypesComboBox->getCurrentItem() == 0)) {
206 return (myUseDefaultEdgeType->getCheck() == TRUE);
212 return myDefaultEdgeType;
218 if (myUseDefaultEdgeType->getCheck() == TRUE) {
219 return myDefaultEdgeType;
221 return myEdgeTypeSelected;
228 myEdgeTypeSelected =
nullptr;
230 if (myCurrentIndex < 0) {
238 for (
int i = 0; i < myEdgeTypesComboBox->getNumItems(); i++) {
239 if (myEdgeTypesComboBox->getItem(i).text() == edgeType->
getID()) {
241 myEdgeTypesComboBox->setCurrentItem(i);
244 myUseDefaultEdgeType->setCheck(FALSE);
245 myUseCustomEdgeType->setCheck(TRUE);
247 refreshEdgeTypeSelector();
255 myUseDefaultEdgeType->setCheck(FALSE);
256 myUseCustomEdgeType->setCheck(TRUE);
257 refreshEdgeTypeSelector();
264 if (obj == myUseDefaultEdgeType) {
266 myUseDefaultEdgeType->setCheck(TRUE);
267 myUseCustomEdgeType->setCheck(FALSE);
270 myUseDefaultEdgeType->setCheck(FALSE);
271 myUseCustomEdgeType->setCheck(TRUE);
274 refreshEdgeTypeSelector();
284 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
"create new edge type");
285 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
true),
true);
286 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
288 myEdgeTypeSelected = edgeType;
290 myCurrentIndex = (myEdgeTypesComboBox->getNumItems() - 1);
292 refreshEdgeTypeSelector();
300 if (myEdgeTypeSelected && (myEdgeTypeSelected->getID() == myEdgeTypesComboBox->getText().text())) {
301 myEdgeTypeSelected =
nullptr;
306 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
"delete edge type");
307 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
false),
true);
308 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
310 refreshEdgeTypeSelector();
318 myCurrentIndex = myEdgeTypesComboBox->getCurrentItem();
320 refreshEdgeTypeSelector();
327 if (myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate()) {
331 edgeType->
copyTemplate(myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate());
333 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
"create new edge type");
334 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
true),
true);
335 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
337 myEdgeTypeSelected = edgeType;
339 myCurrentIndex = (myEdgeTypesComboBox->getNumItems() - 1);
341 refreshEdgeTypeSelector();
352 const auto& edgeTypes = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdgeTypes();
354 myEdgeTypesComboBox->clearItems();
356 myEdgeTypesComboBox->setTextColor(FXRGB(0, 0, 0));
359 myEdgeTypesComboBox->appendItem((
"template: " + templateEditor->
getEdgeTemplate()->
getID()).c_str(),
nullptr);
362 for (
const auto& edgeType : edgeTypes) {
363 myEdgeTypesComboBox->appendItem(edgeType.second->getID().c_str(),
nullptr);
366 if (myEdgeTypesComboBox->getNumItems() <= 10) {
367 myEdgeTypesComboBox->setNumVisible(myEdgeTypesComboBox->getNumItems());
369 myEdgeTypesComboBox->setNumVisible(10);
372 if ((myCurrentIndex < 0) || (myCurrentIndex >= myEdgeTypesComboBox->getNumItems())) {
373 myCurrentIndex = myEdgeTypesComboBox->getNumItems() - 1;
375 myEdgeTypesComboBox->setCurrentItem(myCurrentIndex);
384 myCreateEdgeFrameParent(createEdgeFrameParent),
408 refreshLaneTypeSelector();
417 myCreateEdgeFrameParent->myLaneTypeAttributes->hideAttributesCreatorModule();
426 myLaneTypesComboBox->clearItems();
428 if (myCreateEdgeFrameParent->myEdgeTypeSelector->useEdgeTemplate()) {
429 const GNEEdgeTemplate* edgeTemplate = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate();
432 myLaneTypesComboBox->appendItem(laneTemplate->getAttribute(
SUMO_ATTR_ID).c_str(),
nullptr);
437 myCreateEdgeFrameParent->myLaneTypeAttributes->showAttributesCreatorModule(edgeTemplate->
getLaneTemplates().at(myLaneIndex), {SUMO_ATTR_ID});
439 myCreateEdgeFrameParent->myLaneTypeAttributes->disableAttributesCreator();
441 myAddLaneTypeButton->disable();
442 myDeleteLaneTypeButton->disable();
445 const GNEEdgeType* edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
448 myLaneTypesComboBox->appendItem(laneType->getAttribute(
SUMO_ATTR_ID).c_str(),
nullptr);
453 myCreateEdgeFrameParent->myLaneTypeAttributes->showAttributesCreatorModule(edgeType->
getLaneTypes().at(myLaneIndex), {});
455 myAddLaneTypeButton->enable();
458 myDeleteLaneTypeButton->enable();
460 myDeleteLaneTypeButton->disable();
471 if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
473 myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->addLaneType(
new GNELaneType(myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()));
475 refreshLaneTypeSelector();
477 myLaneTypesComboBox->setCurrentItem(myLaneTypesComboBox->getNumItems() - 1);
478 }
else if (!myCreateEdgeFrameParent->myEdgeTypeSelector->useEdgeTemplate()) {
480 const auto edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
485 for (
const auto& laneType : edgeType->getLaneTypes()) {
491 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::LANE,
"add laneType");
492 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
false),
true);
493 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(newEdgeType,
true),
true);
494 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
496 myLaneIndex = myLaneTypesComboBox->getNumItems() - 1;
498 myCreateEdgeFrameParent->myEdgeTypeSelector->setCurrentEdgeType(newEdgeType);
514 myLaneIndex = myLaneTypesComboBox->getCurrentItem();
516 refreshLaneTypeSelector();
524 if (myLaneIndex > myLaneTypesComboBox->getNumItems()) {
528 myLaneTypesComboBox->setCurrentItem(myLaneIndex);
530 if (myLaneTypesComboBox->getNumItems() <= 10) {
531 myLaneTypesComboBox->setNumVisible(myLaneTypesComboBox->getNumItems());
533 myLaneTypesComboBox->setNumVisible(10);
544 std::ostringstream information;
548 <<
" Deselect origin" <<
"\n"
549 <<
"- Control+Click:" <<
"\n"
550 <<
" Move view" <<
"\n"
551 <<
"- Shift+Click:" <<
"\n"
552 <<
" Splits edge in both directions" <<
"\n"
553 <<
"- Alt+Shift+Click:" <<
"\n"
554 <<
" Splits edge in one direction";
567 GNEFrame(horizontalFrameParent, viewNet,
"Create Edge"),
588 const bool oppositeEdge,
const bool chainEdge) {
591 WRITE_WARNING(
"Select either default edgeType or a custom edgeType or template");
605 if (junction ==
nullptr) {
647 std::cout <<
"edge created without an open CommandGroup )-:\n";
FXDEFMAP(GNECreateEdgeFrame::EdgeTypeSelector) EdgeTypeSelectorMap[]
@ MID_GNE_CREATEEDGEFRAME_CREATEFROMTEMPLATE
create edge type from template
@ MID_GNE_CREATEEDGEFRAME_DELETE
delete edge type
@ MID_GNE_CREATEEDGEFRAME_ADD
add new edge type
@ MID_GNE_CREATEEDGEFRAME_SELECT
delete edge type
@ MID_GNE_CREATEEDGEFRAME_SELECTRADIOBUTTON
#define GUIDesignComboBoxAttribute
Combo box static (cannot be edited) extended over the matrix column.
#define GUIDesignComboBoxNCol
number of column of every combo box
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignRadioButton
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
#define WRITE_WARNING(msg)
@ SUMO_TAG_EDGE
begin/end of the description of an edge
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
FXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toogled)
GNENet * getNet() const
get pointer to net
GNEEdgeType * getEdgeTypeSelected() const
get edgeType selected
~EdgeTypeSelector()
destructor
void useTemplate()
use template
long onCmdSelectEdgeType(FXObject *, FXSelector, void *)
Called when the user press select an edgeType in comboBox.
GNEEdgeType * getDefaultEdgeType() const
get default edgeType
bool useEdgeTemplate() const
check if we have to use edge template
void updateIDinComboBox(const std::string &oldID, const std::string &newID)
update id in comboBox
long onCmdAddEdgeType(FXObject *, FXSelector, void *)
Called when the user press button for add a new edge type.
bool useDefaultEdgeType() const
check if we're using default edge type
long onCmdDeleteEdgeType(FXObject *, FXSelector, void *)
Called when the user press button for delete edge type.
GNEEdgeType * myDefaultEdgeType
default edge type
long onCmdCreateFromTemplate(FXObject *, FXSelector, void *)
Called when the user press create edgeType from Template.
void fillComboBox()
fill comboBox
void refreshEdgeTypeSelector()
refresh edge type selector
long onCmdRadioButton(FXObject *, FXSelector, void *)
void setCurrentEdgeType(const GNEEdgeType *edgeType)
set current edgeType
void clearEdgeTypeSelected()
clear edgeType selected
void updateComboBox()
update comboBox
long onCmdSelectLaneType(FXObject *, FXSelector, void *)
Called when the user press select an laneType in comboBox.
FXButton * myDeleteLaneTypeButton
button for delete lane type
FXComboBox * myLaneTypesComboBox
ComboBox for lane types.
void showLaneTypeSelector()
show lane type selector
LaneTypeSelector(GNECreateEdgeFrame *createEdgeFrameParent)
FOX-declaration.
void hideLaneTypeSelector()
hide lane type selector
~LaneTypeSelector()
destructor
long onCmdAddLaneType(FXObject *, FXSelector, void *)
FXButton * myAddLaneTypeButton
button for create new lane type
long onCmdDeleteLaneType(FXObject *, FXSelector, void *)
Called when the user press button for delete lane type.
void refreshLaneTypeSelector()
refresh LaneTypeSelector
Legend(GNECreateEdgeFrame *createEdgeFrameParent)
constructor
void processClick(const Position &clickedPosition, const GNEViewNetHelper::ObjectsUnderCursor &objectsUnderCursor, const bool oppositeEdge, const bool chainEdge)
handle processClick and set the relative colouring
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
void abortEdgeCreation()
abort current edge creation
void show()
show create edge frame
GNECreateEdgeFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet)
Constructor.
GNECreateEdgeFrame::LaneTypeSelector * myLaneTypeSelector
lane type selector
void updateObjectsUnderSnappedCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under snapped cursor
GNEFrameAttributeModules::AttributesCreator * getEdgeTypeAttributes() const
get edgeType attributes
GNEFrameAttributeModules::AttributesCreator * myLaneTypeAttributes
internal laneType attributes
GNEFrameAttributeModules::AttributesCreator * getLaneTypeAttributes() const
get laneType attributes
const GNEJunction * getJunctionSource() const
get junction source for new edge
~GNECreateEdgeFrame()
Destructor.
GNEFrameAttributeModules::AttributesCreator * myEdgeTypeAttributes
internal edgeType attributes
GNECreateEdgeFrame::Legend * myLegend
Legend.
GNEJunction * myCreateEdgeSource
source junction for new edge
GNEViewNetHelper::ObjectsUnderCursor myObjectsUnderSnappedCursor
objects under snapped cursor
void hide()
hide create edge frame
EdgeTypeSelector * myEdgeTypeSelector
edge type selector
void setUseEdgeTemplate()
set default to using edge template
LaneTypeSelector * getLaneTypeSelector()
get lane type selector
A road/street connecting two junctions (netedit-version)
void copyEdgeType(const GNEEdgeType *edgeType, GNEUndoList *undoList)
copy edge attributes from edgeType
NBEdge * getNBEdge() const
returns the internal NBEdge
void copyTemplate(const GNEEdgeTemplate *edgeTemplate, GNEUndoList *undoList)
copy edge attributes from edgetemplate
const std::vector< GNELaneTemplate * > & getLaneTemplates() const
get vector with the lane templates of this edge
const std::string & getID() const
return ID of object
void copyTemplate(const GNEEdgeTemplate *edgeTemplate)
copy edge template
const std::vector< GNELaneType * > & getLaneTypes() const
get laneTypes
void addLaneType(GNELaneType *laneType)
add laneType
GNEViewNet * myViewNet
View Net.
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
virtual void show()
show Frame
virtual void hide()
hide Frame
GNEEdgeTemplate * getEdgeTemplate() const
get edge template (to copy attributes from)
TemplateEditor * getTemplateEditor() const
get template editor
void markAsCreateEdgeSource()
marks as first junction in createEdge-mode
void unMarkAsCreateEdgeSource()
removes mark as first junction in createEdge-mode
GNEEdgeType * retrieveEdgeType(const std::string &id, bool hardFail=true) const
get edge type by id
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
GNEEdge * createEdge(GNEJunction *src, GNEJunction *dest, GNEEdge *edgeTemplate, GNEUndoList *undoList, const std::string &suggestedName="", bool wasSplit=false, bool allowDuplicateGeom=false, bool recomputeConnections=true)
creates a new edge (unless an edge with the same geometry already exists)
GNEJunction * createJunction(const Position &pos, GNEUndoList *undoList)
creates a new junction
const std::string & getID() const
get ID
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
bool hasCommandGroup() const
Check if undoList has command group.
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
class used to group all variables related with objects under cursor after a click over view
void updateObjectUnderCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under cursor (Called only in onLeftBtnPress(...) function)
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
GNENet * getNet() const
get the net object
GNEViewParent * getViewParent() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
void setStatusBarText(const std::string &text)
set staturBar text
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
Position snapToActiveGrid(const Position &pos, bool snapXY=true) const
Returns a position that is mapped to the closest grid point if the grid is active.
const std::string & getID() const
A point in 2D or 3D with translation and scaling methods.