74 myTextFieldJunctionID->disable();
83 if (junctionID.empty()) {
84 myTextFieldJunctionID->setText(
"");
86 myTextFieldJunctionID->setText(junctionID.c_str());
96 myCrossingFrameParent(crossingFrameParent),
126 myCrossingFrameParent->getViewNet()->updateViewNet();
128 myUseSelectedEdges->disable();
130 if (edge->isAttributeCarrierSelected()) {
131 myUseSelectedEdges->enable();
135 myClearEdgesSelection->enable();
136 myInvertEdgesSelection->enable();
145 myUseSelectedEdges->disable();
146 myClearEdgesSelection->disable();
147 myInvertEdgesSelection->disable();
149 myCrossingFrameParent->myCrossingParameters->disableCrossingParameters();
158 edge->resetCandidateFlags();
161 myCrossingFrameParent->getViewNet()->updateViewNet();
169 myCrossingFrameParent->myCrossingParameters->useSelectedEdges(
myCurrentJunction);
176 myCrossingFrameParent->myCrossingParameters->clearEdges();
193 myCrossingFrameParent(crossingFrameParent),
194 myCrossingTemplate(nullptr),
195 myCurrentParametersValid(true) {
198 FXHorizontalFrame* crossingParameter =
nullptr;
224 delete myCrossingTemplate;
233 myCrossingEdgesLabel->enable();
234 myCrossingEdges->enable();
235 myCrossingPriorityLabel->enable();
238 myCrossingPriorityCheckButton->disable();
240 myCrossingPriorityCheckButton->enable();
242 myCrossingWidthLabel->enable();
243 myCrossingWidth->enable();
244 myHelpCrossingAttribute->enable();
246 onCmdSetAttribute(
nullptr, 0,
nullptr);
249 myCrossingPriorityCheckButton->setCheck(TRUE);
251 myCrossingPriorityCheckButton->setCheck(GNEAttributeCarrier::parse<bool>(tagProperties.getDefaultValue(
SUMO_ATTR_PRIORITY)));
253 myCrossingWidth->setText(tagProperties.getDefaultValue(
SUMO_ATTR_WIDTH).c_str());
254 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
261 myCrossingEdges->setText(
"");
262 myCrossingPriorityCheckButton->setCheck(
false);
263 myCrossingPriorityCheckButton->setText(
"false");
264 myCrossingWidth->setText(
"");
266 myCrossingEdgesLabel->disable();
267 myCrossingEdges->disable();
268 myCrossingPriorityLabel->disable();
269 myCrossingPriorityCheckButton->disable();
270 myCrossingWidthLabel->disable();
271 myCrossingWidth->disable();
272 myHelpCrossingAttribute->disable();
273 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(
false);
279 return myCrossingEdgesLabel->isEnabled();
285 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
286 if (currentJunction !=
nullptr) {
290 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
292 std::vector<std::string>::iterator itFinder = std::find(crossingEdges.begin(), crossingEdges.end(), edge->
getID());
293 if (itFinder == crossingEdges.end()) {
294 crossingEdges.push_back(edge->
getID());
296 crossingEdges.erase(itFinder);
298 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
301 onCmdSetAttribute(
nullptr, 0,
nullptr);
308 myCrossingEdges->setText(
"");
310 onCmdSetAttribute(
nullptr, 0,
nullptr);
316 std::vector<std::string> crossingEdges;
318 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), i) == myCurrentSelectedEdges.end()) {
319 crossingEdges.push_back(i->getID());
322 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
324 onCmdSetAttribute(
nullptr, 0,
nullptr);
330 std::vector<std::string> crossingEdges;
332 if (i->isAttributeCarrierSelected()) {
333 crossingEdges.push_back(i->getID());
336 myCrossingEdges->setText(
joinToString(crossingEdges,
" ").c_str());
338 onCmdSetAttribute(
nullptr, 0,
nullptr);
344 std::vector<NBEdge*> NBEdgeVector;
346 for (
auto i : myCurrentSelectedEdges) {
347 NBEdgeVector.push_back(i->getNBEdge());
355 if (myCrossingPriorityCheckButton->getCheck()) {
365 return myCurrentParametersValid;
371 return GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text());
377 myCurrentParametersValid =
true;
379 std::vector<std::string> crossingEdges = GNEAttributeCarrier::parse<std::vector<std::string> > (myCrossingEdges->getText().text());
381 myCurrentSelectedEdges.clear();
383 for (
auto i : crossingEdges) {
385 GNEJunction* currentJunction = myCrossingFrameParent->myEdgeSelector->getCurrentJunction();
387 if (edge ==
nullptr) {
388 myCurrentParametersValid =
false;
390 myCurrentParametersValid =
false;
393 auto itFinder = std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), edge);
394 if (itFinder == myCurrentSelectedEdges.end()) {
395 myCurrentSelectedEdges.push_back(edge);
397 myCurrentSelectedEdges.erase(itFinder);
402 if (myCurrentParametersValid) {
403 myCrossingEdges->setTextColor(FXRGB(0, 0, 0));
404 myCrossingEdges->killFocus();
406 myCrossingEdges->setTextColor(FXRGB(255, 0, 0));
407 myCurrentParametersValid =
false;
410 for (
const auto& edge : myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getChildEdges()) {
412 edge->resetCandidateFlags();
414 if (std::find(myCurrentSelectedEdges.begin(), myCurrentSelectedEdges.end(), edge) != myCurrentSelectedEdges.end()) {
415 edge->setTargetCandidate(
true);
417 edge->setPossibleCandidate(
true);
421 myCrossingFrameParent->getViewNet()->updateViewNet();
424 if (crossingEdges.empty()) {
425 myCurrentParametersValid =
false;
429 if (myCrossingPriorityCheckButton->getCheck()) {
430 myCrossingPriorityCheckButton->setText(
"true");
432 myCrossingPriorityCheckButton->setText(
"false");
436 if (GNEAttributeCarrier::canParse<double>(myCrossingWidth->getText().text()) &&
437 GNEAttributeCarrier::parse<double>(myCrossingWidth->getText().text()) > 0) {
438 myCrossingWidth->setTextColor(FXRGB(0, 0, 0));
439 myCrossingWidth->killFocus();
441 myCrossingWidth->setTextColor(FXRGB(255, 0, 0));
442 myCurrentParametersValid =
false;
446 myCrossingFrameParent->myCreateCrossing->setCreateCrossingButton(myCurrentParametersValid);
453 myCrossingFrameParent->openHelpAttributesDialog(myCrossingTemplate);
463 myCrossingFrameParent(crossingFrameParent) {
476 if (myCrossingFrameParent->myCrossingParameters->isCurrentParametersValid()) {
478 if (myCrossingFrameParent->myEdgeSelector->getCurrentJunction()->getNBNode()->checkCrossingDuplicated(myCrossingFrameParent->myCrossingParameters->getCrossingEdges()) ==
false) {
480 myCrossingFrameParent->myViewNet->getUndoList()->add(
new GNEChange_Crossing(myCrossingFrameParent->myEdgeSelector->getCurrentJunction(),
481 myCrossingFrameParent->myCrossingParameters->getCrossingEdges(),
482 myCrossingFrameParent->myCrossingParameters->getCrossingWidth(),
483 myCrossingFrameParent->myCrossingParameters->getCrossingPriority(),
488 myCrossingFrameParent->myEdgeSelector->onCmdClearSelection(0, 0, 0);
490 WRITE_WARNING(
"There is already another crossing with the same edges in the junction; Duplicated crossing aren't allowed.");
500 myCreateCrossingButton->enable();
502 myCreateCrossingButton->disable();
529 GNEFrame(horizontalFrameParent, viewNet,
"Crossings") {
FXDEFMAP(GNECrossingFrame::EdgesSelector) EdgesSelectorMap[]
@ MID_GNE_ADDITIONALFRAME_CLEARSELECTION
clear selection of elements
@ MID_GNE_SET_ATTRIBUTE
attribute edited
@ MID_GNE_CREATE
create element
@ MID_GNE_ADDITIONALFRAME_USESELECTED
use selected elements
@ MID_GNE_ADDITIONALFRAME_INVERTSELECTION
invert selection of eleents
@ MID_GNE_TLSFRAME_SELECT_JUNCTION
selected junction von TLS
#define GUIDesignLabelLeft
#define GUIDesignTextField
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame
#define GUIDesignButtonRectangular
little button rectangula used in frames (For example, in "help" buttons)
#define GUIDesignTextFieldNCol
Num of column of text field.
#define GUIDesignCheckButton
checkButton placed in left position
#define WRITE_WARNING(msg)
@ SUMO_TAG_CROSSING
crossing between edges for pedestrians
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_EDGES
the edges of a route
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
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)
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
GNENet * getNet() const
get pointer to net
void setCreateCrossingButton(bool value)
enable or disable button create crossing
CreateCrossing(GNECrossingFrame *crossingFrameParent)
FOX-declaration.
~CreateCrossing()
destructor
FXButton * myCreateCrossingButton
@field FXButton for create Crossing
long onCmdCreateCrossing(FXObject *, FXSelector, void *)
void enableCrossingParameters(bool hasTLS)
enable crossing parameters and set the default value of parameters
std::vector< NBEdge * > getCrossingEdges() const
get crossing NBedges
double getCrossingWidth() const
get crossing width
long onCmdHelp(FXObject *, FXSelector, void *)
Called when help button is pressed.
FXLabel * myCrossingWidthLabel
Label for width.
void markEdge(GNEEdge *edge)
mark or dismark edge
bool getCrossingPriority() const
get crossing priority
CrossingParameters(GNECrossingFrame *crossingFrameParent)
FOX-declaration.
void disableCrossingParameters()
disable crossing parameters and clear parameters
FXTextField * myCrossingWidth
TextField for width.
void useSelectedEdges(GNEJunction *parentJunction)
use selected eges
void invertEdges(GNEJunction *parentJunction)
invert edges
bool isCrossingParametersEnabled() const
check if currently the CrossingParameters is enabled
FXButton * myHelpCrossingAttribute
button for help
FXTextField * myCrossingEdges
TextField for edges.
GNECrossing * myCrossingTemplate
crossing template
FXCheckButton * myCrossingPriorityCheckButton
CheckBox for Priority.
void clearEdges()
clear edges
FXLabel * myCrossingEdgesLabel
Label for edges.
bool isCurrentParametersValid() const
check if current parameters are valid
FXLabel * myCrossingPriorityLabel
Label for Priority.
long onCmdSetAttribute(FXObject *, FXSelector, void *)
~CrossingParameters()
destructor
~CurrentJunction()
destructor
void updateCurrentJunctionLabel(const std::string &junctionID)
set current junction label
long onCmdUseSelectedEdges(FXObject *, FXSelector, void *)
EdgesSelector(GNECrossingFrame *crossingFrameParent)
FOX-declaration.
long onCmdClearSelection(FXObject *, FXSelector, void *)
called when clear selection button is pressed
~EdgesSelector()
destructor
FXButton * myInvertEdgesSelection
button for invert selection
GNEJunction * getCurrentJunction() const
get current junction
FXButton * myClearEdgesSelection
button for clear selection
long onCmdInvertSelection(FXObject *, FXSelector, void *)
called when invert selection button is pressed
void restoreEdgeColors()
restore colors of all edges
void enableEdgeSelector(GNEJunction *currentJunction)
enable edgeSelector
void disableEdgeSelector()
disable edgeSelector
FXButton * myUseSelectedEdges
CheckBox for selected edges.
GNECrossingFrame::CreateCrossing * myCreateCrossing
create crossing modul
GNECrossingFrame::Information * myInformation
information modul
GNECrossingFrame::EdgesSelector * myEdgeSelector
edge selector modul
~GNECrossingFrame()
Destructor.
GNECrossingFrame::CurrentJunction * myCurrentJunction
FOX need this.
void hide()
hide crossing frame
GNECrossingFrame::CrossingParameters * myCrossingParameters
crossing parameters modul
void addCrossing(const GNEViewNetHelper::ObjectsUnderCursor &objectsUnderCursor)
add Crossing element
void createCrossingHotkey()
create crossing (used when user press ENTER key in Crossing mode)
GNECrossingFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet)
Constructor.
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
A road/street connecting two junctions (netedit-version)
GNEViewNet * getViewNet() const
get view net
GNEViewNet * myViewNet
View Net.
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
virtual void hide()
hide Frame
const std::vector< GNEEdge * > & getChildEdges() const
get child edges
NBNode * getNBNode() const
Return net build node.
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
const std::string & getID() const
get ID
class used to group all variables related with objects under cursor after a click over view
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
GNEEdge * getEdgeFront() const
get front edge or a pointer to nullptr
GNENet * getNet() const
get the net object
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings
GUIVisualizationCandidateColorSettings candidateColorSettings
candidate color settings
C++ TraCI client API implementation.
static FXColor getFXColor(const RGBColor &col)
converts FXColor to RGBColor
bool isTLControlled() const
Returns whether this node is controlled by any tls.
static const PositionVector EMPTY
empty Vector
static const RGBColor WHITE
static const RGBColor target
color for selected candidate target
static const RGBColor possible
color for possible candidate element