Skip to content

Commit

Permalink
Merge 1184529 into f819936
Browse files Browse the repository at this point in the history
  • Loading branch information
geowar1 committed Nov 14, 2017
2 parents f819936 + 1184529 commit 1e65ae6
Show file tree
Hide file tree
Showing 6 changed files with 320 additions and 256 deletions.
Expand Up @@ -328,7 +328,7 @@ private void setupCheckNonContiguousBlocksMenu() {
//if (layoutTrack.getName().equals("TO1")
// || layoutTrack.getName().equals("TO2")
// || layoutTrack.getName().equals("TO3")) {
// log.info("•Stop here!");
// log.debug("*Stop here!");
//}
layoutTrack.checkForNonContiguousBlocks(blockNamesToTrackNameSetMaps);
}
Expand Down
293 changes: 134 additions & 159 deletions java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java
@@ -1,5 +1,7 @@
package jmri.jmrit.display.layoutEditor;

import static java.lang.Float.POSITIVE_INFINITY;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
Expand Down Expand Up @@ -1765,113 +1767,77 @@ public boolean isMainlineD() {
@Override
protected int findHitPointType(Point2D hitPoint, boolean useRectangles, boolean requireUnconnected) {
int result = NONE; // assume point not on connection
//note: optimization here: instead of creating rectangles for all the
// points to check below, we create a rectangle for the test point
// and test if the points below are in that rectangle instead.
Rectangle2D r = layoutEditor.trackControlCircleRectAt(hitPoint);
Point2D p, minPoint = MathUtil.zeroPoint2D;

if (useRectangles) {
// calculate points control rectangle
Rectangle2D r = layoutEditor.trackControlCircleRectAt(hitPoint);

if (!requireUnconnected) {
if (r.contains(center)) {
result = TURNOUT_CENTER;
}
}
//check the A connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectA() == null)) {
if (r.contains(getCoordsA())) {
result = TURNOUT_A;
}
}
}

//check the B connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectB() == null)) {
if (r.contains(getCoordsB())) {
result = TURNOUT_B;
}
}
}

//check the C connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectC() == null)) {
if (r.contains(getCoordsC())) {
result = TURNOUT_C;
}
}
}

//check the D connection point
if (NONE == result) {
if ((getTurnoutType() == DOUBLE_XOVER)
|| (getTurnoutType() == LH_XOVER)
|| (getTurnoutType() == RH_XOVER)) {
if (!requireUnconnected || (getConnectD() == null)) {
if (r.contains(getCoordsD())) {
result = TURNOUT_D;
}
}
}
}
} else {
// calculate radius of turnout control circle
double circleRadius = LayoutEditor.SIZE * layoutEditor.getTurnoutCircleSize();
double circleRadius = LayoutEditor.SIZE * layoutEditor.getTurnoutCircleSize();
double distance, minDistance = POSITIVE_INFINITY;

if (!requireUnconnected) {
// calculate the distance to the center point of this turnout
Double distance = hitPoint.distance(getCoordsCenter());
if (distance <= circleRadius) {
result = TURNOUT_CENTER;
}
}
// check center coordinates
p = getCoordsCenter();
distance = MathUtil.distance(p, hitPoint);
if (distance < minDistance) {
minDistance = distance;
minPoint = p;
result = TURNOUT_CENTER;
}

//check the A connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectA() == null)) {
Double distance = hitPoint.distance(getCoordsA());
if (distance <= circleRadius) {
result = TURNOUT_A;
}
}
//check the A connection point
if (!requireUnconnected || (getConnectA() == null)) {
p = getCoordsA();
distance = MathUtil.distance(p, hitPoint);
if (distance < minDistance) {
minDistance = distance;
minPoint = p;
result = TURNOUT_A;
}
}

//check the B connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectB() == null)) {
Double distance = hitPoint.distance(getCoordsB());
if (distance <= circleRadius) {
result = TURNOUT_B;
}
}
//check the B connection point
if (!requireUnconnected || (getConnectB() == null)) {
p = getCoordsB();
distance = MathUtil.distance(p, hitPoint);
if (distance < minDistance) {
minDistance = distance;
minPoint = p;
result = TURNOUT_B;
}
}

//check the C connection point
if (NONE == result) {
if (!requireUnconnected || (getConnectC() == null)) {
Double distance = hitPoint.distance(getCoordsC());
if (distance <= circleRadius) {
result = TURNOUT_C;
}
}
//check the C connection point
if (!requireUnconnected || (getConnectB() == null)) {
p = getCoordsC();
distance = MathUtil.distance(p, hitPoint);
if (distance < minDistance) {
minDistance = distance;
minPoint = p;
result = TURNOUT_C;
}
}

//check the D connection point
if (NONE == result) {
if ((getTurnoutType() == DOUBLE_XOVER)
|| (getTurnoutType() == LH_XOVER)
|| (getTurnoutType() == RH_XOVER)) {
if (!requireUnconnected || (getConnectD() == null)) {
Double distance = hitPoint.distance(getCoordsD());
if (distance <= circleRadius) {
result = TURNOUT_D;
}
}
//check the D connection point
if ((getTurnoutType() == DOUBLE_XOVER)
|| (getTurnoutType() == LH_XOVER)
|| (getTurnoutType() == RH_XOVER)) {
if (!requireUnconnected || (getConnectD() == null)) {
p = getCoordsD();
distance = MathUtil.distance(p, hitPoint);
if (distance < minDistance) {
minDistance = distance;
minPoint = p;
result = TURNOUT_D;
}
}
}
if ((useRectangles && !r.contains(minPoint))
|| (!useRectangles && (minDistance > circleRadius))) {
result = NONE;
}
return result;
}
} // findHitPointType

/*
* Modify coordinates methods
Expand Down Expand Up @@ -2313,8 +2279,10 @@ public void setObjects(LayoutEditor p) {
//Do the second one first then the activate is only called the once
if (!tSecondTurnoutName.isEmpty()) {
Turnout turnout = InstanceManager.turnoutManagerInstance().getTurnout(tSecondTurnoutName);

if (turnout != null) {
secondNamedTurnout = InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(tSecondTurnoutName, turnout);
secondNamedTurnout = InstanceManager.getDefault(jmri.NamedBeanHandleManager.class
).getNamedBeanHandle(tSecondTurnoutName, turnout);
secondTurnoutName = tSecondTurnoutName;
} else {
log.error("bad turnoutname '" + tSecondTurnoutName + "' in layoutturnout " + getId());
Expand All @@ -2324,8 +2292,10 @@ public void setObjects(LayoutEditor p) {
}
if (!tTurnoutName.isEmpty()) {
Turnout turnout = InstanceManager.turnoutManagerInstance().getTurnout(tTurnoutName);

if (turnout != null) {
namedTurnout = InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(tTurnoutName, turnout);
namedTurnout = InstanceManager.getDefault(jmri.NamedBeanHandleManager.class
).getNamedBeanHandle(tTurnoutName, turnout);
turnoutName = tTurnoutName;
activateTurnout();
} else {
Expand Down Expand Up @@ -2604,76 +2574,78 @@ public void actionPerformed(ActionEvent e) {
} else {
popup.add(ssaa);
}
}
if (!getBlockName().isEmpty()) {
final String[] boundaryBetween = getBlockBoundaries();
boolean blockBoundaries = false;
for (int i = 0; i < 4; i++) {
if (boundaryBetween[i] != null) {
blockBoundaries = true;

if (!getBlockName().isEmpty()) {
final String[] boundaryBetween = getBlockBoundaries();
boolean blockBoundaries = false;
for (int i = 0; i < boundaryBetween.length; i++) {
if (boundaryBetween[i] != null) {
blockBoundaries = true;
break;
}
}

if (blockBoundaries) {
popup.add(new AbstractAction(Bundle.getMessage("SetSignalMasts")) {
@Override
public void actionPerformed(ActionEvent e) {
layoutEditor.getLETools().setSignalMastsAtTurnoutFromMenu(LayoutTurnout.this,
boundaryBetween);
}
});
popup.add(new AbstractAction(Bundle.getMessage("SetSensors")) {
@Override
public void actionPerformed(ActionEvent e) {
layoutEditor.getLETools().setSensorsAtTurnoutFromMenu(
LayoutTurnout.this,
boundaryBetween,
layoutEditor.sensorIconEditor,
layoutEditor.sensorFrame);
}
});
}

if (InstanceManager.getDefault(LayoutBlockManager.class).isAdvancedRoutingEnabled()) {
Map<String, LayoutBlock> map = new HashMap<>();
if (!getBlockName().isEmpty()) {
map.put(getBlockName(), getLayoutBlock());
}
if (!getBlockBName().isEmpty()) {
map.put(getBlockBName(), getLayoutBlockB());
}
if (!getBlockCName().isEmpty()) {
map.put(getBlockCName(), getLayoutBlockC());
}
if (!getBlockDName().isEmpty()) {
map.put(getBlockDName(), getLayoutBlockD());
}
if (blockBoundaries) {
popup.add(new AbstractAction(Bundle.getMessage("SetSignalMasts")) {
@Override
public void actionPerformed(ActionEvent e) {
layoutEditor.getLETools().setSignalMastsAtTurnoutFromMenu(LayoutTurnout.this,
boundaryBetween);
}
});
popup.add(new AbstractAction(Bundle.getMessage("SetSensors")) {
@Override
public void actionPerformed(ActionEvent e) {
layoutEditor.getLETools().setSensorsAtTurnoutFromMenu(
LayoutTurnout.this,
boundaryBetween,
layoutEditor.sensorIconEditor,
layoutEditor.sensorFrame);
}
});

if (InstanceManager.getDefault(LayoutBlockManager.class).isAdvancedRoutingEnabled()) {
Map<String, LayoutBlock> map = new HashMap<>();
if (!getBlockName().isEmpty()) {
map.put(getBlockName(), getLayoutBlock());
}
if (!getBlockBName().isEmpty()) {
map.put(getBlockBName(), getLayoutBlockB());
}
if (!getBlockCName().isEmpty()) {
map.put(getBlockCName(), getLayoutBlockC());
}
if (!getBlockDName().isEmpty()) {
map.put(getBlockDName(), getLayoutBlockD());
}
if (map.size() == 1) {
popup.add(new AbstractAction(Bundle.getMessage("ViewBlockRouting")) {
if (map.size() == 1) {
popup.add(new AbstractAction(Bundle.getMessage("ViewBlockRouting")) {
@Override
public void actionPerformed(ActionEvent e) {
AbstractAction routeTableAction = new LayoutBlockRouteTableAction("ViewRouting", getLayoutBlock());
routeTableAction.actionPerformed(e);
}
});
} else if (map.size() > 1) {
JMenu viewRouting = new JMenu(Bundle.getMessage("ViewBlockRouting"));
for (Map.Entry<String, LayoutBlock> entry : map.entrySet()) {
String blockName = entry.getKey();
LayoutBlock layoutBlock = entry.getValue();
viewRouting.add(new AbstractAction(getBlockBName()) {
@Override
public void actionPerformed(ActionEvent e) {
AbstractAction routeTableAction = new LayoutBlockRouteTableAction("ViewRouting", getLayoutBlock());
AbstractAction routeTableAction = new LayoutBlockRouteTableAction(blockName, layoutBlock);
routeTableAction.actionPerformed(e);
}
});
} else if (map.size() > 1) {
JMenu viewRouting = new JMenu(Bundle.getMessage("ViewBlockRouting"));
for (Map.Entry<String, LayoutBlock> entry : map.entrySet()) {
String blockName = entry.getKey();
LayoutBlock layoutBlock = entry.getValue();
viewRouting.add(new AbstractAction(getBlockBName()) {
@Override
public void actionPerformed(ActionEvent e) {
AbstractAction routeTableAction = new LayoutBlockRouteTableAction(blockName, layoutBlock);
routeTableAction.actionPerformed(e);
}
});
}
popup.add(viewRouting);
}
} // isAdvancedRoutingEnabled()
popup.add(viewRouting);
}
} // if (blockBoundaries)
}
}
} // .isAdvancedRoutingEnabled()
} // getBlockName().isEmpty()
setAdditionalEditPopUpMenu(popup);
layoutEditor.setShowAlignmentMenu(popup);
popup.show(mouseEvent.getComponent(), mouseEvent.getX(), mouseEvent.getY());
Expand Down Expand Up @@ -2963,8 +2935,11 @@ public ArrayList<LayoutBlock> getProtectedBlocks(jmri.NamedBean bean) {
protected void removeSML(SignalMast signalMast) {
if (signalMast == null) {
return;

}
if (jmri.InstanceManager.getDefault(LayoutBlockManager.class).isAdvancedRoutingEnabled() && InstanceManager.getDefault(jmri.SignalMastLogicManager.class).isSignalMastUsed(signalMast)) {
if (jmri.InstanceManager.getDefault(LayoutBlockManager.class
).isAdvancedRoutingEnabled() && InstanceManager.getDefault(jmri.SignalMastLogicManager.class
).isSignalMastUsed(signalMast)) {
SignallingGuiTools.removeSignalMastLogic(null, signalMast);
}
}
Expand Down Expand Up @@ -3872,7 +3847,7 @@ public void checkForNonContiguousBlocks(
}
}
} else { // (#3)
log.info("•New block ('{}') trackNameSets", theBlockName);
log.debug("*New block ('{}') trackNameSets", theBlockName);
TrackNameSets = new ArrayList<>();
blockNamesToTrackNameSetsMap.put(theBlockName, TrackNameSets);
}
Expand All @@ -3881,7 +3856,7 @@ public void checkForNonContiguousBlocks(
TrackNameSets.add(TrackNameSet);
}
if (TrackNameSet.add(getName())) {
log.info("• Add track '{}' to trackNameSet for block '{}'", getName(), theBlockName);
log.debug("* Add track '{}' to trackNameSet for block '{}'", getName(), theBlockName);
}
theConnect.collectContiguousTracksNamesInBlockNamed(theBlockName, TrackNameSet);
}
Expand Down Expand Up @@ -3923,7 +3898,7 @@ public void collectContiguousTracksNamesInBlockNamed(
for (LayoutTrack connect : connects) {
// if we are added to the TrackNameSet
if (TrackNameSet.add(getName())) {
log.info("• Add track '{}'for block '{}'", getName(), blockName);
log.debug("* Add track '{}'for block '{}'", getName(), blockName);
}
// it's time to play... flood your neighbour!
connect.collectContiguousTracksNamesInBlockNamed(blockName, TrackNameSet);
Expand Down

0 comments on commit 1e65ae6

Please sign in to comment.