75 myCreateEdgeFrameParent(createEdgeFrameParent),
76 myDefaultEdgeType(new
GNEEdgeType(createEdgeFrameParent)),
79 myUseDefaultEdgeType =
new FXRadioButton(getCollapsableFrame(),
TL(
"Create default edge"),
82 myNoPedestriansCheckButton =
new FXCheckButton(getCollapsableFrame(),
TL(
"Disallow for pedestrians"),
84 myAddSidewalkCheckButton =
new FXCheckButton(getCollapsableFrame(),
TL(
"Add sidewalk"),
87 myUseCustomEdgeType =
new FXRadioButton(getCollapsableFrame(),
TL(
"Use edgeType/template"),
101 myCreateFromTemplate =
new FXButton(getCollapsableFrame(), (
TL(
"Create from template") + std::string(
"\t\t") +
TL(
"Create edgeType from template")).c_str(),
GUIIconSubSys::getIcon(
GUIIcon::EDGE),
104 myUseDefaultEdgeType->setCheck(TRUE);
106 for (
const auto& junction : createEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getJunctions()) {
107 if (junction.second->getNBNode()->getCrossings().size() > 0) {
108 enableCheckBoxDisablePedestrians();
124 const int index = myEdgeTypesComboBox->getCurrentItem();
128 if (myUseDefaultEdgeType->getCheck()) {
130 myAddSidewalkCheckButton->enable();
131 myNoPedestriansCheckButton->enable();
133 myCreateFromTemplate->disable();
135 myEdgeTypesComboBox->disable();
137 myAddEdgeTypeButton->disable();
138 myDeleteEdgeTypeButton->disable();
140 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(myDefaultEdgeType, {
SUMO_ATTR_ID});
142 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
143 }
else if (myUseCustomEdgeType->getCheck()) {
145 myAddSidewalkCheckButton->disable();
146 myNoPedestriansCheckButton->disable();
148 myAddEdgeTypeButton->enable();
149 myDeleteEdgeTypeButton->enable();
151 if (myEdgeTypesComboBox->getNumItems() == 0) {
153 myEdgeTypesComboBox->disable();
154 myDeleteEdgeTypeButton->disable();
156 myCreateEdgeFrameParent->myEdgeTypeAttributes->hideAttributesCreatorModule();
157 myCreateEdgeFrameParent->myLaneTypeSelector->hideLaneTypeSelector();
160 myCreateFromTemplate->enable();
162 myEdgeTypesComboBox->enable();
164 myDeleteEdgeTypeButton->disable();
166 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(templateEditor->
getEdgeTemplate(), {SUMO_ATTR_ID});
167 myCreateEdgeFrameParent->myEdgeTypeAttributes->disableAttributesCreator();
169 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
172 myCreateFromTemplate->disable();
174 myEdgeTypesComboBox->enable();
176 myEdgeTypeSelected = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveEdgeType(myEdgeTypesComboBox->getText().text(),
false);
178 if (myEdgeTypeSelected) {
180 myCreateEdgeFrameParent->myEdgeTypeAttributes->showAttributesCreatorModule(myEdgeTypeSelected, {});
182 myCreateEdgeFrameParent->myLaneTypeSelector->showLaneTypeSelector();
185 myCreateEdgeFrameParent->myEdgeTypeAttributes->hideAttributesCreatorModule();
187 myCreateEdgeFrameParent->myLaneTypeSelector->hideLaneTypeSelector();
189 myEdgeTypesComboBox->setTextColor(FXRGB(255, 0, 0));
200 for (
int i = 0; i < myEdgeTypesComboBox->getNumItems(); i++) {
201 if (myEdgeTypesComboBox->getItem(i).text() == oldID) {
202 myEdgeTypesComboBox->setItemText(i, newID.c_str());
210 if (myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate()) {
211 if ((myUseCustomEdgeType->getCheck() == TRUE) && (myEdgeTypesComboBox->getCurrentItem() == 0)) {
224 return (myUseDefaultEdgeType->getCheck() == TRUE);
230 myNoPedestriansCheckButton->setCheck(TRUE);
236 return myDefaultEdgeType;
242 if (myUseDefaultEdgeType->getCheck() == TRUE) {
243 return myDefaultEdgeType;
245 return myEdgeTypeSelected;
252 return (myNoPedestriansCheckButton->getCheck() == TRUE);
258 return (myAddSidewalkCheckButton->getCheck() == TRUE);
264 myEdgeTypeSelected =
nullptr;
266 if (myCurrentIndex < 0) {
274 for (
int i = 0; i < myEdgeTypesComboBox->getNumItems(); i++) {
275 if (myEdgeTypesComboBox->getItem(i).text() == edgeType->
getID()) {
277 myEdgeTypesComboBox->setCurrentItem(i);
280 myUseDefaultEdgeType->setCheck(FALSE);
281 myUseCustomEdgeType->setCheck(TRUE);
283 refreshEdgeTypeSelector();
291 myUseDefaultEdgeType->setCheck(FALSE);
292 myUseCustomEdgeType->setCheck(TRUE);
293 refreshEdgeTypeSelector();
300 if (obj == myUseDefaultEdgeType) {
302 myUseDefaultEdgeType->setCheck(TRUE);
303 myUseCustomEdgeType->setCheck(FALSE);
306 myUseDefaultEdgeType->setCheck(FALSE);
307 myUseCustomEdgeType->setCheck(TRUE);
310 refreshEdgeTypeSelector();
320 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
TL(
"create new edge type"));
321 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
true),
true);
322 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
324 myEdgeTypeSelected = edgeType;
326 myCurrentIndex = (myEdgeTypesComboBox->getNumItems() - 1);
328 refreshEdgeTypeSelector();
336 if (myEdgeTypeSelected && (myEdgeTypeSelected->getID() == myEdgeTypesComboBox->getText().text())) {
337 myEdgeTypeSelected =
nullptr;
342 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
TL(
"delete edge type"));
343 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
false),
true);
344 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
346 refreshEdgeTypeSelector();
354 myCurrentIndex = myEdgeTypesComboBox->getCurrentItem();
356 refreshEdgeTypeSelector();
363 if (myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate()) {
367 edgeType->
copyTemplate(myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate());
369 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::EDGE,
TL(
"create new edge type"));
370 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
true),
true);
371 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
373 myEdgeTypeSelected = edgeType;
375 myCurrentIndex = (myEdgeTypesComboBox->getNumItems() - 1);
377 refreshEdgeTypeSelector();
385 if (myAddSidewalkCheckButton->getCheck() == TRUE) {
386 myNoPedestriansCheckButton->setCheck(TRUE);
387 myNoPedestriansCheckButton->disable();
389 myNoPedestriansCheckButton->enable();
400 const auto& edgeTypes = myCreateEdgeFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getEdgeTypes();
402 myEdgeTypesComboBox->clearItems();
404 myEdgeTypesComboBox->setTextColor(FXRGB(0, 0, 0));
407 myEdgeTypesComboBox->appendItem((
TL(
"template: ") + templateEditor->
getEdgeTemplate()->
getID()).c_str(),
nullptr);
410 for (
const auto& edgeType : edgeTypes) {
411 myEdgeTypesComboBox->appendItem(edgeType.second->getID().c_str(),
nullptr);
414 if (myEdgeTypesComboBox->getNumItems() <= 10) {
415 myEdgeTypesComboBox->setNumVisible(myEdgeTypesComboBox->getNumItems());
417 myEdgeTypesComboBox->setNumVisible(10);
420 if ((myCurrentIndex < 0) || (myCurrentIndex >= myEdgeTypesComboBox->getNumItems())) {
421 myCurrentIndex = myEdgeTypesComboBox->getNumItems() - 1;
423 myEdgeTypesComboBox->setCurrentItem(myCurrentIndex);
432 myCreateEdgeFrameParent(createEdgeFrameParent),
456 refreshLaneTypeSelector();
465 myCreateEdgeFrameParent->myLaneTypeAttributes->hideAttributesCreatorModule();
474 myLaneTypesComboBox->clearItems();
476 if (myCreateEdgeFrameParent->myEdgeTypeSelector->useEdgeTemplate()) {
477 const GNEEdgeTemplate* edgeTemplate = myCreateEdgeFrameParent->getViewNet()->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate();
480 myLaneTypesComboBox->appendItem(laneTemplate->getAttribute(
SUMO_ATTR_ID).c_str(),
nullptr);
485 myCreateEdgeFrameParent->myLaneTypeAttributes->showAttributesCreatorModule(edgeTemplate->
getLaneTemplates().at(myLaneIndex), {SUMO_ATTR_ID});
487 myCreateEdgeFrameParent->myLaneTypeAttributes->disableAttributesCreator();
489 myAddLaneTypeButton->disable();
490 myDeleteLaneTypeButton->disable();
493 const GNEEdgeType* edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
496 myLaneTypesComboBox->appendItem(laneType->getAttribute(
SUMO_ATTR_ID).c_str(),
nullptr);
501 myCreateEdgeFrameParent->myLaneTypeAttributes->showAttributesCreatorModule(edgeType->
getLaneTypes().at(myLaneIndex), {});
503 myAddLaneTypeButton->enable();
506 myDeleteLaneTypeButton->enable();
508 myDeleteLaneTypeButton->disable();
519 if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
521 myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->addLaneType(
new GNELaneType(myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()));
523 refreshLaneTypeSelector();
525 myLaneTypesComboBox->setCurrentItem(myLaneTypesComboBox->getNumItems() - 1);
526 }
else if (!myCreateEdgeFrameParent->myEdgeTypeSelector->useEdgeTemplate()) {
528 const auto edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
533 for (
const auto& laneType : edgeType->getLaneTypes()) {
539 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::LANE,
TL(
"add laneType"));
540 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
false),
true);
541 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(newEdgeType,
true),
true);
542 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
544 myLaneIndex = myLaneTypesComboBox->getNumItems() - 1;
546 myCreateEdgeFrameParent->myEdgeTypeSelector->setCurrentEdgeType(newEdgeType);
556 if (myCreateEdgeFrameParent->myEdgeTypeSelector->useDefaultEdgeType()) {
558 myCreateEdgeFrameParent->myEdgeTypeSelector->getDefaultEdgeType()->removeLaneType(myLaneIndex);
560 refreshLaneTypeSelector();
562 myLaneTypesComboBox->setCurrentItem(0);
563 }
else if (!myCreateEdgeFrameParent->myEdgeTypeSelector->useEdgeTemplate()) {
565 const auto edgeType = myCreateEdgeFrameParent->myEdgeTypeSelector->getEdgeTypeSelected();
570 for (
int i = 0; i < (int)edgeType->getLaneTypes().size(); i++) {
571 if (i != myLaneIndex) {
576 myCreateEdgeFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::LANE,
TL(
"remove laneType"));
577 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(edgeType,
false),
true);
578 myCreateEdgeFrameParent->getViewNet()->getUndoList()->add(
new GNEChange_EdgeType(newEdgeType,
true),
true);
579 myCreateEdgeFrameParent->getViewNet()->getUndoList()->end();
581 myLaneIndex = myLaneTypesComboBox->getNumItems() - 1;
583 myCreateEdgeFrameParent->myEdgeTypeSelector->setCurrentEdgeType(newEdgeType);
593 myLaneIndex = myLaneTypesComboBox->getCurrentItem();
595 refreshLaneTypeSelector();
603 if (myLaneIndex > myLaneTypesComboBox->getNumItems()) {
607 myLaneTypesComboBox->setCurrentItem(myLaneIndex);
609 if (myLaneTypesComboBox->getNumItems() <= 10) {
610 myLaneTypesComboBox->setNumVisible(myLaneTypesComboBox->getNumItems());
612 myLaneTypesComboBox->setNumVisible(10);
622 std::ostringstream information;
625 <<
"- " <<
TL(
"ESC:") <<
"\n"
626 <<
" " <<
TL(
"Deselect origin") <<
"\n"
627 <<
"- " <<
TL(
"Control+Click:") <<
"\n"
628 <<
" " <<
TL(
"Move view") <<
"\n"
629 <<
"- " <<
TL(
"Shift+Click:") <<
"\n"
630 <<
" " <<
TL(
"Splits edge in both directions") <<
"\n"
631 <<
"- " <<
TL(
"Alt+Shift+Click:") <<
"\n"
632 <<
" " <<
TL(
"Splits edge in one direction");
645 GNEFrame(viewParent, viewNet,
TL(
"Create Edge")),
666 const bool oppositeEdge,
const bool chainEdge) {
669 WRITE_WARNING(
TL(
"Select either default edgeType or a custom edgeType or template"));
687 if (junction ==
nullptr) {
743 std::cout <<
"edge created without an open CommandGroup" << std::endl;
838 for (
const auto& lane : edge->
getLanes()) {
842 std::vector<std::string> disallowList = GNEAttributeCarrier::parse<std::vector<std::string> >(lane->getAttribute(
SUMO_ATTR_DISALLOW));
844 if (std::find(disallowList.begin(), disallowList.end(),
"pedestrian") == disallowList.end()) {
845 disallowList.push_back(
"pedestrian");
856 bool sidewalkFound =
false;
858 for (
const auto& lane : edge->
getLanes()) {
861 sidewalkFound =
true;
865 if (!sidewalkFound) {
FXDEFMAP(GNECreateEdgeFrame::EdgeTypeSelector) EdgeTypeSelectorMap[]
@ MID_GNE_CREATEEDGEFRAME_CREATEFROMTEMPLATE
create edge type from template
@ MID_GNE_CREATEEDGEFRAME_CHECKBUTTON
check button
@ MID_GNE_CREATEEDGEFRAME_SELECTTEMPLATE
select edge template
@ MID_GNE_CREATEEDGEFRAME_DELETE
delete edge type
@ MID_GNE_CREATEEDGEFRAME_ADD
add new edge type
@ MID_GNE_CREATEEDGEFRAME_SELECTLANE
select lane (used for default and template edges)
@ 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 GUIDesignCheckButton
checkButton placed in left position
#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)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
const std::string getID() const
get ID (all Attribute Carriers have one)
GNENet * getNet() const
get pointer to net
bool areValuesValid() const
check if parameters of attributes are valid
GNEEdgeType * getEdgeTypeSelected() const
get edgeType selected
~EdgeTypeSelector()
destructor
void useTemplate()
use template
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.
void enableCheckBoxDisablePedestrians()
void enable checkbox for disable pedestrians
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.
long onUpdAddSideWalk(FXObject *, FXSelector, void *)
Called when add sidewalk check buton is updated.
GNEEdgeType * myDefaultEdgeType
default edge type
long onCmdCreateFromTemplate(FXObject *, FXSelector, void *)
Called when the user press create edgeType from Template.
bool isAddSidewalkEnabled() const
check if add sidewalk check button is enabled
void fillComboBox()
fill comboBox
void refreshEdgeTypeSelector()
refresh edge type selector
bool isNoPedestriansEnabled() const
check if no pedestrian check button is enabled
long onCmdRadioButton(FXObject *, FXSelector, void *)
void setCurrentEdgeType(const GNEEdgeType *edgeType)
set current edgeType
void clearEdgeTypeSelected()
clear edgeType selected
long onCmdSelectEdgeTypeOrTemplate(FXObject *, FXSelector, void *)
Called when the user press select an edgeType or template in comboBox.
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::LaneTypeSelector * myLaneTypeSelector
lane type selector
GNEAttributesCreator * getLaneTypeAttributes() const
get laneType attributes
void updateObjectsUnderSnappedCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under snapped cursor
GNEAttributesCreator * myEdgeTypeAttributes
internal edgeType attributes
GNEAttributesCreator * getEdgeTypeAttributes() const
get edgeType attributes
const GNEJunction * getJunctionSource() const
get junction source for new edge
GNEAttributesCreator * myLaneTypeAttributes
internal laneType attributes
~GNECreateEdgeFrame()
Destructor.
void disablePedestrians(GNEEdge *edge) const
disable pedestrians in the given edge (within undoRedo)
GNECreateEdgeFrame::Legend * myLegend
Legend.
GNEJunction * myCreateEdgeSource
source junction for new edge
GNEViewNetHelper::ObjectsUnderCursor myObjectsUnderSnappedCursor
objects under snapped cursor
GNECreateEdgeFrame(GNEViewParent *viewParent, GNEViewNet *viewNet)
Constructor.
void hide()
hide create edge frame
void addSidewalk(GNEEdge *edge) const
disable pedestrians in the given edge (within undoRedo)
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
const std::vector< GNELane * > & getLanes() const
returns a reference to the lane vector
void copyTemplate(const GNEEdgeTemplate *edgeTemplate, GNEUndoList *undoList)
copy edge attributes from edgetemplate
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
const std::vector< GNELaneTemplate * > & getLaneTemplates() const
get vector with the lane templates of this edge
void copyTemplate(const GNEEdgeTemplate *edgeTemplate)
copy edge template
const std::vector< GNELaneType * > & getLaneTypes() const
get laneTypes
void addLaneType(GNELaneType *laneType)
add laneType
GNEViewNet * myViewNet
FOX need this.
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
std::vector< GNEEdge * > retrieveEdges(GNEJunction *from, GNEJunction *to) const
get all edges by from and to GNEJunction
GNEEdgeType * retrieveEdgeType(const std::string &id, bool hardFail=true) const
get edge type 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
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 statusBar text
A single child window which contains a view of the simulation area.
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.
A list item which allows for custom coloring.
MFXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
const std::string & getID() const
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.