From: <kev...@us...> - 2011-07-26 10:15:59
|
Revision: 18049 http://jmri.svn.sourceforge.net/jmri/?rev=18049&view=rev Author: kevin-dickerson Date: 2011-07-26 10:15:53 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Update sensor at boundary to use a namedbeanhandle, even though the name is only stored here, this is so that we can keep up with moves and changes of userNames. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-26 07:51:59 UTC (rev 18048) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-26 10:15:53 UTC (rev 18049) @@ -7125,7 +7125,9 @@ } }); if (boundaryFromMenu) getSavedAnchorSensors(null); - } + } else { + if (boundaryFromMenu) getSavedAnchorSensors(null); + } setSensorsAtBoundaryFrame.pack(); setSensorsAtBoundaryFrame.setVisible(true); setSensorsAtBoundaryOpen = true; Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2011-07-26 07:51:59 UTC (rev 18048) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2011-07-26 10:15:53 UTC (rev 18049) @@ -9,6 +9,10 @@ import javax.swing.JPopupMenu; import javax.swing.JSeparator; +import jmri.NamedBeanHandle; +import jmri.InstanceManager; +import jmri.Sensor; + /** * PositionablePoint is a Point defining a node in the Track that can be dragged around the * inside of the enclosing LayoutEditor panel using a right-drag (drag with meta key). @@ -52,8 +56,10 @@ private Point2D coords = new Point2D.Double(10.0,10.0); private String eastBoundSignalName = ""; // signal head for east (south) bound trains private String westBoundSignalName = ""; // signal head for west (north) bound trains - private String eastBoundSensorName = ""; - private String westBoundSensorName = ""; + /* We use a namedbeanhandle for the the sensors, even though we only store the name here, + this is so that we can keep up with moves and changes of userNames */ + private NamedBeanHandle<Sensor> eastBoundSensorNamed = null; + private NamedBeanHandle<Sensor> westBoundSensorNamed = null; private String eastBoundSignalMastName = ""; private String westBoundSignalMastName = ""; @@ -85,11 +91,43 @@ public String getWestBoundSignal() {return westBoundSignalName;} public void setWestBoundSignal(String signalName) {westBoundSignalName = signalName;} - public String getEastBoundSensor() {return eastBoundSensorName;} - public void setEastBoundSensor(String sensorName) {eastBoundSensorName = sensorName;} - public String getWestBoundSensor() {return westBoundSensorName;} - public void setWestBoundSensor(String sensorName) {westBoundSensorName = sensorName;} + public String getEastBoundSensor() { + if(eastBoundSensorNamed!=null) + return eastBoundSensorNamed.getName(); + return ""; + } + public void setEastBoundSensor(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + eastBoundSensorNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + eastBoundSensorNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + eastBoundSensorNamed=null; + } + } + public String getWestBoundSensor() { + if(westBoundSensorNamed!=null) + return westBoundSensorNamed.getName(); + return ""; + } + public void setWestBoundSensor(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + westBoundSensorNamed=null; + return; + } + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + westBoundSensorNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + westBoundSensorNamed=null; + } + } + public String getEastBoundSignalMast() {return eastBoundSignalMastName;} public void setEastBoundSignalMast(String signalMastName) {eastBoundSignalMastName = signalMastName;} public String getWestBoundSignalMast() {return westBoundSignalMastName;} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2011-07-26 11:51:17
|
Revision: 18051 http://jmri.svn.sourceforge.net/jmri/?rev=18051&view=rev Author: kevin-dickerson Date: 2011-07-26 11:51:10 +0000 (Tue, 26 Jul 2011) Log Message: ----------- Update sensors at turnouts or levelcrossings to use a namedbeanhandle, even though the name is only stored here, this is so that we can keep up with moves and changes of userNames. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-26 11:46:22 UTC (rev 18050) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-26 11:51:10 UTC (rev 18051) @@ -9676,8 +9676,8 @@ setSensorsCancelPressed(null); } }); - if (turnoutFromMenu) turnoutSensorsGetSaved(null); } + if (turnoutFromMenu) turnoutSensorsGetSaved(null); setSensorsFrame.setPreferredSize(null); setSensorsFrame.pack(); setSensorsFrame.setVisible(true); @@ -10206,8 +10206,8 @@ setXingSensorsCancelPressed(null); } }); - if (xingSensorFromMenu) xingSensorsGetSaved(null); } + if (xingSensorFromMenu) xingSensorsGetSaved(null); sensorsAtXingFrame.setPreferredSize(null); sensorsAtXingFrame.pack(); sensorsAtXingFrame.setVisible(true); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-07-26 11:46:22 UTC (rev 18050) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-07-26 11:51:10 UTC (rev 18051) @@ -3,6 +3,8 @@ import jmri.util.JmriJFrame; import jmri.InstanceManager; import jmri.Turnout; +import jmri.Sensor; +import jmri.NamedBeanHandle; import jmri.jmrit.display.layoutEditor.blockRoutingTable.*; import java.awt.*; @@ -134,10 +136,10 @@ public String signalCMast = ""; // diverging public String signalDMast = ""; // single or double crossover only - public String sensorA = ""; // Throat - public String sensorB = ""; // Continuing - public String sensorC = ""; // diverging - public String sensorD = ""; // single or double crossover only + private NamedBeanHandle<Sensor> sensorANamed = null; // Throat + private NamedBeanHandle<Sensor> sensorBNamed = null; // Continuing + private NamedBeanHandle<Sensor> sensorCNamed = null; // diverging + private NamedBeanHandle<Sensor> sensorDNamed = null; // single or double crossover only public int type = RH_TURNOUT; public Object connectA = null; // throat of LH, RH, RH Xover, LH Xover, and WYE turnouts @@ -278,15 +280,85 @@ public String getSignalDMast() {return signalDMast;} public void setSignalDMast(String signalMast) {signalDMast = signalMast;} - public String getSensorA() {return sensorA;} - public void setSensorA(String sensor) {sensorA = sensor;} - public String getSensorB() {return sensorB;} - public void setSensorB(String sensor) {sensorB = sensor;} - public String getSensorC() {return sensorC;} - public void setSensorC(String sensor) {sensorC = sensor;} - public String getSensorD() {return sensorD;} - public void setSensorD(String sensor) {sensorD = sensor;} + public String getSensorA() { + if(sensorANamed!=null) + return sensorANamed.getName(); + return ""; + } + public void setSensorA(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorANamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorANamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorANamed=null; + } + } + public String getSensorB() { + if(sensorBNamed!=null) + return sensorBNamed.getName(); + return ""; + } + + public void setSensorB(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorBNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorBNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorBNamed=null; + } + } + + public String getSensorC() { + if(sensorCNamed!=null) + return sensorCNamed.getName(); + return ""; + } + + public void setSensorC(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorCNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorCNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorCNamed=null; + } + } + + public String getSensorD() { + if(sensorDNamed!=null) + return sensorDNamed.getName(); + return ""; + } + + public void setSensorD(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorDNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorDNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorDNamed=null; + } + } + public String getLinkedTurnoutName() {return linkedTurnoutName;} public void setLinkedTurnoutName(String s) {linkedTurnoutName = s;} public int getLinkType() {return linkType;} Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-07-26 11:46:22 UTC (rev 18050) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-07-26 11:51:10 UTC (rev 18051) @@ -10,6 +10,10 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; +import jmri.Sensor; +import jmri.NamedBeanHandle; +import jmri.InstanceManager; + import java.util.ResourceBundle; import java.util.ArrayList; @@ -70,11 +74,15 @@ private String signalCMastName = ""; // signal at C track junction private String signalDMastName = ""; // signal at D track junction - private String sensorAName = ""; // sensor at A track junction + /*private String sensorAName = ""; // sensor at A track junction private String sensorBName = ""; // sensor at B track junction private String sensorCName = ""; // sensor at C track junction - private String sensorDName = ""; // sensor at D track junction + private String sensorDName = ""; // sensor at D track junction */ + private NamedBeanHandle<Sensor> sensorANamed = null; // sensor at A track junction + private NamedBeanHandle<Sensor> sensorBNamed = null; // sensor at B track junction + private NamedBeanHandle<Sensor> sensorCNamed = null; // sensor at C track junction + private NamedBeanHandle<Sensor> sensorDNamed = null; // sensor at D track junction private Object connectA = null; private Object connectB = null; @@ -119,15 +127,86 @@ public String getSignalDMastName() {return signalDMastName;} public void setSignalDMastName(String signalName) {signalDMastName = signalName;} - public String getSensorAName() {return sensorAName;} - public void setSensorAName(String sensorName) {sensorAName = sensorName;} - public String getSensorBName() {return sensorBName;} - public void setSensorBName(String sensorName) {sensorBName = sensorName;} - public String getSensorCName() {return sensorCName;} - public void setSensorCName(String sensorName) {sensorCName = sensorName;} - public String getSensorDName() {return sensorDName;} - public void setSensorDName(String sensorName) {sensorDName = sensorName;} + public String getSensorAName() { + if(sensorANamed!=null) + return sensorANamed.getName(); + return ""; + } + public void setSensorAName(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorANamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorANamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorANamed=null; + } + } + + public String getSensorBName() { + if(sensorBNamed!=null) + return sensorBNamed.getName(); + return ""; + } + + public void setSensorBName(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorBNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorBNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorBNamed=null; + } + } + + public String getSensorCName() { + if(sensorCNamed!=null) + return sensorCNamed.getName(); + return ""; + } + + public void setSensorCName(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorCNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorCNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorCNamed=null; + } + } + + public String getSensorDName() { + if(sensorDNamed!=null) + return sensorDNamed.getName(); + return ""; + } + + public void setSensorDName(String sensorName) { + if(sensorName==null || sensorName.equals("")){ + sensorDNamed=null; + return; + } + + Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); + if (sensor != null) { + sensorDNamed = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(sensorName, sensor); + } else { + sensorDNamed=null; + } + } + public Object getConnectA() {return connectA;} public Object getConnectB() {return connectB;} public Object getConnectC() {return connectC;} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2011-07-29 10:05:29
|
Revision: 18073 http://jmri.svn.sourceforge.net/jmri/?rev=18073&view=rev Author: kevin-dickerson Date: 2011-07-29 10:05:23 +0000 (Fri, 29 Jul 2011) Log Message: ----------- prevent the size of certain windows from being saved Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurntable.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/MultiSensorIconFrame.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-29 09:52:40 UTC (rev 18072) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-07-29 10:05:23 UTC (rev 18073) @@ -142,7 +142,7 @@ } // Initialize if needed if (setSignalsFrame == null) { - setSignalsFrame = new JmriJFrame( rb.getString("SignalsAtTurnout") ); + setSignalsFrame = new JmriJFrame( rb.getString("SignalsAtTurnout"), false, true); setSignalsFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtTurnout", true); setSignalsFrame.setLocation(70,30); Container theContentPane = setSignalsFrame.getContentPane(); @@ -1678,7 +1678,7 @@ } // Initialize if needed if (setSignalsAtBoundaryFrame == null) { - setSignalsAtBoundaryFrame = new JmriJFrame( rb.getString("SignalsAtBoundary") ); + setSignalsAtBoundaryFrame = new JmriJFrame( rb.getString("SignalsAtBoundary"), false, true ); setSignalsAtBoundaryFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtBoundary", true); setSignalsAtBoundaryFrame.setLocation(70,30); Container theContentPane = setSignalsAtBoundaryFrame.getContentPane(); @@ -2226,7 +2226,7 @@ } // Initialize if needed if (setSignalsAtXoverFrame == null) { - setSignalsAtXoverFrame = new JmriJFrame( rb.getString("SignalsAtXoverTurnout") ); + setSignalsAtXoverFrame = new JmriJFrame( rb.getString("SignalsAtXoverTurnout"), false, true ); setSignalsAtXoverFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtXoverTurnout", true); setSignalsAtXoverFrame.setLocation(70,30); Container theContentPane = setSignalsAtXoverFrame.getContentPane(); @@ -3339,7 +3339,7 @@ dField.setText(""); // Initialize if needed if (setSignalsAtXingFrame == null) { - setSignalsAtXingFrame = new JmriJFrame( rb.getString("SignalsAtLevelXing") ); + setSignalsAtXingFrame = new JmriJFrame( rb.getString("SignalsAtLevelXing"), false, true ); setSignalsAtXingFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtLevelXing", true); setSignalsAtXingFrame.setLocation(70,30); Container theContentPane = setSignalsAtXingFrame.getContentPane(); @@ -4182,7 +4182,7 @@ } // Initialize if needed if (setSignalsAtTToTFrame == null) { - setSignalsAtTToTFrame = new JmriJFrame( rb.getString("SignalsAtTToTTurnout") ); + setSignalsAtTToTFrame = new JmriJFrame( rb.getString("SignalsAtTToTTurnout"), false, true ); setSignalsAtTToTFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtTToTTurnout", true); setSignalsAtTToTFrame.setLocation(70,30); Container theContentPane = setSignalsAtTToTFrame.getContentPane(); @@ -5762,7 +5762,7 @@ } // Initialize if needed if (setSignalsAt3WayFrame == null) { - setSignalsAt3WayFrame = new JmriJFrame( rb.getString("SignalsAt3WayTurnout") ); + setSignalsAt3WayFrame = new JmriJFrame( rb.getString("SignalsAt3WayTurnout"), false, true ); setSignalsAt3WayFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAt3WayTurnout", true); setSignalsAt3WayFrame.setLocation(70,30); Container theContentPane = setSignalsAt3WayFrame.getContentPane(); @@ -7017,7 +7017,7 @@ westBoundSensor = new BeanDetails("Sensor"); eastBoundSensor = new BeanDetails("Sensor"); - setSensorsAtBoundaryFrame = new JmriJFrame( rb.getString("SensorsAtBoundary") ); + setSensorsAtBoundaryFrame = new JmriJFrame( rb.getString("SensorsAtBoundary"), false, true ); setSensorsAtBoundaryFrame.addHelpMenu("package.jmri.jmrit.display.SetSensorsAtBoundary", true); setSensorsAtBoundaryFrame.setLocation(70,30); Container theContentPane = setSensorsAtBoundaryFrame.getContentPane(); @@ -7423,7 +7423,7 @@ if (setSignalMastsAtBoundaryFrame == null) { eastSignalMast = new BeanDetails("SignalMast"); westSignalMast = new BeanDetails("SignalMast"); - setSignalMastsAtBoundaryFrame = new JmriJFrame( rb.getString("SignalMastsAtBoundary") ); + setSignalMastsAtBoundaryFrame = new JmriJFrame( rb.getString("SignalMastsAtBoundary"), false, true ); setSignalMastsAtBoundaryFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalMastsAtBoundary", true); setSignalMastsAtBoundaryFrame.setLocation(70,30); Container theContentPane = setSignalMastsAtBoundaryFrame.getContentPane(); @@ -8404,7 +8404,7 @@ } // Initialize if needed if (signalMastsJmriFrame == null) { - signalMastsJmriFrame = new JmriJFrame( rb.getString("SignalMastsAtTurnout") ); + signalMastsJmriFrame = new JmriJFrame( rb.getString("SignalMastsAtTurnout"), false, true ); signalMastsJmriFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalMastsAtTurnout", true); signalMastsJmriFrame.setLocation(70,30); Container theContentPane = signalMastsJmriFrame.getContentPane(); @@ -8997,7 +8997,7 @@ xingSignalMastC = new BeanDetails("SignalMast"); xingSignalMastD = new BeanDetails("SignalMast"); - signalMastsAtXingFrame = new JmriJFrame( rb.getString("SignalMastsAtLevelXing") ); + signalMastsAtXingFrame = new JmriJFrame( rb.getString("SignalMastsAtLevelXing"), false, true ); signalMastsAtXingFrame.addHelpMenu("package.jmri.jmrit.display.SetSignalsAtLevelXing", true); signalMastsAtXingFrame.setLocation(70,30); Container theContentPane = signalMastsAtXingFrame.getContentPane(); @@ -9576,7 +9576,7 @@ } // Initialize if needed if (setSensorsFrame == null) { - setSensorsFrame = new JmriJFrame( rb.getString("SensorsAtTurnout") ); + setSensorsFrame = new JmriJFrame( rb.getString("SensorsAtTurnout"), false, true ); setSensorsFrame.addHelpMenu("package.jmri.jmrit.display.SetSensorsAtTurnout", true); setSensorsFrame.setLocation(70,30); Container theContentPane = setSensorsFrame.getContentPane(); @@ -10089,7 +10089,7 @@ } // Initialize if needed if (sensorsAtXingFrame == null) { - sensorsAtXingFrame = new JmriJFrame( rb.getString("SensorsAtLevelXing") ); + sensorsAtXingFrame = new JmriJFrame( rb.getString("SensorsAtLevelXing"), false, true ); sensorsAtXingFrame.addHelpMenu("package.jmri.jmrit.display.SetSensorsAtLevelXing", true); sensorsAtXingFrame.setLocation(70,30); Container theContentPane = sensorsAtXingFrame.getContentPane(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurntable.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurntable.java 2011-07-29 09:52:40 UTC (rev 18072) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurntable.java 2011-07-29 10:05:23 UTC (rev 18073) @@ -305,7 +305,7 @@ needsRedraw = false; // Initialize if needed if (editTurntableFrame == null) { - editTurntableFrame = new JmriJFrame( rb.getString("EditTurntable") ); + editTurntableFrame = new JmriJFrame( rb.getString("EditTurntable"), false, true ); editTurntableFrame.addHelpMenu("package.jmri.jmrit.display.EditTurntable", true); editTurntableFrame.setLocation(50,30); Container contentPane = editTurntableFrame.getContentPane(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-07-29 09:52:40 UTC (rev 18072) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-07-29 10:05:23 UTC (rev 18073) @@ -603,7 +603,7 @@ } // Initialize if needed if (editLevelXingFrame == null) { - editLevelXingFrame = new JmriJFrame( rb.getString("EditXing") ); + editLevelXingFrame = new JmriJFrame( rb.getString("EditXing"), false, true ); editLevelXingFrame.addHelpMenu("package.jmri.jmrit.display.EditLevelXing", true); editLevelXingFrame.setLocation(50,30); Container contentPane = editLevelXingFrame.getContentPane(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/MultiSensorIconFrame.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/MultiSensorIconFrame.java 2011-07-29 09:52:40 UTC (rev 18072) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/MultiSensorIconFrame.java 2011-07-29 10:05:23 UTC (rev 18073) @@ -82,7 +82,7 @@ defaultIcons.setIcon(1, "Inconsistent:","resources/icons/USS/plate/levers/l-unknown.gif"); defaultIcons.setIcon(2, "Inactive:","resources/icons/USS/plate/levers/l-inconsistent.gif"); defaultIcons.complete(); - defaultsFrame = new JmriJFrame(""); + defaultsFrame = new JmriJFrame("", false, true); defaultsFrame.getContentPane().add(new JLabel(" Select new file, then click on icon to change "),BorderLayout.NORTH); defaultsFrame.getContentPane().add(defaultIcons); defaultsFrame.pack(); @@ -141,7 +141,7 @@ JTextField sensor = new JTextField(5); JPanel self; MultiIconEditor ed = new MultiIconEditor(1); - JmriJFrame edf = new JmriJFrame(""); + JmriJFrame edf = new JmriJFrame("", false, true); public String toString() { return ed.getIcon(0).toString(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2011-10-24 14:22:57
|
Revision: 18954 http://jmri.svn.sourceforge.net/jmri/?rev=18954&view=rev Author: kevin-dickerson Date: 2011-10-24 14:22:47 +0000 (Mon, 24 Oct 2011) Log Message: ----------- Add the ability to add a second turnout address to Cross-Overs so that additional logixs/routes are not required if two different turnout addresses are used to control a cross-over. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2011-10-24 12:40:27 UTC (rev 18953) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2011-10-24 14:22:47 UTC (rev 18954) @@ -4198,6 +4198,7 @@ t = turnoutList.get(i); log.debug("LT '"+t.getName()+"', Turnout tested '"+t.getTurnoutName()+"' "); Turnout to = t.getTurnout(); + Turnout to2 = t.getSecondTurnout(); if (to!=null) { if ( (to.getSystemName().equals(turnoutName.toUpperCase())) || ((to.getUserName()!=null) && (to.getUserName().equals(turnoutName))) ) { @@ -4207,7 +4208,17 @@ rb.getString("Error"),JOptionPane.ERROR_MESSAGE); return false; } - } + } + if (to2!=null){ + if ( (to2.getSystemName().equals(turnoutName.toUpperCase())) || + ((to2.getUserName()!=null) && (to2.getUserName().equals(turnoutName))) ) { + JOptionPane.showMessageDialog(openPane, + java.text.MessageFormat.format(rb.getString("Error4"), + new Object[]{turnoutName}), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return false; + } + } } // check that the unique turnout name corresponds to a defined physical turnout Turnout to = InstanceManager.turnoutManagerInstance().getTurnout(turnoutName); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2011-10-24 12:40:27 UTC (rev 18953) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2011-10-24 14:22:47 UTC (rev 18954) @@ -100,6 +100,8 @@ EditSensorIcons = Change Sensor Icons EditSignalIcons = Change Signal Head Icons IconChangeInfo = Select new file, then click on icon to change. +Supporting = Supporting +SupportingTurnout = Use Two Physical Addresses # individual edit pane items EditTurnout = Edit Turnout Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-10-24 12:40:27 UTC (rev 18953) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-10-24 14:22:47 UTC (rev 18954) @@ -6,6 +6,7 @@ import jmri.Sensor; import jmri.NamedBeanHandle; import jmri.jmrit.display.layoutEditor.blockRoutingTable.*; +import jmri.util.swing.JmriBeanComboBox; import java.awt.*; import java.awt.geom.*; @@ -107,6 +108,7 @@ // operational instance variables (not saved between sessions) //private Turnout turnout = null; private NamedBeanHandle<Turnout> namedTurnout = null; + private NamedBeanHandle<Turnout> secondNamedTurnout = null; private LayoutBlock block = null; private LayoutBlock blockB = null; // Xover - second block, if there is one private LayoutBlock blockC = null; // Xover - third block, if there is one @@ -119,6 +121,11 @@ public String ident; // name of this layout turnout (hidden from user) public String turnoutName = ""; // should be the name (system or user) of // an existing physical turnout + public String secondTurnoutName = ""; /* should be the name (system or user) of + an existing physical turnout. Second turnout is + used to allow the throwing of two different turnout + to control one cross-over + */ public String blockName = ""; // name for block, if there is one public String blockBName = ""; // Xover - name for second block, if there is one public String blockCName = ""; // Xover - name for third block, if there is one @@ -253,6 +260,11 @@ if (namedTurnout!=null) return namedTurnout.getName(); return turnoutName; + } + public String getSecondTurnoutName() { + if (secondNamedTurnout!=null) + return secondNamedTurnout.getName(); + return secondTurnoutName; } public String getBlockName() {return blockName;} public String getBlockBName() {return blockBName;} @@ -367,6 +379,10 @@ public String getLinkedTurnoutName() {return linkedTurnoutName;} public void setLinkedTurnoutName(String s) {linkedTurnoutName = s;} + + public String setSecondTurnoutName() { return secondTurnoutName; } + public void setSecondTuroutName(String s) {secondTurnoutName = s; } + public int getLinkType() {return linkType;} public void setLinkType(int type) {linkType = type;} public int getTurnoutType() {return type;} @@ -402,6 +418,33 @@ } } + public Turnout getSecondTurnout() { + if (secondNamedTurnout==null) { + // set physical turnout if possible and needed + setSecondTurnout(secondTurnoutName); + + if (secondNamedTurnout==null){ + return null; + } + } + return secondNamedTurnout.getBean(); + } + + public void setSecondTurnout(String tName) { + if (secondNamedTurnout!=null) deactivateTurnout(); + secondTurnoutName = tName; + Turnout turnout = jmri.InstanceManager.turnoutManagerInstance(). + getTurnout(secondTurnoutName); + if (turnout!=null) { + secondNamedTurnout = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(secondTurnoutName, turnout); + activateTurnout(); + } + else { + secondTurnoutName = ""; + secondNamedTurnout = null; + } + } + public void setContinuingSense(int sense) {continuingSense=sense;} public void setDisabled(boolean state) {disabled = state;} public boolean isDisabled() {return disabled;} @@ -895,10 +938,16 @@ } }, namedTurnout.getName(), "Layout Editor Turnout"); } + if (secondNamedTurnout!=null) { + secondNamedTurnout.getBean().addPropertyChangeListener(mTurnoutListener, secondNamedTurnout.getName(), "Layout Editor Turnout"); + } } private void deactivateTurnout() { if (mTurnoutListener!=null) { namedTurnout.getBean().removePropertyChangeListener(mTurnoutListener); + if(secondNamedTurnout!=null){ + secondNamedTurnout.getBean().removePropertyChangeListener(mTurnoutListener); + } mTurnoutListener = null; } } @@ -916,10 +965,17 @@ } } // toggle turnout - if (getTurnout().getKnownState()==jmri.Turnout.CLOSED) + if (getTurnout().getKnownState()==jmri.Turnout.CLOSED){ getTurnout().setCommandedState(jmri.Turnout.THROWN); - else + if(getSecondTurnout()!=null) + getSecondTurnout().setCommandedState(jmri.Turnout.THROWN); + } + else { getTurnout().setCommandedState(jmri.Turnout.CLOSED); + if(getSecondTurnout()!=null) + getSecondTurnout().setCommandedState(jmri.Turnout.CLOSED); + + } } } @@ -976,6 +1032,7 @@ public String tBlockCName = ""; public String tBlockDName = ""; public String tTurnoutName = ""; + public String tSecondTurnoutName = ""; /** * Initialization method * The above variables are initialized by PositionablePointXml, then the following @@ -1028,6 +1085,20 @@ log.error("bad blockname '"+tBlockDName+"' in layoutturnout "+ident); } } + //Do the second one first then the activate is only called the once + if (tSecondTurnoutName.length()>0) { + Turnout turnout = jmri.InstanceManager.turnoutManagerInstance(). + getTurnout(tSecondTurnoutName); + if (turnout!=null) { + secondNamedTurnout = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(tSecondTurnoutName, turnout); + secondTurnoutName = tSecondTurnoutName; + } + else { + log.error("bad turnoutname '"+tSecondTurnoutName+"' in layoutturnout "+ident); + secondTurnoutName = ""; + secondNamedTurnout = null; + } + } if (tTurnoutName.length()>0) { Turnout turnout = jmri.InstanceManager.turnoutManagerInstance(). getTurnout(tTurnoutName); @@ -1382,6 +1453,8 @@ // variables for Edit Layout Turnout pane private JmriJFrame editLayoutTurnoutFrame = null; private JTextField turnoutNameField = new JTextField(16); + private JmriBeanComboBox secondTurnoutComboBox; + private JLabel secondTurnoutLabel; private JTextField blockNameField = new JTextField(16); private JTextField blockBNameField = new JTextField(16); private JTextField blockCNameField = new JTextField(16); @@ -1398,6 +1471,7 @@ private boolean editOpen = false; private boolean needRedraw = false; private boolean needsBlockUpdate = false; + private JCheckBox additionalTurnout = new JCheckBox(rb.getString("SupportingTurnout")); /** * Edit a Layout Turnout @@ -1422,6 +1496,32 @@ panel1.add(turnoutNameField); turnoutNameField.setToolTipText( rb.getString("EditTurnoutNameHint") ); contentPane.add(panel1); + if((type ==RH_XOVER) || (type==LH_XOVER) || (type == DOUBLE_XOVER)){ + JPanel panel1a = new JPanel(); + panel1a.setLayout(new BoxLayout(panel1a, BoxLayout.Y_AXIS)); + secondTurnoutComboBox = new JmriBeanComboBox(InstanceManager.turnoutManagerInstance(), getSecondTurnout(), JmriBeanComboBox.DISPLAYNAME); + additionalTurnout.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(additionalTurnout.isSelected()){ + secondTurnoutLabel.setEnabled(true); + secondTurnoutComboBox.setEnabled(true); + } else { + secondTurnoutLabel.setEnabled(false); + secondTurnoutComboBox.setEnabled(false); + } + } + }); + panel1a.add(additionalTurnout); + contentPane.add(panel1a); + secondTurnoutLabel = new JLabel( rb.getString("Supporting") + rb.getString("Turnout")+" "+rb.getString("Name") ); + secondTurnoutLabel.setEnabled(false); + secondTurnoutComboBox.setEnabled(false); + JPanel panel1b = new JPanel(); + panel1b.add(secondTurnoutLabel); + panel1b.add(secondTurnoutComboBox); + contentPane.add(panel1b); + } + // add continuing state choice, if not crossover if ( (type != DOUBLE_XOVER) && (type != RH_XOVER) && (type != LH_XOVER) ) { JPanel panel3 = new JPanel(); @@ -1435,7 +1535,8 @@ panel3.add (new JLabel(rb.getString("ContinuingState"))); panel3.add (stateBox); contentPane.add(panel3); - } + } + // setup block name JPanel panel2 = new JPanel(); panel2.setLayout(new FlowLayout()); @@ -1531,8 +1632,9 @@ blockBNameField.setText(blockBName); blockCNameField.setText(blockCName); blockDNameField.setText(blockDName); - } + } turnoutNameField.setText(turnoutName); + if ( (type != DOUBLE_XOVER) && (type != RH_XOVER) && (type != LH_XOVER) ) { if (continuingSense==Turnout.CLOSED) { stateBox.setSelectedIndex(turnoutClosedIndex); @@ -1540,7 +1642,15 @@ else { stateBox.setSelectedIndex(turnoutThrownIndex); } - } + } else { + //secondTurnoutNameField.setText(secondTurnoutName); + if(secondNamedTurnout!=null){ + additionalTurnout.setSelected(true); + secondTurnoutLabel.setEnabled(true); + secondTurnoutComboBox.setEnabled(true); + } + } + editLayoutTurnoutFrame.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { turnoutEditCancelPressed(null); @@ -1691,6 +1801,27 @@ } needRedraw = true; } + + if(additionalTurnout.isSelected()){ + if ( !secondTurnoutName.equals(secondTurnoutComboBox.getSelectedDisplayName()) ) { + // turnout has changed + String newName = secondTurnoutComboBox.getSelectedDisplayName(); + if ( layoutEditor.validatePhysicalTurnout(newName, + editLayoutTurnoutFrame) ) { + setSecondTurnout(newName); + } + else { + additionalTurnout.setSelected(false); + secondNamedTurnout = null; + secondTurnoutName = ""; + //secondTurnoutNameField.setText(""); + } + needRedraw = true; + } + } else { + secondNamedTurnout = null; + secondTurnoutName = ""; + } // set the continuing route Turnout State if ( (type==RH_TURNOUT) || (type==LH_TURNOUT) || (type==WYE_TURNOUT) ) { continuingSense = Turnout.CLOSED; Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2011-10-24 12:40:27 UTC (rev 18953) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2011-10-24 14:22:47 UTC (rev 18954) @@ -39,6 +39,9 @@ if (p.getTurnoutName().length()>0) { element.setAttribute("turnoutname", p.getTurnoutName()); } + if (p.getSecondTurnoutName().length()>0) { + element.setAttribute("secondturnoutname", p.getSecondTurnoutName()); + } if (p.getBlockName().length()>0) { element.setAttribute("blockname", p.getBlockName()); } @@ -195,6 +198,10 @@ if (a != null) { l.tTurnoutName = a.getValue(); } + a = element.getAttribute("secondturnoutname"); + if (a != null) { + l.tSecondTurnoutName = a.getValue(); + } a = element.getAttribute("connectaname"); if (a != null) { l.connectAName = a.getValue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2011-12-23 14:15:30
|
Revision: 19559 http://jmri.svn.sourceforge.net/jmri/?rev=19559&view=rev Author: kevin-dickerson Date: 2011-12-23 14:15:23 +0000 (Fri, 23 Dec 2011) Log Message: ----------- Updates so that if block boundaries are removed then the signalmast and sensor assigned to the boundary is also removed. SignalMast Logics at this stage remain unaffected. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-12-23 13:47:55 UTC (rev 19558) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-12-23 14:15:23 UTC (rev 19559) @@ -8561,7 +8561,6 @@ usedMasts.add(InstanceManager.signalMastManagerInstance().getSignalMast(to.getSignalDMast())); //} } - for (int i=0;i<layoutEditor.xingList.size();i++) { LevelXing x = layoutEditor.xingList.get(i); if (x.getSignalAMastName()!=null && !x.getSignalAMastName().equals("")) @@ -8576,6 +8575,7 @@ } void refreshSignalMastAtTurnoutComboBox(){ + turnoutSignalMastsGetSaved(null); createListUsedSignalMasts(); usedMasts.remove(turnoutSignalMastA.getBean()); usedMasts.remove(turnoutSignalMastB.getBean()); @@ -8591,6 +8591,7 @@ if (setSignalMastsOpen) { //We will do a refresh in case the block boundaries have changed. turnoutSignalMastsGetSaved(null); + refreshSignalMastAtTurnoutComboBox(); signalMastsJmriFrame.setVisible(true); return; } @@ -8653,7 +8654,7 @@ turnoutSignalMastB.setBoundaryLabel(turnoutBlocks[1]); turnoutSignalMastC.setBoundaryLabel(turnoutBlocks[2]); turnoutSignalMastD.setBoundaryLabel(turnoutBlocks[3]); - + if(turnoutBlocks[0]!=null) signalMastTurnoutPanel.add(turnoutSignalMastA.getDetailsPanel()); if(turnoutBlocks[1]!=null) @@ -9305,6 +9306,7 @@ } void refreshSignalMastAtXingComboBox(){ + xingSignalMastsGetSaved(null); createListUsedSignalMasts(); usedMasts.remove(xingSignalMastA.getBean()); usedMasts.remove(xingSignalMastB.getBean()); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-12-23 13:47:55 UTC (rev 19558) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2011-12-23 14:15:23 UTC (rev 19559) @@ -979,10 +979,9 @@ } } - @SuppressWarnings("static-access") private boolean disableOccupiedTurnout(){ if ((type==RH_TURNOUT) || (type==LH_TURNOUT) || (type==WYE_TURNOUT)){ - if(block.getOccupancy()==block.OCCUPIED){ + if(block.getOccupancy()==LayoutBlock.OCCUPIED){ log.debug("Block " + blockName + "is Occupied"); return true; } @@ -990,11 +989,11 @@ if ((type==DOUBLE_XOVER)||(type==RH_XOVER)||(type==LH_XOVER)){ //If the turnout is set for straigh over, we need to deal with the straight over connecting blocks if (getTurnout().getKnownState()==jmri.Turnout.CLOSED){ - if ((block.getOccupancy()==block.OCCUPIED) && (blockB.getOccupancy()==block.OCCUPIED)){ + if ((block.getOccupancy()==LayoutBlock.OCCUPIED) && (blockB.getOccupancy()==LayoutBlock.OCCUPIED)){ log.debug("Blocks " + blockName + " & " + blockBName + " are Occupied"); return true; } - if ((blockC.getOccupancy()==block.OCCUPIED) && (blockD.getOccupancy()==block.OCCUPIED)){ + if ((blockC.getOccupancy()==LayoutBlock.OCCUPIED) && (blockD.getOccupancy()==LayoutBlock.OCCUPIED)){ log.debug("Blocks " + blockCName + " & " + blockDName + " are Occupied"); return true; } @@ -1003,7 +1002,7 @@ } if ((type==DOUBLE_XOVER)||(type==LH_XOVER)){ if (getTurnout().getKnownState()==jmri.Turnout.THROWN){ - if ((blockB.getOccupancy()==block.OCCUPIED) && (blockD.getOccupancy()==block.OCCUPIED)){ + if ((blockB.getOccupancy()==LayoutBlock.OCCUPIED) && (blockD.getOccupancy()==LayoutBlock.OCCUPIED)){ log.debug("Blocks " + blockBName + " & " + blockDName + " are Occupied"); return true; } @@ -1012,7 +1011,7 @@ if ((type==DOUBLE_XOVER)||(type==RH_XOVER)){ if (getTurnout().getKnownState()==jmri.Turnout.THROWN){ - if ((block.getOccupancy()==block.OCCUPIED) && (blockC.getOccupancy()==block.OCCUPIED)) { + if ((block.getOccupancy()==LayoutBlock.OCCUPIED) && (blockC.getOccupancy()==LayoutBlock.OCCUPIED)) { log.debug("Blocks " + block + " & " + blockCName + " are Occupied"); return true; } @@ -1241,13 +1240,13 @@ tools = new LayoutEditorTools(layoutEditor); } if ( (getTurnoutType()==DOUBLE_XOVER) || (getTurnoutType()==RH_XOVER) || - (getTurnoutType()==LH_XOVER) ) { + (getTurnoutType()==LH_XOVER) ) { tools.setSignalsAtXoverTurnoutFromMenu(instance, - layoutEditor.signalIconEditor,layoutEditor.signalFrame); + layoutEditor.signalIconEditor,layoutEditor.signalFrame); } else if (linkType==NO_LINK) { tools.setSignalsAtTurnoutFromMenu(instance, - layoutEditor.signalIconEditor,layoutEditor.signalFrame); + layoutEditor.signalIconEditor,layoutEditor.signalFrame); } else if (linkType==THROAT_TO_THROAT) { tools.setThroatToThroatFromMenu(instance,linkedTurnoutName, @@ -1288,7 +1287,7 @@ } }); - if(!blockBName.equals("")){ + if(!blockBName.equals("") && !blockBName.equals(blockName)){ viewRouting.add(new AbstractAction(blockBName) { public void actionPerformed(ActionEvent e) { AbstractAction routeTableAction = new LayoutBlockRouteTableAction(blockBName, getLayoutBlockB()); @@ -1296,7 +1295,7 @@ } }); } - if(!blockCName.equals("")){ + if(!blockCName.equals("") && !blockCName.equals(blockName) && !blockCName.equals(blockBName)){ viewRouting.add(new AbstractAction(blockCName) { public void actionPerformed(ActionEvent e) { AbstractAction routeTableAction = new LayoutBlockRouteTableAction(blockCName, getLayoutBlockC()); @@ -1304,7 +1303,7 @@ } }); } - if(!blockDName.equals("")){ + if(!blockDName.equals("") && !blockDName.equals(blockName) && !blockDName.equals(blockBName) && !blockDName.equals(blockCName)){ viewRouting.add(new AbstractAction(blockDName) { public void actionPerformed(ActionEvent e) { AbstractAction routeTableAction = new LayoutBlockRouteTableAction(blockDName, getLayoutBlockD()); @@ -1337,7 +1336,6 @@ boundaryBetween, layoutEditor.sensorIconEditor, layoutEditor.sensorFrame); } }); - } } layoutEditor.setShowAlignmentMenu(popup); @@ -1350,29 +1348,41 @@ if ((type==WYE_TURNOUT) || (type ==RH_TURNOUT) || (type == LH_TURNOUT)){ //This should only be needed where we are looking at a single turnout. if(block!=null){ - if ((connectA instanceof TrackSegment) && (((TrackSegment)connectA).getLayoutBlock()!=block)){ - try { - boundaryBetween[0]=(((TrackSegment)connectA).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); - } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block - log.debug("TrackSegement at connection A doesn't contain a layout block"); + LayoutBlock aLBlock = null; + LayoutBlock bLBlock = null; + LayoutBlock cLBlock = null; + if (connectA instanceof TrackSegment){ + aLBlock =((TrackSegment)connectA).getLayoutBlock(); + if(aLBlock!=block){ + try { + boundaryBetween[0]=(aLBlock.getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection A doesn't contain a layout block"); + } } } - if ((connectB instanceof TrackSegment) && (((TrackSegment)connectB).getLayoutBlock()!=block)){ - try { - boundaryBetween[1]=(((TrackSegment)connectB).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); - } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block - log.debug("TrackSegement at connection B doesn't contain a layout block"); + if (connectB instanceof TrackSegment){ + bLBlock =((TrackSegment)connectB).getLayoutBlock(); + if(bLBlock!=block){ + try { + boundaryBetween[1]=(bLBlock.getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection B doesn't contain a layout block"); + } } } if ((connectC instanceof TrackSegment) && (((TrackSegment)connectC).getLayoutBlock()!=block)){ - try{ - boundaryBetween[2]=(((TrackSegment)connectC).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); - } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block - log.debug("TrackSegement at connection C doesn't contain a layout block"); + cLBlock = ((TrackSegment)connectC).getLayoutBlock(); + if(cLBlock!=block){ + try{ + boundaryBetween[2]=(cLBlock.getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection C doesn't contain a layout block"); + } } } } @@ -1389,63 +1399,59 @@ if(blockD!=null) localblks.add(blockD); + LayoutBlock aLBlock = null; + LayoutBlock bLBlock = null; + LayoutBlock cLBlock = null; + LayoutBlock dLBlock = null; if(block!=null){ - ArrayList<LayoutConnectivity> conn = layoutEditor.auxTools.getConnectivityList(block); - for (int i = 0; i<conn.size(); i++){ - if (conn.get(i).getConnectedObject()==(this)){ - try{ - if(!localblks.contains(conn.get(i).getTrackSegment().getLayoutBlock())){ - boundaryBetween[0]=((conn.get(i).getTrackSegment().getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName())); - } + if (connectA instanceof TrackSegment){ + aLBlock =((TrackSegment)connectA).getLayoutBlock(); + if(aLBlock!=block){ + try { + boundaryBetween[0]=(aLBlock.getDisplayName()+ " - " + block.getDisplayName()); } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block or the connection isn't a track segment + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection A doesn't contain a layout block"); } } } - } - if(blockB!=null){ - ArrayList<LayoutConnectivity> conn = layoutEditor.auxTools.getConnectivityList(blockB); - for (int i = 0; i<conn.size(); i++){ - if (conn.get(i).getConnectedObject()==(this)){ - try{ - if(!localblks.contains(conn.get(i).getTrackSegment().getLayoutBlock())){ - boundaryBetween[1]=((blockB.getDisplayName() + " - " + conn.get(i).getTrackSegment().getLayoutBlock().getDisplayName())); - } + + if (connectB instanceof TrackSegment){ + bLBlock =((TrackSegment)connectB).getLayoutBlock(); + + if (bLBlock!=block || bLBlock!=blockB){ + try { + boundaryBetween[1]=(bLBlock.getDisplayName()+ " - " + blockB.getDisplayName()); } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block or the connection isn't a track segment + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection B doesn't contain a layout block"); } - } } - } - if(blockC!=null){ - ArrayList<LayoutConnectivity> conn = layoutEditor.auxTools.getConnectivityList(blockC); - for (int i = 0; i<conn.size(); i++){ - if (conn.get(i).getConnectedObject()==(this)){ + if (connectC instanceof TrackSegment){ + cLBlock =((TrackSegment)connectC).getLayoutBlock(); + if (cLBlock!=block || cLBlock!=blockB || cLBlock!=blockC) { try{ - if(!localblks.contains(conn.get(i).getTrackSegment().getLayoutBlock())){ - boundaryBetween[2]=((blockC.getDisplayName() + " - " + conn.get(i).getTrackSegment().getLayoutBlock().getDisplayName())); - } + boundaryBetween[2]=(cLBlock.getDisplayName()+ " - " + blockC.getDisplayName()); } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block or the connection isn't a track segment + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection C doesn't contain a layout block"); } } } - } - if(blockD!=null){ - ArrayList<LayoutConnectivity> conn = layoutEditor.auxTools.getConnectivityList(blockD); - for (int i = 0; i<conn.size(); i++){ - if (conn.get(i).getConnectedObject()==(this)){ + if (connectD instanceof TrackSegment){ + dLBlock =((TrackSegment)connectD).getLayoutBlock(); + if (dLBlock!=block || dLBlock!=blockB || dLBlock!=blockC || dLBlock!=blockD) { try{ - if(!localblks.contains(conn.get(i).getTrackSegment().getLayoutBlock())){ - boundaryBetween[3]=((conn.get(i).getTrackSegment().getLayoutBlock().getDisplayName() + " - " + blockD.getDisplayName())); - } + boundaryBetween[3]=(dLBlock.getDisplayName()+ " - " + blockD.getDisplayName()); } catch (java.lang.NullPointerException e){ - //Can be considered normal if tracksegement hasn't yet been allocated a block or the connection isn't a track segment + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection C doesn't contain a layout block"); } } } } + } return boundaryBetween; } @@ -1913,7 +1919,10 @@ editLayoutTurnoutFrame.setVisible(false); editLayoutTurnoutFrame.dispose(); editLayoutTurnoutFrame = null; - if (needsBlockUpdate) updateBlockInfo(); + if (needsBlockUpdate){ + updateBlockInfo(); + reCheckBlockBoundary(); + } if (needRedraw) { layoutEditor.redrawPanel(); layoutEditor.setDirty(); @@ -1931,6 +1940,99 @@ } } + public void reCheckBlockBoundary(){ + if(connectA==null && connectB==null && connectC==null){ + if ((type==RH_TURNOUT) || (type==LH_TURNOUT) || (type==WYE_TURNOUT)){ + if(!getSignalAMast().equals("")) + removeSML(getSignalAMast()); + if(!getSignalBMast().equals("")) + removeSML(getSignalBMast()); + if(!getSignalCMast().equals("")) + removeSML(getSignalCMast()); + if(!getSignalDMast().equals("")) + removeSML(getSignalDMast()); + signalAMast = ""; + signalBMast = ""; + signalCMast = ""; + sensorANamed=null; + sensorBNamed=null; + sensorCNamed=null; + return; + + } else if (((type==DOUBLE_XOVER)||(type==RH_XOVER)||(type==LH_XOVER)) && connectD==null){ + if(!getSignalAMast().equals("")) + removeSML(getSignalAMast()); + if(!getSignalBMast().equals("")) + removeSML(getSignalBMast()); + if(!getSignalCMast().equals("")) + removeSML(getSignalCMast()); + if(!getSignalDMast().equals("")) + removeSML(getSignalDMast()); + signalAMast = ""; + signalBMast = ""; + signalCMast = ""; + signalDMast = ""; + sensorANamed=null; + sensorBNamed=null; + sensorCNamed=null; + sensorDNamed=null; + return; + } + } + + if(connectA==null || connectB==null || connectC==null){ + //could still be in the process of rebuilding. + return; + } else if ((connectD == null) && ((type==DOUBLE_XOVER)||(type==RH_XOVER)||(type==LH_XOVER))){ + //could still be in the process of rebuilding. + return; + } + + TrackSegment trkA; + TrackSegment trkB; + TrackSegment trkC; + TrackSegment trkD; + + if(connectA instanceof TrackSegment){ + trkA = (TrackSegment)connectA; + if(trkA.getLayoutBlock()==block){ + signalAMast = ""; + sensorANamed=null; + if(!getSignalAMast().equals("")) + removeSML(getSignalAMast()); + } + } + if(connectB instanceof TrackSegment){ + trkB = (TrackSegment)connectB; + if(trkB.getLayoutBlock()==block || trkB.getLayoutBlock()==blockB){ + signalBMast = ""; + sensorBNamed=null; + if(!getSignalBMast().equals("")) + removeSML(getSignalBMast()); + } + } if(connectC instanceof TrackSegment) { + trkC = (TrackSegment)connectC; + if(trkC.getLayoutBlock()==block || trkC.getLayoutBlock()==blockB || trkC.getLayoutBlock()==blockC){ + signalCMast = ""; + sensorCNamed=null; + if(!getSignalCMast().equals("")) + removeSML(getSignalCMast()); + } + } if(connectD!=null && connectD instanceof TrackSegment && ((type==DOUBLE_XOVER)||(type==RH_XOVER)||(type==LH_XOVER))){ + trkD = (TrackSegment)connectD; + if(trkD.getLayoutBlock()==block || trkD.getLayoutBlock()==blockB || trkD.getLayoutBlock()==blockC || trkD.getLayoutBlock()==blockD){ + signalDMast = ""; + sensorDNamed=null; + if(!getSignalDMast().equals("")) + removeSML(getSignalDMast()); + } + } + } + + void removeSML(String signalMast){ + + } + /** * Clean up when this object is no longer needed. Should not * be called while the object is still displayed; see remove() Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-12-23 13:47:55 UTC (rev 19558) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2011-12-23 14:15:23 UTC (rev 19559) @@ -309,8 +309,82 @@ b2 = ((TrackSegment)connectD).getLayoutBlock(); if ((b2!=null)&&(b2!=blockBD)&&(b2!=b1)) b2.updatePaths(); } - } + reCheckBlockBoundary(); + } + + public void reCheckBlockBoundary(){ + if(connectA==null && connectB==null && connectC==null && connectD==null){ + //This is no longer a block boundary, therefore will remove signal masts and sensors if present + if(!getSignalAMastName().equals("")) + removeSML(getSignalAMastName()); + if(!getSignalBMastName().equals("")) + removeSML(getSignalBMastName()); + if(!getSignalCMastName().equals("")) + removeSML(getSignalCMastName()); + if(!getSignalDMastName().equals("")) + removeSML(getSignalDMastName()); + setSignalAMastName(""); + setSignalBMastName(""); + setSignalCMastName(""); + setSignalDMastName(""); + setSensorAName(""); + setSensorBName(""); + setSensorCName(""); + setSensorDName(""); + //May want to look at a method to remove the assigned mast from the panel and potentially any logics generated + } else if(connectA==null || connectB==null || connectC==null || connectD==null){ + //could still be in the process of rebuilding the point details + return; + } + + TrackSegment trkA; + TrackSegment trkB; + TrackSegment trkC; + TrackSegment trkD; + + if(connectA instanceof TrackSegment){ + trkA = (TrackSegment)connectA; + if(trkA.getLayoutBlock()==blockAC){ + setSignalAMastName(""); + setSensorAName(""); + if(!getSignalAMastName().equals("")) + removeSML(getSignalAMastName()); + } + } + if(connectC instanceof TrackSegment) { + trkC = (TrackSegment)connectC; + if(trkC.getLayoutBlock()==blockAC){ + setSignalCMastName(""); + setSensorCName(""); + if(!getSignalCMastName().equals("")) + removeSML(getSignalCMastName()); + } + } + if(connectB instanceof TrackSegment){ + trkB = (TrackSegment)connectB; + if(trkB.getLayoutBlock()==blockBD){ + setSignalBMastName(""); + setSensorBName(""); + if(!getSignalBMastName().equals("")) + removeSML(getSignalBMastName()); + } + } + if(connectD instanceof TrackSegment) { + trkD = (TrackSegment)connectC; + if(trkD.getLayoutBlock()==blockBD){ + setSignalDMastName(""); + setSensorDName(""); + if(!getSignalDMastName().equals("")) + removeSML(getSignalDMastName()); + } + } + } + + void removeSML(String signalMast){ + + } + /** * Methods to test if mainline track or not * Returns true if either connecting track segment is mainline Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2011-12-23 13:47:55 UTC (rev 19558) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2011-12-23 14:15:23 UTC (rev 19559) @@ -173,17 +173,55 @@ } } } + public void removeTrackConnection (TrackSegment track) { if (track==connect1) { connect1 = null; + reCheckBlockBoundary(); } else if (track==connect2) { connect2 = null; + reCheckBlockBoundary(); } else { log.error ("Attempt to remove non-existant track connection"); } } + + public void reCheckBlockBoundary(){ + if(type==END_BUMPER) + return; + if(connect1==null && connect2==null){ + //This is no longer a block boundary, therefore will remove signal masts and sensors if present + if(!getWestBoundSignalMast().equals("")) + removeSML(getWestBoundSignalMast()); + if(!getEastBoundSignalMast().equals("")) + removeSML(getEastBoundSignalMast()); + setWestBoundSignalMast(""); + setEastBoundSignalMast(""); + setWestBoundSensor(""); + setEastBoundSensor(""); + //May want to look at a method to remove the assigned mast from the panel and potentially any SignalMast logics generated + } else if(connect1==null || connect2==null){ + //could still be in the process of rebuilding the point details + return; + } else if (connect1.getLayoutBlock()==connect2.getLayoutBlock()){ + //We are no longer a block bounardy + if(!getWestBoundSignalMast().equals("")) + removeSML(getWestBoundSignalMast()); + if(!getEastBoundSignalMast().equals("")) + removeSML(getEastBoundSignalMast()); + setWestBoundSignalMast(""); + setEastBoundSignalMast(""); + setWestBoundSensor(""); + setEastBoundSensor(""); + //May want to look at a method to remove the assigned mast from the panel and potentially any SignalMast logics generated + } + } + + void removeSML(String signalMast){ + + } protected int maxWidth(){ return 5; Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2011-12-23 13:47:55 UTC (rev 19558) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2011-12-23 14:15:23 UTC (rev 19559) @@ -231,6 +231,19 @@ if ((b1!=null)&&(b1!=block)) b1.updatePaths(); LayoutBlock b2 = getBlock(connect2,type2); if ((b2!=null)&&(b2!=block)&&(b2!=b1)) b2.updatePaths(); + if(getConnect1() instanceof PositionablePoint) + ((PositionablePoint)getConnect1()).reCheckBlockBoundary(); + else if(getConnect1() instanceof LayoutTurnout) + ((LayoutTurnout)getConnect1()).reCheckBlockBoundary(); + else if(getConnect1() instanceof LevelXing) + ((LevelXing)getConnect1()).reCheckBlockBoundary(); + + if(getConnect2() instanceof PositionablePoint) + ((PositionablePoint)getConnect2()).reCheckBlockBoundary(); + else if(getConnect2() instanceof LayoutTurnout) + ((LayoutTurnout)getConnect2()).reCheckBlockBoundary(); + else if(getConnect2() instanceof LevelXing) + ((LevelXing)getConnect2()).reCheckBlockBoundary(); } private LayoutBlock getBlock (Object connect, int type) { if (connect==null) return null; @@ -692,6 +705,7 @@ private double chordLength; public double getChordLength() { return chordLength; } public void setChordLength(double chord) { chordLength=chord;} + static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(TrackSegment.class.getName()); } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2011-12-29 14:55:54
|
Revision: 19578 http://jmri.svn.sourceforge.net/jmri/?rev=19578&view=rev Author: kevin-dickerson Date: 2011-12-29 14:55:48 +0000 (Thu, 29 Dec 2011) Log Message: ----------- Updates to the assigning of signalmasts to anchor point block boundaries so that they will also trigger updates in the signalmast logic where required. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2011-12-29 14:53:19 UTC (rev 19577) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2011-12-29 14:55:48 UTC (rev 19578) @@ -508,6 +508,7 @@ SignalMastsError6 = Error - Cannot place signal mast "{0}" on the panel\nbecause it is already on the panel. SignalMastsError12 = Error - No signal masts entered.\nPlease enter signal masts or cancel. SignalMastsError13 = Error - Cannot assign signal mast "{0}" to this block boundary\nbecause it is already on the panel at a different place. +SignalMastsError14 = Error - Can not assign the same signal mast in both directions DuplicatePanel = A layout editor panel with the same name \n "{0}" has already been opened.\n Are you sure that you want to open another copy?" DuplicatePanelTitle = Duplicate Panel name @@ -547,4 +548,4 @@ No = No DuplicateSensorAssign = Sensor "{0}" has already been assigned on the panel\n Are you sure you want to assign it again? -DuplicateSensorAssignTitle = Sensor Already Assigned +DuplicateSensorAssignTitle = Sensor Already Assigned \ No newline at end of file Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-12-29 14:53:19 UTC (rev 19577) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2011-12-29 14:55:48 UTC (rev 19578) @@ -33,6 +33,7 @@ import jmri.jmrit.display.SignalMastIcon; import jmri.jmrit.display.SignalHeadIcon; import jmri.jmrit.display.PositionableIcon; +import jmri.jmrit.signalling.SignallingGuiTools; /** * Layout Editor Tools provides tools making use of layout connectivity available @@ -7833,101 +7834,148 @@ private void setSignalMastsAtBoundaryDonePressed (ActionEvent a) { if ( !getSimpleBlockInformation() ) return; + SignalMast oldBlock1SignalMast = getSignalMastFromName(boundary.getEastBoundSignalMast()); + SignalMast oldBlock2SignalMast = getSignalMastFromName(boundary.getWestBoundSignalMast()); SignalMast block1BoundSignalMast = getSignalMastFromEntry(eastSignalMast.getText(),false,setSignalMastsAtBoundaryFrame); SignalMast block2BoundSignalMast = getSignalMastFromEntry(westSignalMast.getText(),false,setSignalMastsAtBoundaryFrame); + if(block1BoundSignalMast==null){ + if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled() && InstanceManager.signalMastLogicManagerInstance().isSignalMastUsed(oldBlock1SignalMast)){ + SignallingGuiTools.removeSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock1SignalMast); + } + removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); removeSignalMastAssignment(jmri.InstanceManager.signalMastManagerInstance().getSignalMast(boundary.getEastBoundSignalMast())); boundary.setEastBoundSignalMast(""); } if(block2BoundSignalMast==null){ + if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled() && InstanceManager.signalMastLogicManagerInstance().isSignalMastUsed(oldBlock2SignalMast)){ + SignallingGuiTools.removeSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock2SignalMast); + } + removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); removeSignalMastAssignment(jmri.InstanceManager.signalMastManagerInstance().getSignalMast(boundary.getWestBoundSignalMast())); boundary.setWestBoundSignalMast(""); } - - if ( (block1BoundSignalMast!=null) && eastSignalMast.addToPanel() ) { - if (isSignalMastOnPanel(block1BoundSignalMast) && - (block1BoundSignalMast!=getSignalMastFromName(boundary.getEastBoundSignalMast()))) { - JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, - java.text.MessageFormat.format(rb.getString("SignalMastsError6"), - new Object[]{eastSignalMast.getText()}), - rb.getString("Error"),JOptionPane.ERROR_MESSAGE); - return; - } - else { - removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); - SignalMastIcon l = new SignalMastIcon(layoutEditor); - l.setSignalMast(eastSignalMast.getText()); - placeEastBoundIcon(l, eastSignalMast.isRightSelected(), 0); - removeSignalMastAssignment(block1BoundSignalMast); - boundary.setEastBoundSignalMast(eastSignalMast.getText()); - needRedraw = true; - } - } - else if ( (block1BoundSignalMast!=null) && - (block1BoundSignalMast!=getSignalMastFromName(boundary.getEastBoundSignalMast())) && - (block1BoundSignalMast!=getSignalMastFromName(boundary.getWestBoundSignalMast())) ) { - if (isSignalMastOnPanel(block1BoundSignalMast)) { - JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, - java.text.MessageFormat.format(rb.getString("SignalMastsError13"), - new Object[]{eastSignalMast.getText()}), - rb.getString("Error"),JOptionPane.ERROR_MESSAGE); - return; - } - else { - removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); - removeSignalMastAssignment(block1BoundSignalMast); - boundary.setEastBoundSignalMast(eastSignalMast.getText()); - } - } - else if ( (block1BoundSignalMast!=null) && - (block1BoundSignalMast==getSignalMastFromName(boundary.getWestBoundSignalMast())) ) { -// need to figure out what to do in this case. - } - if ( (block2BoundSignalMast!=null) && westSignalMast.addToPanel() ) { - if (isSignalMastAssignedAnywhere(block2BoundSignalMast) && - (block2BoundSignalMast!=getSignalMastFromName(boundary.getWestBoundSignalMast()))) { - JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, - java.text.MessageFormat.format(rb.getString("SignalMastsError6"), - new Object[]{westSignalMast.getText()}), - rb.getString("Error"),JOptionPane.ERROR_MESSAGE); - return; - } - else { - removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); - SignalMastIcon l = new SignalMastIcon(layoutEditor); - l.setSignalMast(westSignalMast.getText()); - placeWestBoundIcon(l, westSignalMast.isRightSelected(), 0); - removeSignalMastAssignment(block2BoundSignalMast); - boundary.setWestBoundSignalMast(westSignalMast.getText()); - needRedraw = true; - } - } - else if ( (block2BoundSignalMast!=null) && - (block2BoundSignalMast!=getSignalMastFromName(boundary.getEastBoundSignalMast())) && - (block2BoundSignalMast!=getSignalMastFromName(boundary.getWestBoundSignalMast())) ) { - if (isSignalMastAssignedAnywhere(block2BoundSignalMast)) { - //Need to do this better, so that the signalMast can be on panel multiple times but only alocated to one anchor at a time - JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, - java.text.MessageFormat.format(rb.getString("SignalMastsError13"), - new Object[]{westSignalMast.getText()}), - rb.getString("Error"),JOptionPane.ERROR_MESSAGE); - return; - } - else { - removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); - removeSignalMastAssignment(block2BoundSignalMast); - boundary.setWestBoundSignalMast(westSignalMast.getText()); - } - } - else if ( (block2BoundSignalMast!=null) && - (block2BoundSignalMast==getSignalMastFromName(boundary.getEastBoundSignalMast())) ) { -// need to figure out what to do in this case. - } - setSignalMastsAtBoundaryOpen = false; + if(block2BoundSignalMast!=null && block1BoundSignalMast!=null){ + if(block1BoundSignalMast == block2BoundSignalMast){ + JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, + rb.getString("SignalMastsError14"), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return; + } + if(oldBlock1SignalMast==block2BoundSignalMast && oldBlock2SignalMast==block1BoundSignalMast){ + //We are going for a swap! + //Need to remove old items first + removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); + removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); + removeSignalMastAssignment(block1BoundSignalMast); + removeSignalMastAssignment(block2BoundSignalMast); + //Then place new ones + SignalMastIcon l; + if (eastSignalMast.addToPanel()){ + l = new SignalMastIcon(layoutEditor); + l.setSignalMast(eastSignalMast.getText()); + placeEastBoundIcon(l, eastSignalMast.isRightSelected(), 0); + } + if (westSignalMast.addToPanel()){ + l = new SignalMastIcon(layoutEditor); + l.setSignalMast(westSignalMast.getText()); + placeWestBoundIcon(l, westSignalMast.isRightSelected(), 0); + } + boundary.setEastBoundSignalMast(eastSignalMast.getText()); + boundary.setWestBoundSignalMast(westSignalMast.getText()); + //Then sort out the logic + if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled()){ + SignallingGuiTools.swapSignalMastLogic(setSignalMastsAtBoundaryFrame, block1BoundSignalMast, block2BoundSignalMast); + } + needRedraw = true; + } + } + if(!needRedraw){ + if(block1BoundSignalMast!=null){ + if (eastSignalMast.addToPanel()) { + System.out.println(block1BoundSignalMast.getDisplayName() + " v " + boundary.getEastBoundSignalMast()); + if (isSignalMastAssignedAnywhere(block1BoundSignalMast) && + (block1BoundSignalMast!=oldBlock1SignalMast)) { + JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, + java.text.MessageFormat.format(rb.getString("SignalMastsError6"), + new Object[]{eastSignalMast.getText()}), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return; + } + else { + removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); + SignalMastIcon l = new SignalMastIcon(layoutEditor); + l.setSignalMast(eastSignalMast.getText()); + placeEastBoundIcon(l, eastSignalMast.isRightSelected(), 0); + removeSignalMastAssignment(block1BoundSignalMast); + boundary.setEastBoundSignalMast(eastSignalMast.getText()); + needRedraw = true; + } + } + else if ((block1BoundSignalMast!=getSignalMastFromName(boundary.getEastBoundSignalMast())) && + (block1BoundSignalMast!=getSignalMastFromName(boundary.getWestBoundSignalMast())) ) { + if (isSignalMastOnPanel(block1BoundSignalMast)) { + JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, + java.text.MessageFormat.format(rb.getString("SignalMastsError13"), + new Object[]{eastSignalMast.getText()}), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return; + } + else { + removeSignalMastFromPanel(boundary.getEastBoundSignalMast()); + removeSignalMastAssignment(block1BoundSignalMast); + boundary.setEastBoundSignalMast(eastSignalMast.getText()); + } + } + } + if(block2BoundSignalMast!=null){ + if (westSignalMast.addToPanel() ) { + if (isSignalMastAssignedAnywhere(block2BoundSignalMast) && + (block2BoundSignalMast!=oldBlock2SignalMast)) { + JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, + java.text.MessageFormat.format(rb.getString("SignalMastsError6"), + new Object[]{westSignalMast.getText()}), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return; + } + else /*(oldBlock2SignalMast!=block2BoundSignalMast)*/{ + removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); + SignalMastIcon l = new SignalMastIcon(layoutEditor); + l.setSignalMast(westSignalMast.getText()); + placeWestBoundIcon(l, westSignalMast.isRightSelected(), 0); + removeSignalMastAssignment(block2BoundSignalMast); + boundary.setWestBoundSignalMast(westSignalMast.getText()); + needRedraw = true; + } + } + else if ( (block2BoundSignalMast!=getSignalMastFromName(boundary.getEastBoundSignalMast())) && + (block2BoundSignalMast!=oldBlock2SignalMast) ) { + if (isSignalMastAssignedAnywhere(block2BoundSignalMast)) { + //Need to do this better, so that the signalMast can be on panel multiple times but only alocated to one anchor at a time + JOptionPane.showMessageDialog(setSignalMastsAtBoundaryFrame, + java.text.MessageFormat.format(rb.getString("SignalMastsError13"), + new Object[]{westSignalMast.getText()}), + rb.getString("Error"),JOptionPane.ERROR_MESSAGE); + return; + } + else { + removeSignalMastFromPanel(boundary.getWestBoundSignalMast()); + removeSignalMastAssignment(block2BoundSignalMast); + boundary.setWestBoundSignalMast(westSignalMast.getText()); + } + } + } -// boundaryFromMenu = false; + //If advanced routing is enabled and then this indicates that we are using this for discovering the signalmast logic paths. + if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled() && (block1BoundSignalMast!=null || block2BoundSignalMast!=null)){ + updateBoundaryBasedSignalMastLogic(oldBlock1SignalMast, oldBlock2SignalMast, + block1BoundSignalMast,block2BoundSignalMast); + } + } + setSignalMastsAtBoundaryOpen = false; + setSignalMastsAtBoundaryFrame.setVisible(false); if (needRedraw) { layoutEditor.redrawPanel(); @@ -7936,6 +7984,49 @@ } } + public void updateBoundaryBasedSignalMastLogic(SignalMast oldBlock1SignalMast, SignalMast oldBlock2SignalMast, + SignalMast block1BoundSignalMast,SignalMast block2BoundSignalMast){ + jmri.SignalMastLogicManager smlm = InstanceManager.signalMastLogicManagerInstance(); + boolean old1Used = smlm.isSignalMastUsed(oldBlock1SignalMast); + boolean old2Used = smlm.isSignalMastUsed(oldBlock2SignalMast); + //Just check that the old ones are used in logics somewhere. + if(old1Used || old2Used){ + boolean new1Used = smlm.isSignalMastUsed(block1BoundSignalMast); + boolean new2Used = smlm.isSignalMastUsed(block2BoundSignalMast); + if(new1Used || new2Used) { + if((new1Used) && (block1BoundSignalMast!=oldBlock1SignalMast)){ + SignallingGuiTools.removeAlreadyAssignedSignalMastLogic(setSignalMastsAtBoundaryFrame, block1BoundSignalMast); + } + if((new2Used) && (block2BoundSignalMast!=oldBlock2SignalMast)){ + SignallingGuiTools.removeAlreadyAssignedSignalMastLogic(setSignalMastsAtBoundaryFrame, block2BoundSignalMast); + } + } + if(block1BoundSignalMast!=null){ + if (oldBlock2SignalMast!=null && old2Used && + oldBlock2SignalMast==block1BoundSignalMast){ + SignallingGuiTools.updateSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock2SignalMast, block1BoundSignalMast); + } + + if(oldBlock1SignalMast!=null && old1Used && + oldBlock1SignalMast!=block1BoundSignalMast){ + + SignallingGuiTools.updateSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock1SignalMast, block1BoundSignalMast); + } + } + if(block2BoundSignalMast!=null){ + if(oldBlock1SignalMast!=null && old1Used && + oldBlock1SignalMast==block2BoundSignalMast){ + + SignallingGuiTools.updateSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock1SignalMast, block2BoundSignalMast); + } + if (oldBlock2SignalMast!=null && old2Used && + oldBlock2SignalMast!=block2BoundSignalMast){ + SignallingGuiTools.updateSignalMastLogic(setSignalMastsAtBoundaryFrame, oldBlock2SignalMast, block2BoundSignalMast); + } + } + } + } + public void setIconOnPanel(PositionableIcon l, int rotation, Point p) { l.setLocation((int)p.getX(), (int)p.getY()); @@ -7978,7 +8069,6 @@ } else { if(isAtWestEndOfAnchor(boundary.getConnect1(), boundary)){ - //dir = false; t = boundary.getConnect1(); } } @@ -8002,7 +8092,6 @@ boolean dir = false; if(boundary.getType()!=PositionablePoint.END_BUMPER){ if(isAtWestEndOfAnchor(boundary.getConnect1(), boundary)){ - //dir = false; t = boundary.getConnect2(); } } @@ -8017,46 +8106,6 @@ } - //Manually need to calculate if the signal is pointing in an east or west bound direction! - /*private void placeWestBoundIcon(PositionableIcon icon, boolean right, double fromPoint) { - - Point2D p = boundary.getCoords(); - - boolean dir = false; - - TrackSegment t = boundary.getConnect1(); - Point2D pt2; - if(boundary.getType()==PositionablePoint.ANCHOR){ - pt2 = layoutEditor.getCoords(t.getConnect1(),t.getType1()); - if(t.getConnect1()==boundary){ - pt2 = layoutEditor.getCoords(t.getConnect2(),t.getType2()); - } - } - else { - if(isAtWestEndOfAnchor(boundary.getConnect1(), boundary)){ - t = boundary.getConnect2(); - } - - Point2D point; - if (t.getConnect1()==boundary){ - point = layoutEditor.getCoords(t.getConnect2(), t.getType2()); - if(log.isDebugEnabled()) - log.debug("connection from 2 " + boundary.getConnect2().getLayoutBlock().getDisplayName()); - } else { - point = layoutEditor.getCoords(t.getConnect1(), t.getType1()); - if(log.isDebugEnabled()) - log.debug("connection from 1 " + boundary.getConnect1().getLayoutBlock().getDisplayName()); - } - - if(t.getConnect1()==boundary){ - pt2 = layoutEditor.getCoords(t.getConnect2(),t.getType2()); - } else { - pt2 = layoutEditor.getCoords(t.getConnect1(),t.getType1()); - } - } - setIconOnPanel(t, icon, dir, p, pt2, right, fromPoint); - }*/ - void setIconOnPanel(TrackSegment t, PositionableIcon l, boolean eastbound, Point2D p, Point2D pt2, boolean side, double fromPoint){ Point2D pt1 = p; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-03-14 13:59:14
|
Revision: 20173 http://jmri.svn.sourceforge.net/jmri/?rev=20173&view=rev Author: kevin-dickerson Date: 2012-03-14 13:59:03 +0000 (Wed, 14 Mar 2012) Log Message: ----------- Save the block metric if it has been set different to the default Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutBlockManagerXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-03-14 13:44:32 UTC (rev 20172) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-03-14 13:59:03 UTC (rev 20173) @@ -1155,7 +1155,7 @@ /** * Returns the layout block metric cost */ - int getBlockMetric() { return metric; } + public int getBlockMetric() { return metric; } //re work this so that is makes beter us of existing code. //This is no longer required currently, but might be used at a later date. @@ -2069,6 +2069,10 @@ if(enableAddRouteLogging) log.info(block.getDisplayName() + " not on setting equal will quit " + x + ", " + y); return; + } else if(x==Turnout.UNKNOWN){ + if(enableAddRouteLogging) + log.info(block.getDisplayName() + " turnout state returned as UNKNOWN"); + return; } } HashSet<LayoutTurnout> set = new HashSet<LayoutTurnout>(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutBlockManagerXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutBlockManagerXml.java 2012-03-14 13:44:32 UTC (rev 20172) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutBlockManagerXml.java 2012-03-14 13:59:03 UTC (rev 20173) @@ -68,6 +68,9 @@ if (b.getMemoryName() != "") { elem.setAttribute("memory", b.getMemoryName()); } + if(!b.useDefaultMetric()){ + elem.addContent(new Element("metric").addContent(""+b.getBlockMetric())); + } } } return (layoutblocks); @@ -175,7 +178,15 @@ log.error("failed to convert occupiedsense attribute"); } b.setOccupiedSense(sense); - } + if (((layoutblockList.get(i))).getChild("metric")!=null){ + String stMetric = ((layoutblockList.get(i))).getChild("metric").getText(); + try { + b.setBlockMetric(Integer.valueOf(stMetric)); + } catch (java.lang.NumberFormatException e) { + log.error("failed to convert metric attribute for block " + b.getDisplayName()); + } + } + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-03-22 10:18:14
|
Revision: 20229 http://jmri.svn.sourceforge.net/jmri/?rev=20229&view=rev Author: kevin-dickerson Date: 2012-03-22 10:18:02 +0000 (Thu, 22 Mar 2012) Log Message: ----------- Add a slip to the layout editor Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java Added Paths: ----------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java Added: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java (rev 0) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2012-03-22 10:18:02 UTC (rev 20229) @@ -0,0 +1,1131 @@ +package jmri.jmrit.display.layoutEditor; + +import jmri.util.JmriJFrame; +import jmri.SignalMast; +import jmri.Turnout; +import jmri.SignalMastLogic; +import jmri.jmrit.display.layoutEditor.blockRoutingTable.*; +import java.awt.*; +import java.awt.geom.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; + +import jmri.Sensor; +import jmri.NamedBeanHandle; +import jmri.InstanceManager; +import jmri.jmrit.signalling.SignallingGuiTools; +import jmri.util.swing.JmriBeanComboBox; + +import java.util.ResourceBundle; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Map.Entry; + + +import javax.swing.*; + +/** + * A LayoutSlip is two track segment on a layout that cross at an angle. + * <P> + * A LayoutSlip has four connection points, designated A, B, C, and D. + * At the crossing, A-C and B-D are straight segments. A train proceeds + * through the crossing on either of these segments. + * <P> + * For drawing purposes, each LayoutSlip carries a center point and displacements + * for A and B. The displacements for C = - the displacement for A, and the + * displacement for D = - the displacement for B. The center point and these + * displacements may be adjusted by the user when in edit mode. + * <P> + * When LayoutSlips are first created, there are no connections. Block information + * and connections are added when available. + * <P> + * Signal Head names are saved here to keep track of where signals are. LayoutSlip + * only serves as a storage place for signal head names. The names are placed here + * by Set Signals at Level Crossing in Tools menu. + * + * @author Dave Duchamp Copyright (c) 2004-2007 + * @version $Revision: 19729 $ + */ + +public class LayoutSlip extends LayoutTurnout +{ + + // Defined text resource + ResourceBundle rb = ResourceBundle.getBundle("jmri.jmrit.display.layoutEditor.LayoutEditorBundle"); + + // defined constants + public static int SINGLE_SLIP = 7; + public static int DOUBLE_SLIP = 8; + + // operational instance variables (not saved between sessions) + + final public static int UNKNOWN = Turnout.UNKNOWN; + final public static int STATE_AC = 0x02; + final public static int STATE_BD = 0x04; + final public static int STATE_AD = 0x06; + final public static int STATE_BC = 0x08; + + private Point2D center = new Point2D.Double(50.0,50.0); + private Point2D dispA = new Point2D.Double(-20.0,0.0); + private Point2D dispB = new Point2D.Double(-14.0,14.0); + + public int currentState = UNKNOWN; + + private String turnoutBName=""; + private NamedBeanHandle<Turnout> namedTurnoutB = null; + private java.beans.PropertyChangeListener mTurnoutListener = null; + + + /** + * constructor method + */ + public LayoutSlip(String id, Point2D c, LayoutEditor myPanel, int type) { + instance = this; + layoutEditor = myPanel; + ident = id; + center = c; + setTurnoutType(type); + } + + public void setTurnoutType(int slipType){ + setSlipType(slipType); + } + + public void setSlipType(int slipType){ + if(type==slipType) + return; + type=slipType; + if(type==DOUBLE_SLIP){ + turnoutStates.put(STATE_AC, new TurnoutState(Turnout.CLOSED, Turnout.CLOSED)); + turnoutStates.put(STATE_BD, new TurnoutState(Turnout.THROWN, Turnout.THROWN)); + turnoutStates.put(STATE_AD, new TurnoutState(Turnout.CLOSED, Turnout.THROWN)); + turnoutStates.put(STATE_BC, new TurnoutState(Turnout.THROWN, Turnout.CLOSED)); + } else { + turnoutStates.put(STATE_AC, new TurnoutState(Turnout.CLOSED, Turnout.CLOSED)); + turnoutStates.put(STATE_BD, new TurnoutState(Turnout.CLOSED, Turnout.CLOSED)); + turnoutStates.put(STATE_AD, new TurnoutState(Turnout.THROWN, Turnout.THROWN)); + turnoutStates.remove(STATE_BC); + } + } + + public int getSlipType(){ + return type; + } + + public int getSlipState(){ + return currentState; + } + + public String getTurnoutBName() { + if (namedTurnoutB!=null) + return namedTurnoutB.getName(); + return turnoutBName; + } + + public Turnout getTurnoutB() { + if (namedTurnoutB==null) { + // set physical turnout if possible and needed + setTurnoutB(turnoutBName); + if (namedTurnoutB==null) + return null; + } + return namedTurnoutB.getBean(); + } + + public void setTurnoutB(String tName) { + if (namedTurnoutB!=null) deactivateTurnout(); + turnoutBName = tName; + Turnout turnout = jmri.InstanceManager.turnoutManagerInstance(). + getTurnout(turnoutBName); + if (turnout!=null) { + namedTurnoutB = jmri.InstanceManager.getDefault(jmri.NamedBeanHandleManager.class).getNamedBeanHandle(turnoutBName, turnout); + activateTurnout(); + } + else { + turnoutBName = ""; + namedTurnoutB = null; + } + } + + public String getDisplayName(){ + String name = "Slip :"; + if(getTurnoutName()!=null){ + name += "("+getTurnoutName(); + if(getTurnoutBName()!=null) + name+=":"+getTurnoutBName()+")"; + } + else if(getTurnoutBName()!=null){ + name += "("+getTurnoutBName()+")"; + } + return name; + } + + /** + * Toggle slip states if clicked on, physical turnout exists, and + * not disabled + */ + public void toggleState() { + switch(currentState) { + case STATE_AC : if(type==SINGLE_SLIP) { + setTurnoutState(turnoutStates.get(STATE_AD)); + currentState = STATE_AD; + } else { + setTurnoutState(turnoutStates.get(STATE_BD)); + currentState = STATE_BD; + } + break; + case STATE_BD : + setTurnoutState(turnoutStates.get(STATE_AD)); + currentState = STATE_AD; + break; + case STATE_AD : if(type==SINGLE_SLIP){ + setTurnoutState(turnoutStates.get(STATE_AC)); + currentState = STATE_AC; + } else { + setTurnoutState(turnoutStates.get(STATE_BC)); + currentState = STATE_BC; + } + break; + case STATE_BC : + setTurnoutState(turnoutStates.get(STATE_AC)); + currentState = STATE_AC; + break; + default : + setTurnoutState(turnoutStates.get(STATE_BD)); + currentState = STATE_BD; + break; + } + + } + + void setTurnoutState(TurnoutState ts){ + if(getTurnout()!=null) + getTurnout().setCommandedState(ts.getTurnoutAState()); + if(getTurnoutB()!=null) + getTurnoutB().setCommandedState(ts.getTurnoutBState()); + } + + /** + * Activate/Deactivate turnout to redraw when turnout state changes + */ + private void activateTurnout() { + if (namedTurnout!=null) { + namedTurnout.getBean().addPropertyChangeListener(mTurnoutListener = + new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent e) { + updateState(); + } + }, namedTurnout.getName(), "Layout Editor Slip"); + } + if (namedTurnoutB!=null) { + namedTurnoutB.getBean().addPropertyChangeListener(mTurnoutListener = + new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent e) { + updateState(); + } + }, namedTurnoutB.getName(), "Layout Editor Slip"); + } + } + private void deactivateTurnout() { + if (mTurnoutListener!=null) { + namedTurnout.getBean().removePropertyChangeListener(mTurnoutListener); + if(namedTurnoutB!=null){ + namedTurnoutB.getBean().removePropertyChangeListener(mTurnoutListener); + } + mTurnoutListener = null; + } + } + + public Point2D getCoordsCenter() {return center;} + public Point2D getCoordsA() { + double x = center.getX() + dispA.getX(); + double y = center.getY() + dispA.getY(); + return new Point2D.Double(x,y); + } + public Point2D getCoordsB() { + double x = center.getX() + dispB.getX(); + double y = center.getY() + dispB.getY(); + return new Point2D.Double(x,y); + } + public Point2D getCoordsC() { + double x = center.getX() - dispA.getX(); + double y = center.getY() - dispA.getY(); + return new Point2D.Double(x,y); + } + public Point2D getCoordsD() { + double x = center.getX() - dispB.getX(); + double y = center.getY() - dispB.getY(); + return new Point2D.Double(x,y); + } + + private void updateBlockInfo() { + LayoutBlock b1 = null; + LayoutBlock b2 = null; + if (block!=null) block.updatePaths(); + if (connectA!=null) { + b1 = ((TrackSegment)connectA).getLayoutBlock(); + if ((b1!=null)&&(b1!=block)) b1.updatePaths(); + } + if (connectC!=null) { + b2 = ((TrackSegment)connectC).getLayoutBlock(); + if ((b2!=null)&&(b2!=block)&&(b2!=b1)) b2.updatePaths(); + } + + if (connectB!=null) { + b1 = ((TrackSegment)connectB).getLayoutBlock(); + if ((b1!=null)&&(b1!=block)) b1.updatePaths(); + } + if (connectD!=null) { + b2 = ((TrackSegment)connectD).getLayoutBlock(); + if ((b2!=null)&&(b2!=block)&&(b2!=b1)) b2.updatePaths(); + } + reCheckBlockBoundary(); + } + + public void reCheckBlockBoundary(){ + log.info("Recheck block"); + if(connectA==null && connectB==null && connectC==null && connectD==null){ + //This is no longer a block boundary, therefore will remove signal masts and sensors if present + if(!getSignalAMast().equals("")) + removeSML(getSignalAMast()); + if(!getSignalBMast().equals("")) + removeSML(getSignalBMast()); + if(!getSignalCMast().equals("")) + removeSML(getSignalCMast()); + if(!getSignalDMast().equals("")) + removeSML(getSignalDMast()); + setSignalAMast(""); + setSignalBMast(""); + setSignalCMast(""); + setSignalDMast(""); + setSensorA(""); + setSensorB(""); + setSensorC(""); + setSensorD(""); + //May want to look at a method to remove the assigned mast from the panel and potentially any logics generated + } else if(connectA==null || connectB==null || connectC==null || connectD==null){ + //could still be in the process of rebuilding the point details + return; + } + + TrackSegment trkA; + TrackSegment trkB; + TrackSegment trkC; + TrackSegment trkD; + + if(connectA instanceof TrackSegment){ + trkA = (TrackSegment)connectA; + if(trkA.getLayoutBlock()==block){ + if(!getSignalAMast().equals("")) + removeSML(getSignalAMast()); + setSignalAMast(""); + setSensorA(""); + } + } + if(connectC instanceof TrackSegment) { + trkC = (TrackSegment)connectC; + if(trkC.getLayoutBlock()==block){ + if(!getSignalCMast().equals("")) + removeSML(getSignalCMast()); + setSignalCMast(""); + setSensorC(""); + } + } + if(connectB instanceof TrackSegment){ + trkB = (TrackSegment)connectB; + if(trkB.getLayoutBlock()==block){ + if(!getSignalBMast().equals("")) + removeSML(getSignalBMast()); + setSignalBMast(""); + setSensorB(""); + } + } + + if(connectD instanceof TrackSegment) { + trkD = (TrackSegment)connectC; + if(trkD.getLayoutBlock()==block){ + if(!getSignalDMast().equals("")) + removeSML(getSignalDMast()); + setSignalDMast(""); + setSensorD(""); + } + } + } + + void removeSML(String signalMast){ + if(signalMast==null || signalMast.equals("")) + return; + jmri.SignalMast mast = jmri.InstanceManager.signalMastManagerInstance().getSignalMast(signalMast); + if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled() && InstanceManager.signalMastLogicManagerInstance().isSignalMastUsed(mast)){ + InstanceManager.signalMastLogicManagerInstance().disableLayoutEditorUse(mast); + SignallingGuiTools.removeSignalMastLogic(null, mast); + } + } + + /** + * Methods to test if mainline track or not + * Returns true if either connecting track segment is mainline + * Defaults to not mainline if connecting track segments are missing + */ + public boolean isMainline() { + if ( ((connectA != null) && (((TrackSegment)connectA).getMainline())) || + ((connectB != null) && (((TrackSegment)connectB).getMainline())) ) { + return true; + } + else { + return false; + } + } + + /** + * Modify coordinates methods + */ + public void setCoordsCenter(Point2D p) { + center = p; + } + public void setCoordsA(Point2D p) { + double x = center.getX() - p.getX(); + double y = center.getY() - p.getY(); + dispA = new Point2D.Double(-x,-y); + } + public void setCoordsB(Point2D p) { + double x = center.getX() - p.getX(); + double y = center.getY() - p.getY(); + dispB = new Point2D.Double(-x,-y); + } + public void setCoordsC(Point2D p) { + double x = center.getX() - p.getX(); + double y = center.getY() - p.getY(); + dispA = new Point2D.Double(x,y); + } + public void setCoordsD(Point2D p) { + double x = center.getX() - p.getX(); + double y = center.getY() - p.getY(); + dispB = new Point2D.Double(x,y); + } + public void scaleCoords(float xFactor, float yFactor) { + Point2D pt = new Point2D.Double(round(center.getX()*xFactor), + round(center.getY()*yFactor)); + center = pt; + pt = new Point2D.Double(round(dispA.getX()*xFactor), + round(dispA.getY()*yFactor)); + dispA = pt; + pt = new Point2D.Double(round(dispB.getX()*xFactor), + round(dispB.getY()*yFactor)); + dispB = pt; + } + double round (double x) { + int i = (int)(x+0.5); + return i; + } + + /** + * Initialization method + * The above variables are initialized by PositionablePointXml, then the following + * method is called after the entire LayoutEditor is loaded to set the specific + * TrackSegment objects. + */ + public void setObjects(LayoutEditor p) { + connectA = p.findTrackSegmentByName(connectAName); + connectB = p.findTrackSegmentByName(connectBName); + connectC = p.findTrackSegmentByName(connectCName); + connectD = p.findTrackSegmentByName(connectDName); + if (tBlockName.length()>0) { + block = p.getLayoutBlock(tBlockName); + if (block!=null) { + blockName = tBlockName; + block.incrementUse(); + } + else { + log.error("bad blocknameac '"+tBlockName+"' in slip "+ident); + } + } + } + + JPopupMenu popup = null; + LayoutEditorTools tools = null; + /** + * Display popup menu for information and editing + */ + protected void showPopUp(MouseEvent e) { + if (popup != null ) { + popup.removeAll(); + } + else { + popup = new JPopupMenu(); + } + popup.add(getName()); + boolean blockAssigned = false; + if ( (blockName==null) || (blockName.equals("")) ) popup.add(rb.getString("NoBlock")); + else { + popup.add(rb.getString("BlockID")+": "+getLayoutBlock().getID()); + blockAssigned = true; + } + + popup.add(new JSeparator(JSeparator.HORIZONTAL)); + popup.add(new AbstractAction(rb.getString("Edit")) { + public void actionPerformed(ActionEvent e) { + editLayoutSlip(instance); + } + }); + popup.add(new AbstractAction(rb.getString("Remove")) { + public void actionPerformed(ActionEvent e) { + if (layoutEditor.removeLayoutSlip(instance)) { + // Returned true if user did not cancel + remove(); + dispose(); + } + } + }); + if (blockAssigned) { + popup.add(new AbstractAction(rb.getString("SetSignals")) { + public void actionPerformed(ActionEvent e) { + if (tools == null) { + tools = new LayoutEditorTools(layoutEditor); + } + tools.setSlipFromMenu((LayoutSlip)instance, + layoutEditor.signalIconEditor,layoutEditor.signalFrame); + } + }); + } + + final String[] boundaryBetween = getBlockBoundaries(); + boolean blockBoundaries = false; + + for (int i = 0; i<4; i++){ + if(boundaryBetween[i]!=null) + blockBoundaries=true; + } + if (blockBoundaries){ + popup.add(new AbstractAction(rb.getString("SetSignalMasts")) { + public void actionPerformed(ActionEvent e) { + if (tools == null) { + tools = new LayoutEditorTools(layoutEditor); + } + tools.setSignalMastsAtSlipFromMenu((LayoutSlip)instance, boundaryBetween, layoutEditor.signalFrame); + } + }); + popup.add(new AbstractAction(rb.getString("SetSensors")) { + public void actionPerformed(ActionEvent e) { + if (tools == null) { + tools = new LayoutEditorTools(layoutEditor); + } + tools.setSensorsAtSlipFromMenu((LayoutSlip)instance, boundaryBetween, layoutEditor.sensorIconEditor, layoutEditor.sensorFrame); + } + }); + } + + if (jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled()){ + if(blockAssigned){ + popup.add(new AbstractAction(rb.getString("ViewBlockRouting")) { + public void actionPerformed(ActionEvent e) { + AbstractAction routeTableAction = new LayoutBlockRouteTableAction("ViewRouting", getLayoutBlock()); + routeTableAction.actionPerformed(e); + } + }); + } + } + + layoutEditor.setShowAlignmentMenu(popup); + popup.show(e.getComponent(), e.getX(), e.getY()); + } + + public String[] getBlockBoundaries(){ + final String[] boundaryBetween = new String[4]; + + if ( (blockName!=null) && (!blockName.equals("")) && (block!=null) ){ + if ((connectA instanceof TrackSegment) && (((TrackSegment)connectA).getLayoutBlock()!=block)){ + try { + boundaryBetween[0]=(((TrackSegment)connectA).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection A doesn't contain a layout block"); + } + } + if ((connectC instanceof TrackSegment) && (((TrackSegment)connectC).getLayoutBlock()!=block)){ + try { + boundaryBetween[2]=(((TrackSegment)connectC).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection C doesn't contain a layout block"); + } + } + if ((connectB instanceof TrackSegment) && (((TrackSegment)connectB).getLayoutBlock()!=block)){ + try { + boundaryBetween[1]=(((TrackSegment)connectB).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection B doesn't contain a layout block"); + } + } + if ((connectD instanceof TrackSegment) && (((TrackSegment)connectD).getLayoutBlock()!=block)){ + try { + boundaryBetween[3]=(((TrackSegment)connectD).getLayoutBlock().getDisplayName()+ " - " + block.getDisplayName()); + } catch (java.lang.NullPointerException e){ + //Can be considered normal if tracksegement hasn't yet been allocated a block + log.debug("TrackSegement at connection D doesn't contain a layout block"); + } + } + } + return boundaryBetween; + } + + // variables for Edit slip Crossing pane + JButton slipEditDone; + JButton slipEditCancel; + JButton turnoutEditBlock; + boolean editOpen = false; + private JmriBeanComboBox turnoutAComboBox; + private JmriBeanComboBox turnoutBComboBox; + + /** + * Edit a Slip + */ + protected void editLayoutSlip(LayoutTurnout o) { + if (editOpen) { + editLayoutTurnoutFrame.setVisible(true); + return; + } + // Initialize if needed + if (editLayoutTurnoutFrame == null) { + editLayoutTurnoutFrame = new JmriJFrame( rb.getString("EditSlip"), false, true ); + editLayoutTurnoutFrame.addHelpMenu("package.jmri.jmrit.display.EditLayoutSlip", true); + editLayoutTurnoutFrame.setLocation(50,30); + Container contentPane = editLayoutTurnoutFrame.getContentPane(); + contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); + JPanel panel1 = new JPanel(); + panel1.setLayout(new FlowLayout()); + JLabel turnoutNameLabel = new JLabel( rb.getString("Turnout")+" A "+rb.getString("Name") ); + turnoutAComboBox = new JmriBeanComboBox(InstanceManager.turnoutManagerInstance(), getTurnout(), JmriBeanComboBox.DISPLAYNAME); + panel1.add(turnoutNameLabel); + panel1.add(turnoutAComboBox); + contentPane.add(panel1); + JPanel panel1a = new JPanel(); + panel1a.setLayout(new FlowLayout()); + JLabel turnoutBNameLabel = new JLabel( rb.getString("Turnout")+" B "+rb.getString("Name") ); + turnoutBComboBox = new JmriBeanComboBox(InstanceManager.turnoutManagerInstance(), getTurnoutB(), JmriBeanComboBox.DISPLAYNAME); + panel1a.add(turnoutBNameLabel); + panel1a.add(turnoutBComboBox); + contentPane.add(panel1a); + JPanel panel2 = new JPanel(); + panel2.setLayout(new GridLayout(0,3, 2, 2)); + + panel2.add(new Label(" ")); + panel2.add(new Label(rb.getString("Turnout")+" A:")); + panel2.add(new Label(rb.getString("Turnout")+" B:")); + for(Entry <Integer, TurnoutState> ts: turnoutStates.entrySet()){ + SampleStates draw = new SampleStates(ts.getKey()); + draw.repaint(); + draw.setPreferredSize(new Dimension(40,40)); + panel2.add(draw); + + panel2.add(ts.getValue().getComboA()); + panel2.add(ts.getValue().getComboB()); + } + + + testPanel = new TestState(); + testPanel.setSize(40,40); + testPanel.setPreferredSize(new Dimension(40,40)); + panel2.add(testPanel); + JButton testButton = new JButton("Test"); + testButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + toggleStateTest(); + } + }); + panel2.add(testButton); + contentPane.add(panel2); + // setup block name + JPanel panel3 = new JPanel(); + panel3.setLayout(new FlowLayout()); + JLabel block1NameLabel = new JLabel( rb.getString("BlockID") ); + panel3.add(block1NameLabel); + panel3.add(blockNameField); + blockNameField.setToolTipText( rb.getString("EditBlockNameHint") ); + contentPane.add(panel3); + // set up Edit Block buttons + JPanel panel4 = new JPanel(); + panel4.setLayout(new FlowLayout()); + // Edit Block + panel4.add(turnoutEditBlock = new JButton(rb.getString("EditBlock"))); + turnoutEditBlock.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnoutEditBlockPressed(e); + } + }); + turnoutEditBlock.setToolTipText( rb.getString("EditBlockHint") ); + + contentPane.add(panel4); + // set up Done and Cancel buttons + JPanel panel5 = new JPanel(); + panel5.setLayout(new FlowLayout()); + panel5.add(slipEditDone = new JButton(rb.getString("Done"))); + slipEditDone.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + slipEditDonePressed(e); + } + }); + slipEditDone.setToolTipText( rb.getString("DoneHint") ); + // Cancel + panel5.add(slipEditCancel = new JButton(rb.getString("Cancel"))); + slipEditCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + slipEditCancelPressed(e); + } + }); + slipEditCancel.setToolTipText( rb.getString("CancelHint") ); + contentPane.add(panel5); + } + // Set up for Edit + blockNameField.setText(blockName); + + editLayoutTurnoutFrame.addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent e) { + slipEditCancelPressed(null); + } + }); + editLayoutTurnoutFrame.pack(); + editLayoutTurnoutFrame.setVisible(true); + editOpen = true; + needsBlockUpdate = false; + } + + void drawSlipState(int state, Graphics2D g2){ + int ctrX = 20; + int ctrY = 20; + Point2D ldispA = new Point2D.Double(-20.0,0.0); + Point2D ldispB = new Point2D.Double(-14.0,14.0); + g2.setColor(Color.black); + + Point2D A = new Point2D.Double(ctrX+ldispA.getX(), ctrY+ldispA.getY()); + Point2D B = new Point2D.Double(ctrX+ldispB.getX(), ctrY+ldispB.getY()); + Point2D C = new Point2D.Double(ctrX-ldispA.getX(), ctrY-ldispA.getY()); + Point2D D = new Point2D.Double(ctrX-ldispB.getX(), ctrY-ldispB.getY()); + + g2.setStroke(new BasicStroke(2,BasicStroke.CAP_BUTT, + BasicStroke.JOIN_ROUND)); + + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,C))); + g2.draw(new Line2D.Double(C, + layoutEditor.third(C,A))); + + if(state==STATE_AC || state==STATE_BD || state==UNKNOWN){ + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,D))); + + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,A))); + + if(getSlipType()==LayoutSlip.DOUBLE_SLIP){ + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,C))); + + g2.draw(new Line2D.Double(C, + layoutEditor.third(C,B))); + } + } else { + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,D))); + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,B))); + } + + if(getSlipType()==LayoutSlip.DOUBLE_SLIP){ + if (state==LayoutSlip.STATE_AC){ + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,D))); + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,B))); + + g2.setColor(Color.red); + g2.draw(new Line2D.Double(A,C)); + + } else if (state==LayoutSlip.STATE_BD){ + g2.setColor(Color.red); + g2.draw(new Line2D.Double(B,D)); + + } else if (state==LayoutSlip.STATE_AD){ + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,C))); + + g2.draw(new Line2D.Double(C, + layoutEditor.third(C,B))); + + g2.setColor(Color.red); + g2.draw(new Line2D.Double(A,D)); + + } else if (state==LayoutSlip.STATE_BC){ + + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,D))); + + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,A))); + g2.setColor(Color.red); + g2.draw(new Line2D.Double(B,C)); + } + else { + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,D))); + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,B))); + } + } else { + if (state==LayoutSlip.STATE_AD){ + g2.setColor(Color.red); + g2.draw(new Line2D.Double(A,D)); + + } else if (state!=LayoutSlip.UNKNOWN) { + + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,D))); + + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,A))); + g2.setColor(Color.red); + // draw AC segment + g2.draw(new Line2D.Double(A,C)); + //Might want to do something neat here depending upon the state/type of the blocks connected + // draw BD segment + g2.draw(new Line2D.Double(B,D)); + } else { + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,D))); + + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,A))); + } + } + + } + + class SampleStates extends JPanel { + // Methods, constructors, fields. + SampleStates(int state){ + super(); + this.state = state; + } + int state; + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); // paints background + Graphics2D g2 = (Graphics2D) g; + drawSlipState(state, g2); + } + } + + int testState = UNKNOWN; + /** + * Toggle slip states if clicked on, physical turnout exists, and + * not disabled + */ + public void toggleStateTest() { + int turnAState; + int turnBState; + switch(testState) { + case STATE_AC : if(type==SINGLE_SLIP) { + turnAState = turnoutStates.get(STATE_AD).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_AD).getTestTurnoutBState(); + testState = STATE_AD; + } else { + turnAState = turnoutStates.get(STATE_BD).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_BD).getTestTurnoutBState(); + testState = STATE_BD; + } + break; + case STATE_BD : + turnAState = turnoutStates.get(STATE_AD).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_AD).getTestTurnoutBState(); + testState = STATE_AD; + break; + case STATE_AD : if(type==SINGLE_SLIP){ + turnAState = turnoutStates.get(STATE_AC).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_AC).getTestTurnoutBState(); + testState = STATE_AC; + } else { + turnAState = turnoutStates.get(STATE_BC).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_BC).getTestTurnoutBState(); + testState = STATE_BC; + } + break; + case STATE_BC : + turnAState = turnoutStates.get(STATE_AC).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_AC).getTestTurnoutBState(); + testState = STATE_AC; + break; + default : + turnAState = turnoutStates.get(STATE_BD).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_BD).getTestTurnoutBState(); + testState = STATE_BD; + break; + + } + if(getTurnout()!=null) + getTurnout().setCommandedState(turnAState); + if(getTurnoutB()!=null) + getTurnoutB().setCommandedState(turnBState); + if(testPanel!=null) + testPanel.repaint(); + } + + class TestState extends JPanel { + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + drawSlipState(testState, g2); + } + } + + TestState testPanel; + + void slipEditDonePressed(ActionEvent a) { + if ( !turnoutName.equals(turnoutAComboBox.getSelectedDisplayName()) ) { + String newName = turnoutAComboBox.getSelectedDisplayName(); + if ( layoutEditor.validatePhysicalTurnout(newName, + editLayoutTurnoutFrame) ) { + setTurnout(newName); + } + else { + namedTurnout = null; + turnoutName = ""; + } + needRedraw = true; + } + if ( !turnoutBName.equals(turnoutBComboBox.getSelectedDisplayName()) ) { + String newName = turnoutBComboBox.getSelectedDisplayName(); + if ( layoutEditor.validatePhysicalTurnout(newName, + editLayoutTurnoutFrame) ) { + setTurnoutB(newName); + } + else { + namedTurnoutB = null; + turnoutBName = ""; + } + needRedraw = true; + } + if ( !blockName.equals(blockNameField.getText().trim()) ) { + // block 1 has changed, if old block exists, decrement use + if ( (block!=null)) { + block.decrementUse(); + } + // get new block, or null if block has been removed + blockName = blockNameField.getText().trim(); + //if ( (blockName!=null) && (blockName.length()>0)) { + block = layoutEditor.provideLayoutBlock(blockName); + + if(block==null) { + blockName = ""; + blockNameField.setText(""); + } + //} + //else { + // block = null; + // blockName = ""; + //} + needRedraw = true; + layoutEditor.auxTools.setBlockConnectivityChanged(); + needsBlockUpdate = true; + } + for(TurnoutState ts: turnoutStates.values()){ + ts.updateStatesFromCombo(); + } + editOpen = false; + editLayoutTurnoutFrame.setVisible(false); + editLayoutTurnoutFrame.dispose(); + editLayoutTurnoutFrame = null; + if (needsBlockUpdate) updateBlockInfo(); + if (needRedraw) { + layoutEditor.redrawPanel(); + layoutEditor.setDirty(); + } + } + void slipEditCancelPressed(ActionEvent a) { + editOpen = false; + editLayoutTurnoutFrame.setVisible(false); + editLayoutTurnoutFrame.dispose(); + editLayoutTurnoutFrame = null; + if (needsBlockUpdate) updateBlockInfo(); + if (needRedraw) { + layoutEditor.redrawPanel(); + layoutEditor.setDirty(); + } + } + + /** + * Clean up when this object is no longer needed. Should not + * be called while the object is still displayed; see remove() + */ + void dispose() { + if (popup != null) popup.removeAll(); + popup = null; + } + + /** + * Removes this object from display and persistance + */ + void remove() { + + disableSML(getSignalAMast()); + disableSML(getSignalBMast()); + disableSML(getSignalCMast()); + disableSML(getSignalDMast()); + removeSML(getSignalAMast()); + removeSML(getSignalBMast()); + removeSML(getSignalCMast()); + removeSML(getSignalDMast()); + // remove from persistance by flagging inactive + active = false; + } + + void disableSML(String signalMast){ + if(signalMast==null || signalMast.equals("")) + return; + jmri.SignalMast mast = jmri.InstanceManager.signalMastManagerInstance().getSignalMast(signalMast); + InstanceManager.signalMastLogicManagerInstance().disableLayoutEditorUse(mast); + } + + boolean active = true; + /** + * "active" means that the object is still displayed, and should be stored. + */ + public boolean isActive() { + return active; + } + + /*ArrayList<SignalMast> sml = new ArrayList<SignalMast>(); + + public void removeSignalMastLogic(SignalMast sm){ + log.info("Remove called"); + if(!sml.contains(sm)) + return; + sml.remove(sm); + if(sml.isEmpty()){ + return; + } + for(int i = 0; i<sml.size(); i++){ + SignalMastLogic s = jmri.InstanceManager.signalMastLogicManagerInstance().getSignalMastLogic(sm); + } + }*/ + + Hashtable <Integer, TurnoutState> turnoutStates = new Hashtable<Integer, TurnoutState>(4); + + public int getTurnoutState(Turnout turn, int state){ + if(turn==getTurnout()){ + return getTurnoutState(state); + } + return getTurnoutBState(state); + } + + public int getTurnoutState(int state){ + return turnoutStates.get(Integer.valueOf(state)).getTurnoutAState(); + } + + public int getTurnoutBState(int state){ + return turnoutStates.get(state).getTurnoutBState(); + } + + public void setTurnoutStates(int state, String turnStateA, String turnStateB){ + turnoutStates.get(state).setTurnoutAState(Integer.valueOf(turnStateA)); + turnoutStates.get(state).setTurnoutBState(Integer.valueOf(turnStateB)); + } + + //Internal call to update the state of the slip depending upon the turnout states. + void updateState(){ + int state_a = getTurnout().getKnownState(); + int state_b = getTurnoutB().getKnownState(); + for(Entry<Integer, TurnoutState> en: turnoutStates.entrySet()){ + if(en.getValue().getTurnoutAState()==state_a){ + if(en.getValue().getTurnoutBState()==state_b){ + currentState=en.getKey(); + layoutEditor.redrawPanel(); + return; + } + } + } + } + + static class TurnoutState{ + int turnoutA = Turnout.CLOSED; + int turnoutB = Turnout.CLOSED; + JComboBox turnoutABox; + JComboBox turnoutBBox; + + TurnoutState(int turnoutA, int turnoutB){ + this.turnoutA = turnoutA; + this.turnoutB = turnoutB; + } + + int getTurnoutAState(){ + return turnoutA; + } + + int getTurnoutBState(){ + return turnoutB; + } + + void setTurnoutAState(int state){ + turnoutA = state; + } + + void setTurnoutBState(int state){ + turnoutB = state; + } + + JComboBox getComboA(){ + if(turnoutABox==null){ + String state[] = new String[]{InstanceManager.turnoutManagerInstance().getClosedText(), + InstanceManager.turnoutManagerInstance().getThrownText()}; + turnoutABox = new JComboBox(state); + if(turnoutA == Turnout.THROWN) + turnoutABox.setSelectedIndex(1); + } + return turnoutABox; + } + + JComboBox getComboB(){ + if(turnoutBBox==null){ + String state[] = new String[]{InstanceManager.turnoutManagerInstance().getClosedText(), + InstanceManager.turnoutManagerInstance().getThrownText()}; + turnoutBBox = new JComboBox(state); + if(turnoutB == Turnout.THROWN) + turnoutBBox.setSelectedIndex(1); + } + return turnoutBBox; + } + + int getTestTurnoutAState(){ + if(turnoutABox.getSelectedIndex()==0) + return Turnout.CLOSED; + return Turnout.THROWN; + } + + int getTestTurnoutBState(){ + if(turnoutBBox.getSelectedIndex()==0) + return Turnout.CLOSED; + return Turnout.THROWN; + } + + void updateStatesFromCombo(){ + if(turnoutABox==null || turnoutBBox==null){ + return; + } + if(turnoutABox.getSelectedIndex()==0){ + turnoutA= Turnout.CLOSED; + } else { + turnoutA=Turnout.THROWN; + } + if(turnoutBBox.getSelectedIndex()==0){ + turnoutB= Turnout.CLOSED; + } else { + turnoutB=Turnout.THROWN; + } + } + + } + + static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LayoutSlip.class.getName()); + +} \ No newline at end of file Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-03-22 09:08:50 UTC (rev 20228) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-03-22 10:18:02 UTC (rev 20229) @@ -108,15 +108,15 @@ // operational instance variables (not saved between sessions) //private Turnout turnout = null; - private NamedBeanHandle<Turnout> namedTurnout = null; + protected NamedBeanHandle<Turnout> namedTurnout = null; //Second turnout is used to either throw a second turnout in a cross over or if one turnout address is used to throw two physical ones - private NamedBeanHandle<Turnout> secondNamedTurnout = null; - private LayoutBlock block = null; + protected NamedBeanHandle<Turnout> secondNamedTurnout = null; + protected LayoutBlock block = null; private LayoutBlock blockB = null; // Xover - second block, if there is one private LayoutBlock blockC = null; // Xover - third block, if there is one private LayoutBlock blockD = null; // Xover - fourth block, if there is one - private LayoutTurnout instance = null; - private LayoutEditor layoutEditor = null; + protected LayoutTurnout instance = null; + protected LayoutEditor layoutEditor = null; private java.beans.PropertyChangeListener mTurnoutListener = null; // persistent instances variables (saved between sessions) @@ -132,6 +132,7 @@ public String blockBName = ""; // Xover - name for second block, if there is one public String blockCName = ""; // Xover - name for third block, if there is one public String blockDName = ""; // Xover - name for fourth block, if there is one + public String signalA1Name = ""; // signal 1 (continuing) (throat for RH, LH, WYE) public String signalA2Name = ""; // signal 2 (diverging) (throat for RH, LH, WYE) public String signalA3Name = ""; // signal 3 (second diverging) (3-way turnouts only) @@ -141,15 +142,16 @@ public String signalC2Name = ""; // RH_Xover and double crossover only public String signalD1Name = ""; // single or double crossover only public String signalD2Name = ""; // LH_Xover and double crossover only + public String signalAMast = ""; // Throat public String signalBMast = ""; // Continuing public String signalCMast = ""; // diverging public String signalDMast = ""; // single or double crossover only - private NamedBeanHandle<Sensor> sensorANamed = null; // Throat - private NamedBeanHandle<Sensor> sensorBNamed = null; // Continuing - private NamedBeanHandle<Sensor> sensorCNamed = null; // diverging - private NamedBeanHandle<Sensor> sensorDNamed = null; // single or double crossover only + protected NamedBeanHandle<Sensor> sensorANamed = null; // Throat + protected NamedBeanHandle<Sensor> sensorBNamed = null; // Continuing + protected NamedBeanHandle<Sensor> sensorCNamed = null; // diverging + protected NamedBeanHandle<Sensor> sensorDNamed = null; // single or double crossover only public int type = RH_TURNOUT; public Object connectA = null; // throat of LH, RH, RH Xover, LH Xover, and WYE turnouts @@ -166,7 +168,9 @@ public int linkType = NO_LINK; private boolean useBlockSpeed = false; - + + protected LayoutTurnout() {} + /** * constructor method */ @@ -290,6 +294,7 @@ public void setSignalD1Name(String signalName) {signalD1Name = signalName;} public String getSignalD2Name() {return signalD2Name;} public void setSignalD2Name(String signalName) {signalD2Name = signalName;} + public String getSignalAMast() {return signalAMast;} public void setSignalAMast(String signalMast) {signalAMast = signalMast;} public String getSignalBMast() {return signalBMast;} @@ -1484,11 +1489,11 @@ } // variables for Edit Layout Turnout pane - private JmriJFrame editLayoutTurnoutFrame = null; + protected JmriJFrame editLayoutTurnoutFrame = null; private JTextField turnoutNameField = new JTextField(16); private JmriBeanComboBox secondTurnoutComboBox; private JLabel secondTurnoutLabel; - private JTextField blockNameField = new JTextField(16); + protected JTextField blockNameField = new JTextField(16); private JTextField blockBNameField = new JTextField(16); private JTextField blockCNameField = new JTextField(16); private JTextField blockDNameField = new JTextField(16); @@ -1502,8 +1507,8 @@ private JButton turnoutEditBlockC; private JButton turnoutEditBlockD; private boolean editOpen = false; - private boolean needRedraw = false; - private boolean needsBlockUpdate = false; + protected boolean needRedraw = false; + protected boolean needsBlockUpdate = false; private JCheckBox additionalTurnout = new JCheckBox(rb.getString("SupportingTurnout")); /** @@ -2063,7 +2068,7 @@ } void removeSML(String signalMast){ - if(signalMast==null || !signalMast.equals("")) + if(signalMast==null || signalMast.equals("")) return; jmri.SignalMast mast = jmri.InstanceManager.signalMastManagerInstance().getSignalMast(signalMast); if(jmri.InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled() && InstanceManager.signalMastLogicManagerInstance().isSignalMastUsed(mast)){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-03-26 08:39:29
|
Revision: 20243 http://jmri.svn.sourceforge.net/jmri/?rev=20243&view=rev Author: kevin-dickerson Date: 2012-03-26 08:39:18 +0000 (Mon, 26 Mar 2012) Log Message: ----------- fix errors reported by find bugs and find bugs v2 (mainly add default to bottom of switch statements) Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockConnectivityTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -383,6 +383,7 @@ prevConnectType = LayoutEditor.TURNOUT_D; } break; + default: break; } companion.add(Integer.valueOf(setting)); notFound = false; @@ -1738,6 +1739,7 @@ (tBlock!=excludedBlock) ) block = tBlock; } break; + default : break; } return block; } @@ -1948,6 +1950,7 @@ } } break; + default : break; } if ( (tr!=null) && (tr.getLayoutBlock() != lb) ) { // continuing track segment is not in this block @@ -2375,6 +2378,7 @@ else curTS = null; curObj = conObj; break; + default : break; } } else if ( (tType==LayoutTurnout.RH_TURNOUT) || (tType==LayoutTurnout.LH_TURNOUT) || @@ -2554,6 +2558,7 @@ tr = (TrackSegment)x.getConnectB(); prevConnectType = LayoutEditor.LEVEL_XING_B; break; + default : break; } if (tr.getLayoutBlock() != lb) { // track segment is not in this block Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockConnectivityTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockConnectivityTools.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockConnectivityTools.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -518,7 +518,7 @@ switch(pathMethod){ case MASTTOMAST : signal = InstanceManager.layoutBlockManagerInstance().getFacingSignalMast(currentBlock, blocktoCheck); break; case HEADTOHEAD : signal = InstanceManager.layoutBlockManagerInstance().getFacingSignalHead(currentBlock, blocktoCheck); break; - case ANY : signal = (jmri.NamedBean) InstanceManager.layoutBlockManagerInstance().getFacingSignalObject(currentBlock, blocktoCheck); break; + default : signal = (jmri.NamedBean) InstanceManager.layoutBlockManagerInstance().getFacingSignalObject(currentBlock, blocktoCheck); break; } lBlockManLog.setLevel(currentLevel); if (signal==null){ Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -55,8 +55,8 @@ ResourceBundle rb = ResourceBundle.getBundle("jmri.jmrit.display.layoutEditor.LayoutEditorBundle"); // defined constants - public static int SINGLE_SLIP = 7; - public static int DOUBLE_SLIP = 8; + public final static int SINGLE_SLIP = 7; + public final static int DOUBLE_SLIP = 8; // operational instance variables (not saved between sessions) Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -1179,6 +1179,7 @@ case LH_XOVER: popup.add(rb.getString("LHXOverTurnout")); break; + default : break; } if (getTurnout()==null) popup.add(rb.getString("NoTurnout")); else popup.add(rb.getString("Turnout")+": "+turnoutName); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -307,6 +307,7 @@ } endBumper = true; break; + default : break; } popup.add(new JSeparator(JSeparator.HORIZONTAL)); popup.add(new AbstractAction(rb.getString("Remove")) { Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2012-03-26 08:26:18 UTC (rev 20242) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2012-03-26 08:39:18 UTC (rev 20243) @@ -354,6 +354,7 @@ setAngle(90.0D); setCircle(false); break; + default : break; } layoutEditor.redrawPanel(); layoutEditor.setDirty(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-04-20 09:28:41
|
Revision: 20369 http://jmri.svn.sourceforge.net/jmri/?rev=20369&view=rev Author: kevin-dickerson Date: 2012-04-20 09:28:34 +0000 (Fri, 20 Apr 2012) Log Message: ----------- Add in the ability to hide turnouts when not in edit mode. This allows for block connectivity/logic to be created using turnouts where a turntable is used and then hide up the turnouts. Change the slip type numbering from 70 to 74 to 20 to 24. Turntable rays are assigned numbers 50+ so could in theory interfere with the slip numbering. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-04-20 03:35:51 UTC (rev 20368) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-04-20 09:28:34 UTC (rev 20369) @@ -86,12 +86,13 @@ final public static int MULTI_SENSOR = 16; final public static int MARKER = 17; final public static int TRACK_CIRCLE_CENTRE = 18; + final public static int SLIP_CENTER = 20; // + final public static int SLIP_A = 21; // offset for slip connection points + final public static int SLIP_B = 22; // offset for slip connection points + final public static int SLIP_C = 23; // offset for slip connection points + final public static int SLIP_D = 24; // offset for slip connection points final public static int TURNTABLE_RAY_OFFSET = 50; // offset for turntable connection points - final public static int SLIP_CENTER = 70; // - final public static int SLIP_A = 71; // offset for slip connection points - final public static int SLIP_B = 72; // offset for slip connection points - final public static int SLIP_C = 73; // offset for slip connection points - final public static int SLIP_D = 74; // offset for slip connection points + // dashed line parameters //private static int minNumDashes = 3; @@ -6314,6 +6315,7 @@ else { g2.setColor(defaultTrackColor); } + if(!(t.getHidden() && !isEditable())){ if (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) { // double crossover turnout Turnout t1 = t.getTurnout(); @@ -6781,6 +6783,7 @@ } } } + } } } @@ -6974,10 +6977,12 @@ // loop over all defined turnouts for (int i = 0; i<turnoutList.size();i++) { LayoutTurnout t = turnoutList.get(i); - Point2D pt = t.getCoordsCenter(); - g2.setColor(defaultTrackColor); - g2.draw(new Ellipse2D.Double ( - pt.getX()-SIZE2, pt.getY()-SIZE2, SIZE2+SIZE2, SIZE2+SIZE2)); + if(!(t.getHidden() && !isEditable())){ + Point2D pt = t.getCoordsCenter(); + g2.setColor(defaultTrackColor); + g2.draw(new Ellipse2D.Double ( + pt.getX()-SIZE2, pt.getY()-SIZE2, SIZE2+SIZE2, SIZE2+SIZE2)); + } } } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-04-20 03:35:51 UTC (rev 20368) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-04-20 09:28:34 UTC (rev 20369) @@ -172,6 +172,7 @@ AddNewLabel = Add New Label ReporterDoneHint = Click to add new Reporter Icon as specified above. HideTrack = Hide Track +HideTurnout = Hide Turnout HiddenToolTip = Check to hide this track segment when not in edit mode. ScaleTrackDiagram = Scale/Translate Track Diagram XFactorLabel = Horizontal (x) Scale Factor: Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-04-20 03:35:51 UTC (rev 20368) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-04-20 09:28:34 UTC (rev 20369) @@ -167,6 +167,8 @@ public String linkedTurnoutName = ""; // name of the linked Turnout (as entered in tool) public int linkType = NO_LINK; + private boolean hidden = false; + private boolean useBlockSpeed = false; protected LayoutTurnout() {} @@ -272,6 +274,9 @@ return secondNamedTurnout.getName(); return secondTurnoutName; } + + public boolean getHidden() {return hidden;} + public void setHidden(boolean hide) {hidden = hide;} public String getBlockName() {return blockName;} public String getBlockBName() {return blockBName;} public String getBlockCName() {return blockCName;} @@ -1246,6 +1251,8 @@ if (blockC!=null) popup.add(rb.getString("Block3ID")+": "+blockCName); if (blockD!=null) popup.add(rb.getString("Block4ID")+": "+blockDName); } + if (hidden) popup.add(rb.getString("Hidden")); + else popup.add(rb.getString("NotHidden")); popup.add(new JSeparator(JSeparator.HORIZONTAL)); popup.add(new AbstractAction(rb.getString("UseSizeAsDefault")) { public void actionPerformed(ActionEvent e) { @@ -1499,6 +1506,7 @@ private JTextField blockCNameField = new JTextField(16); private JTextField blockDNameField = new JTextField(16); private JComboBox stateBox = new JComboBox(); + private JCheckBox hiddenBox = new JCheckBox(rb.getString("HideTurnout")); private int turnoutClosedIndex; private int turnoutThrownIndex; private JButton turnoutEditBlock; @@ -1578,6 +1586,12 @@ panel3.add (stateBox); contentPane.add(panel3); } + + JPanel panel33 = new JPanel(); + panel33.setLayout(new FlowLayout()); + hiddenBox.setToolTipText(rb.getString("HiddenToolTip")); + panel33.add (hiddenBox); + contentPane.add(panel33); // setup block name JPanel panel2 = new JPanel(); @@ -1668,6 +1682,9 @@ contentPane.add(panel6); } } + + hiddenBox.setSelected(hidden); + // Set up for Edit blockNameField.setText(blockName); if ( (type == DOUBLE_XOVER) || (type == RH_XOVER) || (type == LH_XOVER) ) { @@ -1954,6 +1971,11 @@ needsBlockUpdate = true; } } + // set hidden + boolean oldHidden = hidden; + hidden = hiddenBox.isSelected(); + if(oldHidden!=hidden) + needRedraw=true; editOpen = false; editLayoutTurnoutFrame.setVisible(false); editLayoutTurnoutFrame.dispose(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2012-04-20 03:35:51 UTC (rev 20368) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2012-04-20 09:28:34 UTC (rev 20369) @@ -55,6 +55,8 @@ element.setAttribute("blockdname", p.getBlockDName()); } element.setAttribute("type", ""+p.getTurnoutType()); + if(p.getHidden()) + element.setAttribute("hidden", ""+(p.getHidden()?"yes":"no")); if (p.getConnectA()!=null) { element.setAttribute("connectaname", ((TrackSegment)p.getConnectA()).getID()); } @@ -281,6 +283,12 @@ if ((a = element.getAttribute("disableWhenOccupied"))!=null && a.getValue().equals("yes")) value = true; l.setDisableWhenOccupied(value); + boolean hide = false; + if(element.getAttribute("hidden")!=null){ + if (element.getAttribute("hidden").getValue().equals("yes")) + hide = true; + } + l.setHidden(hide); try { x = element.getAttribute("xb").getFloatValue(); y = element.getAttribute("yb").getFloatValue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-05-16 11:54:53
|
Revision: 20476 http://jmri.svn.sourceforge.net/jmri/?rev=20476&view=rev Author: kevin-dickerson Date: 2012-05-16 11:54:43 +0000 (Wed, 16 May 2012) Log Message: ----------- Update to the way that the single slip can operate as to have either two or three different states. Allow the logix for the signal to be recreated rather than skipped if it has already been created once, this allows for changes having been made at a later date on the slip for the turnout states. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-05-15 15:24:24 UTC (rev 20475) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-05-16 11:54:43 UTC (rev 20476) @@ -6845,13 +6845,10 @@ g2.draw(new Line2D.Double(x.getCoordsB(),x.getCoordsD())); } - //Will need to sort out state of the turnout private void drawSlips(Graphics2D g2) { for (int i = 0; i<slipList.size();i++) { LayoutSlip x = slipList.get(i); - // set color - check for an AC block LayoutBlock b = x.getLayoutBlock(); - // set track width for AC block setTrackStrokeWidth(g2,x.isMainline()); Color mainColour; Color subColour; @@ -6942,23 +6939,30 @@ third(x.getCoordsD(),x.getCoordsA()))); } } else { + g2.draw(new Line2D.Double(x.getCoordsA(), + third(x.getCoordsA(),x.getCoordsD()))); + + g2.draw(new Line2D.Double(x.getCoordsD(), + third(x.getCoordsD(),x.getCoordsA()))); if (x.getSlipState()==LayoutSlip.STATE_AD){ g2.setColor(mainColour); g2.draw(new Line2D.Double(x.getCoordsA(),x.getCoordsD())); - } else if (x.getSlipState()!=LayoutSlip.UNKNOWN) { + } else if (x.getSlipState()==LayoutSlip.STATE_BD){ + g2.setColor(mainColour); + g2.draw(new Line2D.Double(x.getCoordsB(),x.getCoordsD())); + if(x.singleSlipStraightEqual()){ + g2.setColor(mainColour); + g2.draw(new Line2D.Double(x.getCoordsA(),x.getCoordsC())); + } - g2.draw(new Line2D.Double(x.getCoordsA(), - third(x.getCoordsA(),x.getCoordsD()))); - - g2.draw(new Line2D.Double(x.getCoordsD(), - third(x.getCoordsD(),x.getCoordsA()))); + } else if (x.getSlipState()==LayoutSlip.STATE_AC){ g2.setColor(mainColour); - // draw AC segment g2.draw(new Line2D.Double(x.getCoordsA(),x.getCoordsC())); - //Might want to do something neat here depending upon the state/type of the blocks connected - // draw BD segment - g2.draw(new Line2D.Double(x.getCoordsB(),x.getCoordsD())); + if(x.singleSlipStraightEqual()){ + g2.setColor(mainColour); + g2.draw(new Line2D.Double(x.getCoordsB(),x.getCoordsD())); + } } else { g2.draw(new Line2D.Double(x.getCoordsA(), third(x.getCoordsA(),x.getCoordsD()))); @@ -6967,8 +6971,6 @@ third(x.getCoordsD(),x.getCoordsA()))); } } - - } } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2012-05-15 15:24:24 UTC (rev 20475) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2012-05-16 11:54:43 UTC (rev 20476) @@ -12078,6 +12078,7 @@ private JPanel dblSlipC2SigPanel; private JPanel dblSlipB2SigPanel; + private boolean slipSignalFromMenu = false; public void setSlipFromMenu( LayoutSlip ls, MultiIconEditor theEditor, JFrame theFrame ) { @@ -12090,6 +12091,8 @@ c2SlipField.setText(""); d1SlipField.setText(""); d2SlipField.setText(""); + slipSignalFromMenu = true; + setSignalsAtSlip(theEditor,theFrame); } public void setSignalsAtSlip( MultiIconEditor theEditor, JFrame theFrame ) { @@ -12337,6 +12340,7 @@ dblSlipB2SigPanel.setVisible(true); dblSlipC2SigPanel.setVisible(true); } + if (slipSignalFromMenu) getSlipTurnoutSignalsGetSaved(null); setSignalsAtSlipFrame.pack(); setSignalsAtSlipFrame.setVisible(true); setSignalsAtSlipOpen = true; @@ -12521,7 +12525,7 @@ } } else if (assigned!=C1) { -// need to figure out what to do in this case. + // need to figure out what to do in this case. } } if(layoutSlip.getTurnoutType()==LayoutSlip.DOUBLE_SLIP){ @@ -12543,7 +12547,7 @@ removeAssignment(b2SlipHead); layoutSlip.setSignalB2Name(b2SlipField.getText().trim()); needRedraw = true; - } + } } else if (b2SlipHead!=null) { int assigned = isHeadAssignedHere(b2SlipHead,layoutSlip); @@ -12577,7 +12581,6 @@ layoutSlip.setSignalB2Name(""); b2SlipHead=null; } - } // signal heads on turnout 2 if (setC1SlipHead.isSelected()) { @@ -12766,25 +12769,25 @@ setLogicSlip(a1SlipHead,(TrackSegment)layoutSlip.getConnectC(),a2SlipHead, (TrackSegment)layoutSlip.getConnectD(),setupA1SlipLogic.isSelected(), setupA2SlipLogic.isSelected(),layoutSlip, layoutSlip.getTurnout(), - layoutSlip.getTurnoutB(), LayoutSlip.STATE_AC, LayoutSlip.STATE_AD); + layoutSlip.getTurnoutB(), LayoutSlip.STATE_AC, LayoutSlip.STATE_AD, 0); } if (setupB1SlipLogic.isSelected() || setupB2SlipLogic.isSelected()) { setLogicSlip(b1SlipHead,(TrackSegment)layoutSlip.getConnectD(),b2SlipHead, (TrackSegment)layoutSlip.getConnectC(),setupB1SlipLogic.isSelected(), setupB2SlipLogic.isSelected(),layoutSlip, layoutSlip.getTurnout(), - layoutSlip.getTurnoutB(), LayoutSlip.STATE_BD, LayoutSlip.STATE_BC); + layoutSlip.getTurnoutB(), LayoutSlip.STATE_BD, LayoutSlip.STATE_BC, 2); } if (setupC1SlipLogic.isSelected() || setupC2SlipLogic.isSelected()) { setLogicSlip(c1SlipHead,(TrackSegment)layoutSlip.getConnectA(),c2SlipHead, (TrackSegment)layoutSlip.getConnectB(),setupC1SlipLogic.isSelected(), setupC2SlipLogic.isSelected(),layoutSlip, layoutSlip.getTurnoutB(), - layoutSlip.getTurnout(),LayoutSlip.STATE_AC, LayoutSlip.STATE_BC); + layoutSlip.getTurnout(),LayoutSlip.STATE_AC, LayoutSlip.STATE_BC, 4); } if (setupD1SlipLogic.isSelected() || setupD2SlipLogic.isSelected()) { setLogicSlip(d1SlipHead,(TrackSegment)layoutSlip.getConnectB(),d2SlipHead, (TrackSegment)layoutSlip.getConnectA(),setupD1SlipLogic.isSelected(), setupD2SlipLogic.isSelected(),layoutSlip, layoutSlip.getTurnoutB(), - layoutSlip.getTurnout(),LayoutSlip.STATE_BD, LayoutSlip.STATE_AD); + layoutSlip.getTurnout(),LayoutSlip.STATE_BD, LayoutSlip.STATE_AD, 6); } // finish up setSignalsAtSlipOpen = false; @@ -12844,7 +12847,7 @@ private void setLogicSlip(SignalHead head,TrackSegment track1,SignalHead secondHead,TrackSegment track2, boolean setup1, boolean setup2, LayoutSlip slip, Turnout nearTurnout, Turnout farTurnout, - int continueState, int divergeState) { + int continueState, int divergeState, int number) { // initialize common components and ensure all is defined LayoutBlock connectorBlock = slip.getLayoutBlock(); Sensor connectorOccupancy = null; @@ -12858,7 +12861,7 @@ JOptionPane.showMessageDialog(setSignalsAtSlipFrame, java.text.MessageFormat.format(rb.getString("InfoMessage4"), new Object[]{connectorBlock.getUserName()}), - null,JOptionPane.INFORMATION_MESSAGE); + null,JOptionPane.INFORMATION_MESSAGE); return; } @@ -12915,7 +12918,7 @@ if (auxSignal!=null) { logic.setWatchedSignal1Alt(auxSignal.getSystemName()); } - String nearSensorName = setupNearLogixSlip(nearTurnout, nearState, head, farTurnout, farState); + String nearSensorName = setupNearLogixSlip(nearTurnout, nearState, head, farTurnout, farState, slip, number); addNearSensorToSlipLogic(nearSensorName); finalizeBlockBossLogic(); } @@ -12972,7 +12975,7 @@ if (auxSignal!=null) { logic.setWatchedSignal2Alt(auxSignal.getSystemName()); } - String nearSensorName = setupNearLogixSlip(nearTurnout, nearState,head, farTurnout, farState); + String nearSensorName = setupNearLogixSlip(nearTurnout, nearState,head, farTurnout, farState, slip, number+1); addNearSensorToSlipLogic(nearSensorName); logic.setLimitSpeed2(true); finalizeBlockBossLogic(); @@ -12995,60 +12998,72 @@ if (auxSignal!=null) { logic.setWatchedSignal1Alt(auxSignal.getSystemName()); } - String nearSensorName = setupNearLogixSlip(nearTurnout, nearState, secondHead, farTurnout, farState); + String nearSensorName = setupNearLogixSlip(nearTurnout, nearState, secondHead, farTurnout, farState, slip, number+1); addNearSensorToSlipLogic(nearSensorName); logic.setLimitSpeed2(true); finalizeBlockBossLogic(); } } private String setupNearLogixSlip(Turnout turn, int nearState, - SignalHead head, Turnout farTurn, int farState) { + SignalHead head, Turnout farTurn, int farState, LayoutSlip slip, int number) { String turnoutName = turn.getDisplayName(); String farTurnoutName = farTurn.getDisplayName(); - String namer = turnoutName+head.getDisplayName(); - String sensorName = "IS"+namer; - String logixName = "IX"+namer; + String namer = head.getDisplayName()+":"+turnoutName; + + String logixName = "SYS_LAYOUTSLIP:"+slip.ident; + String sensorName = "IS:"+logixName+"C"+number; Sensor sensor = InstanceManager.sensorManagerInstance().provideSensor(sensorName); if (sensor==null) { log.error("Trouble creating sensor "+sensorName+" while setting up Logix."); return ""; } - if (InstanceManager.logixManagerInstance().getBySystemName(logixName)==null) { - // Logix does not exist, create it - Logix x = InstanceManager.logixManagerInstance().createNewLogix(logixName,""); - if (x==null) { - log.error("Trouble creating logix "+logixName+" while setting up signal logic."); - return ""; - } - String cName = x.getSystemName()+"C1"; - Conditional c = InstanceManager.conditionalManagerInstance(). - createNewConditional(cName,""); - if (c==null) { - log.error("Trouble creating conditional "+cName+" while setting up Logix."); - return ""; - } - int type = Conditional.TYPE_TURNOUT_THROWN; - if(nearState==Turnout.CLOSED) type = Conditional.TYPE_TURNOUT_CLOSED; - ArrayList <ConditionalVariable> variableList = c.getCopyOfStateVariables(); - variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_AND, - type, turnoutName, true)); - - type = Conditional.TYPE_TURNOUT_THROWN; - if (farState==Turnout.CLOSED) type = Conditional.TYPE_TURNOUT_CLOSED; - variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_AND, - type, farTurnoutName, true)); - c.setStateVariables(variableList); - ArrayList <ConditionalAction> actionList = c.getCopyOfActions(); - actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_TRUE, - Conditional.ACTION_SET_SENSOR, sensorName, - Sensor.INACTIVE, "")); - actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_FALSE, - Conditional.ACTION_SET_SENSOR, sensorName, - Sensor.ACTIVE, "")); - c.setAction(actionList); // string data - x.addConditional(cName,-1); - x.activateLogix(); - } + boolean newConditional = false; + Logix x = InstanceManager.logixManagerInstance().getBySystemName(logixName); + if(x==null){ + x = InstanceManager.logixManagerInstance().createNewLogix(logixName, ""); + newConditional = true; + if(x==null){ + log.error("Trouble creating logix "+logixName+" while setting up signal logic."); + return ""; + } + x.setComment("Layout Slip, Signalhead logic"); + } + x.deActivateLogix(); + String cName = logixName+"C"+number; + + Conditional c = InstanceManager.conditionalManagerInstance().getBySystemName(cName); + if(c==null){ + c = InstanceManager.conditionalManagerInstance(). + createNewConditional(cName,""); + newConditional = true; + if (c==null) { + log.error("Trouble creating conditional "+cName+" while setting up Logix."); + return ""; + } + } + int type = Conditional.TYPE_TURNOUT_THROWN; + if(nearState==Turnout.CLOSED) type = Conditional.TYPE_TURNOUT_CLOSED; + ArrayList <ConditionalVariable> variableList = new ArrayList <ConditionalVariable> (); + variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_AND, + type, turnoutName, true)); + + type = Conditional.TYPE_TURNOUT_THROWN; + if (farState==Turnout.CLOSED) type = Conditional.TYPE_TURNOUT_CLOSED; + variableList.add(new ConditionalVariable(false, Conditional.OPERATOR_AND, + type, farTurnoutName, true)); + c.setStateVariables(variableList); + ArrayList <ConditionalAction> actionList = new ArrayList <ConditionalAction> (); + actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_TRUE, + Conditional.ACTION_SET_SENSOR, sensorName, + Sensor.INACTIVE, "")); + actionList.add(new DefaultConditionalAction(Conditional.ACTION_OPTION_ON_CHANGE_TO_FALSE, + Conditional.ACTION_SET_SENSOR, sensorName, + Sensor.ACTIVE, "")); + c.setAction(actionList); // string data + if(newConditional){ + x.addConditional(cName,-1); + } + x.activateLogix(); return sensorName; } /* Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2012-05-15 15:24:24 UTC (rev 20475) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2012-05-16 11:54:43 UTC (rev 20476) @@ -53,10 +53,6 @@ // Defined text resource ResourceBundle rb = ResourceBundle.getBundle("jmri.jmrit.display.layoutEditor.LayoutEditorBundle"); - - // defined constants - public final static int SINGLE_SLIP = 7; - public final static int DOUBLE_SLIP = 8; // operational instance variables (not saved between sessions) @@ -102,8 +98,8 @@ turnoutStates.put(STATE_AD, new TurnoutState(Turnout.CLOSED, Turnout.THROWN)); turnoutStates.put(STATE_BC, new TurnoutState(Turnout.THROWN, Turnout.CLOSED)); } else { - turnoutStates.put(STATE_AC, new TurnoutState(Turnout.CLOSED, Turnout.CLOSED)); - turnoutStates.put(STATE_BD, new TurnoutState(Turnout.CLOSED, Turnout.CLOSED)); + turnoutStates.put(STATE_AC, new TurnoutState(Turnout.CLOSED, Turnout.THROWN)); + turnoutStates.put(STATE_BD, new TurnoutState(Turnout.THROWN, Turnout.CLOSED)); turnoutStates.put(STATE_AD, new TurnoutState(Turnout.THROWN, Turnout.THROWN)); turnoutStates.remove(STATE_BC); } @@ -167,7 +163,7 @@ */ public void toggleState() { switch(currentState) { - case STATE_AC : if(type==SINGLE_SLIP) { + case STATE_AC : if(singleSlipStraightEqual()) { setTurnoutState(turnoutStates.get(STATE_AD)); currentState = STATE_AD; } else { @@ -711,7 +707,7 @@ layoutEditor.third(A,C))); g2.draw(new Line2D.Double(C, layoutEditor.third(C,A))); - + if(state==STATE_AC || state==STATE_BD || state==UNKNOWN){ g2.draw(new Line2D.Double(A, layoutEditor.third(A,D))); @@ -774,29 +770,33 @@ layoutEditor.third(D,B))); } } else { + g2.draw(new Line2D.Double(A, + layoutEditor.third(A,D))); + + g2.draw(new Line2D.Double(D, + layoutEditor.third(D,A))); if (state==LayoutSlip.STATE_AD){ g2.setColor(Color.red); g2.draw(new Line2D.Double(A,D)); - } else if (state!=LayoutSlip.UNKNOWN) { - - g2.draw(new Line2D.Double(A, - layoutEditor.third(A,D))); - + } else if (state==LayoutSlip.STATE_AC){ + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,D))); g2.draw(new Line2D.Double(D, - layoutEditor.third(D,A))); + layoutEditor.third(D,B))); + g2.setColor(Color.red); - // draw AC segment g2.draw(new Line2D.Double(A,C)); - //Might want to do something neat here depending upon the state/type of the blocks connected - // draw BD segment + + } else if (state==LayoutSlip.STATE_BD){ + g2.setColor(Color.red); g2.draw(new Line2D.Double(B,D)); + } else { - g2.draw(new Line2D.Double(A, - layoutEditor.third(A,D))); - + g2.draw(new Line2D.Double(B, + layoutEditor.third(B,D))); g2.draw(new Line2D.Double(D, - layoutEditor.third(D,A))); + layoutEditor.third(D,B))); } } @@ -826,15 +826,9 @@ int turnAState; int turnBState; switch(testState) { - case STATE_AC : if(type==SINGLE_SLIP) { - turnAState = turnoutStates.get(STATE_AD).getTestTurnoutAState(); - turnBState = turnoutStates.get(STATE_AD).getTestTurnoutBState(); - testState = STATE_AD; - } else { - turnAState = turnoutStates.get(STATE_BD).getTestTurnoutAState(); - turnBState = turnoutStates.get(STATE_BD).getTestTurnoutBState(); - testState = STATE_BD; - } + case STATE_AC : turnAState = turnoutStates.get(STATE_BD).getTestTurnoutAState(); + turnBState = turnoutStates.get(STATE_BD).getTestTurnoutBState(); + testState = STATE_BD; break; case STATE_BD : turnAState = turnoutStates.get(STATE_AD).getTestTurnoutAState(); @@ -863,10 +857,12 @@ break; } - if(getTurnout()!=null) + ((Turnout)turnoutAComboBox.getSelectedBean()).setCommandedState(turnAState); + ((Turnout)turnoutBComboBox.getSelectedBean()).setCommandedState(turnBState); + /*if(getTurnout()!=null) getTurnout().setCommandedState(turnAState); if(getTurnoutB()!=null) - getTurnoutB().setCommandedState(turnBState); + getTurnoutB().setCommandedState(turnBState);*/ if(testPanel!=null) testPanel.repaint(); } @@ -995,6 +991,12 @@ return active; } + public boolean singleSlipStraightEqual(){ + if(type!=SINGLE_SLIP) + return false; + return turnoutStates.get(STATE_AC).equals(turnoutStates.get(STATE_BD)); + } + Hashtable <Integer, TurnoutState> turnoutStates = new Hashtable<Integer, TurnoutState>(4); public int getTurnoutState(Turnout turn, int state){ @@ -1112,6 +1114,14 @@ turnoutB=Turnout.THROWN; } } + + boolean equals(TurnoutState ts){ + if(ts.getTurnoutAState()!=this.getTurnoutAState()) + return false; + if(ts.getTurnoutBState()!=this.getTurnoutBState()) + return false; + return true; + } } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-05-15 15:24:24 UTC (rev 20475) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2012-05-16 11:54:43 UTC (rev 20476) @@ -96,7 +96,9 @@ public static final int WYE_TURNOUT = 3; public static final int DOUBLE_XOVER = 4; public static final int RH_XOVER = 5; - public static final int LH_XOVER = 6; + public static final int LH_XOVER = 6; + public final static int SINGLE_SLIP = 7; //used in LayoutSlip which extends this class + public final static int DOUBLE_SLIP = 8; //used in LayoutSlip which extends this class // defined constants - link types public static final int NO_LINK = 0; public static final int FIRST_3_WAY = 1; // this turnout is the first turnout of a 3-way This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-05-28 12:11:57
|
Revision: 20589 http://jmri.svn.sourceforge.net/jmri/?rev=20589&view=rev Author: kevin-dickerson Date: 2012-05-28 12:11:45 +0000 (Mon, 28 May 2012) Log Message: ----------- Allow the default colour of blocks/track for occupied and alternative. Add in the option to automatically create and assign layoutblocks when adding tracks and turnouts. This can aid in providing continuous layoutblock connectivity which can be used by the signalmast logic and entry/exit work. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2012-05-28 07:37:08 UTC (rev 20588) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2012-05-28 12:11:45 UTC (rev 20589) @@ -84,7 +84,24 @@ register(block); return block; } - + + public LayoutBlock createNewLayoutBlock(){ + boolean found = true; + while (found) { + String sName = "ILB"+blkNum; + LayoutBlock block = getBySystemName(sName); + if (block==null){ + found = false; + String uName = "AUTOBLK:"+blkNum; + block = new LayoutBlock(sName,uName); + register(block); + return block; + } + blkNum++; + } + return null; + } + /** * Remove an existing LayoutBlock. */ Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-05-28 07:37:08 UTC (rev 20588) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-05-28 12:11:45 UTC (rev 20589) @@ -196,6 +196,7 @@ private JCheckBoxMenuItem animationItem = null; private JCheckBoxMenuItem showHelpItem = null; private JCheckBoxMenuItem showGridItem = null; + private JCheckBoxMenuItem autoAssignBlocksItem = null; private JMenu scrollMenu = null; private JRadioButtonMenuItem scrollBoth = null; private JRadioButtonMenuItem scrollNone = null; @@ -213,17 +214,26 @@ private JCheckBoxMenuItem skipTurnoutItem = null; //private ButtonGroup bkColorButtonGroup = null; private ButtonGroup trackColorButtonGroup = null; + private ButtonGroup trackOccupiedColorButtonGroup = null; + private ButtonGroup trackAlternativeColorButtonGroup = null; private ButtonGroup textColorButtonGroup = null; private ButtonGroup backgroundColorButtonGroup = null; private Color[] trackColors = new Color[13]; + private Color[] trackOccupiedColors = new Color[13]; + private Color[] trackAlternativeColors = new Color[13]; private Color[] textColors = new Color[13]; private Color[] backgroundColors = new Color[13]; private JRadioButtonMenuItem[] trackColorMenuItems = new JRadioButtonMenuItem[13]; + private JRadioButtonMenuItem[] trackOccupiedColorMenuItems = new JRadioButtonMenuItem[13]; + private JRadioButtonMenuItem[] trackAlternativeColorMenuItems = new JRadioButtonMenuItem[13]; private JRadioButtonMenuItem[] backgroundColorMenuItems = new JRadioButtonMenuItem[13]; private JRadioButtonMenuItem[] textColorMenuItems = new JRadioButtonMenuItem[13]; private int trackColorCount = 0; + private int trackOccupiedColorCount = 0; + private int trackAlternativeColorCount = 0; private int textColorCount = 0; private int backgroundColorCount = 0; + private boolean autoAssignBlocks = false; // Selected point information //private final static int TURNOUT = 1; // possible object types @@ -290,6 +300,8 @@ private float mainlineTrackWidth = 4.0F; private float sideTrackWidth = 2.0F; private Color defaultTrackColor = Color.black; + private Color defaultOccupiedTrackColor = Color.black; + private Color defaultAlternativeTrackColor = Color.black; private Color defaultBackgroundColor = Color.lightGray; private Color defaultTextColor = Color.black; private String layoutName = ""; @@ -1069,7 +1081,7 @@ repaint(); } }); - + JMenu backgroundColorMenu = new JMenu(rb.getString("SetBackgroundColor")); backgroundColorButtonGroup = new ButtonGroup(); addBackgroundColorMenuEntry(backgroundColorMenu, rb.getString("Black"), Color.black); @@ -1136,6 +1148,8 @@ } }); // track color item + JMenu trkColourMenu = new JMenu(rb.getString("DefaultTrackColor")); + optionMenu.add(trkColourMenu); JMenu trackColorMenu = new JMenu(rb.getString("DefaultTrackColor")); trackColorButtonGroup = new ButtonGroup(); addTrackColorMenuEntry(trackColorMenu, rb.getString("Black"), Color.black); @@ -1151,7 +1165,41 @@ addTrackColorMenuEntry(trackColorMenu, rb.getString("Blue"),Color.blue); addTrackColorMenuEntry(trackColorMenu, rb.getString("Magenta"),Color.magenta); addTrackColorMenuEntry(trackColorMenu, rb.getString("Cyan"),Color.cyan); - optionMenu.add(trackColorMenu); + trkColourMenu .add(trackColorMenu); + + JMenu trackOccupiedColorMenu = new JMenu(rb.getString("DefaultOccupiedTrackColor")); + trackOccupiedColorButtonGroup = new ButtonGroup(); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Black"), Color.black); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("DarkGray"),Color.darkGray); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Gray"),Color.gray); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("LightGray"),Color.lightGray); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("White"),Color.white); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Red"),Color.red); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Pink"),Color.pink); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Orange"),Color.orange); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Yellow"),Color.yellow); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Green"),Color.green); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Blue"),Color.blue); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Magenta"),Color.magenta); + addTrackOccupiedColorMenuEntry(trackOccupiedColorMenu, rb.getString("Cyan"),Color.cyan); + trkColourMenu .add(trackOccupiedColorMenu); + + JMenu trackAlternativeColorMenu = new JMenu(rb.getString("DefaultAlternativeTrackColor")); + trackAlternativeColorButtonGroup = new ButtonGroup(); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Black"), Color.black); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("DarkGray"),Color.darkGray); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Gray"),Color.gray); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("LightGray"),Color.lightGray); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("White"),Color.white); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Red"),Color.red); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Pink"),Color.pink); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Orange"),Color.orange); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Yellow"),Color.yellow); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Green"),Color.green); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Blue"),Color.blue); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Magenta"),Color.magenta); + addTrackAlternativeColorMenuEntry(trackAlternativeColorMenu, rb.getString("Cyan"),Color.cyan); + trkColourMenu .add(trackAlternativeColorMenu); JMenu textColorMenu = new JMenu(rb.getString("DefaultTextColor")); textColorButtonGroup = new ButtonGroup(); @@ -1170,6 +1218,16 @@ addTextColorMenuEntry(textColorMenu, rb.getString("Cyan"),Color.cyan); optionMenu.add(textColorMenu); + // show grid item + autoAssignBlocksItem = new JCheckBoxMenuItem(rb.getString("AutoAssignBlock")); + optionMenu.add(autoAssignBlocksItem); + autoAssignBlocksItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + autoAssignBlocks = autoAssignBlocksItem.isSelected(); + } + }); + autoAssignBlocksItem.setSelected(autoAssignBlocks); + return optionMenu; } @@ -2138,6 +2196,52 @@ trackColorCount ++; } + void addTrackOccupiedColorMenuEntry(JMenu menu, final String name, final Color color) { + ActionListener a = new ActionListener() { + //final String desiredName = name; + final Color desiredColor = color; + public void actionPerformed(ActionEvent e) { + if (defaultOccupiedTrackColor!=desiredColor) { + defaultOccupiedTrackColor = desiredColor; + setDirty(true); + repaint(); + } + } + }; + JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); + r.addActionListener(a); + trackOccupiedColorButtonGroup.add(r); + if (defaultOccupiedTrackColor == color) r.setSelected(true); + else r.setSelected(false); + menu.add(r); + trackOccupiedColorMenuItems[trackOccupiedColorCount] = r; + trackOccupiedColors[trackOccupiedColorCount] = color; + trackOccupiedColorCount ++; + } + + void addTrackAlternativeColorMenuEntry(JMenu menu, final String name, final Color color) { + ActionListener a = new ActionListener() { + //final String desiredName = name; + final Color desiredColor = color; + public void actionPerformed(ActionEvent e) { + if (defaultAlternativeTrackColor!=desiredColor) { + defaultAlternativeTrackColor = desiredColor; + setDirty(true); + repaint(); + } + } + }; + JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); + r.addActionListener(a); + trackAlternativeColorButtonGroup.add(r); + if (defaultAlternativeTrackColor == color) r.setSelected(true); + else r.setSelected(false); + menu.add(r); + trackAlternativeColorMenuItems[trackAlternativeColorCount] = r; + trackAlternativeColors[trackAlternativeColorCount] = color; + trackAlternativeColorCount ++; + } + protected void setOptionMenuTrackColor() { for (int i = 0;i<trackColorCount;i++) { if (trackColors[i] == defaultTrackColor) @@ -2145,6 +2249,18 @@ else trackColorMenuItems[i].setSelected(false); } + for (int i = 0;i<trackOccupiedColorCount;i++) { + if (trackOccupiedColors[i] == defaultOccupiedTrackColor) + trackOccupiedColorMenuItems[i].setSelected(true); + else + trackOccupiedColorMenuItems[i].setSelected(false); + } + for (int i = 0;i<trackAlternativeColorCount;i++) { + if (trackAlternativeColors[i] == defaultAlternativeTrackColor) + trackAlternativeColorMenuItems[i].setSelected(true); + else + trackAlternativeColorMenuItems[i].setSelected(false); + } } void addTextColorMenuEntry(JMenu menu, final String name, final Color color) { @@ -4813,32 +4929,47 @@ * a system name is automatically created by LayoutBlockManager if needed. */ public LayoutBlock provideLayoutBlock(String s) { - if (s.length() < 1) { - // nothing entered - return null; - } - // check if this Layout Block already exists - LayoutBlock blk = InstanceManager.layoutBlockManagerInstance().getByUserName(s); - if (blk == null) { - blk = InstanceManager.layoutBlockManagerInstance().createNewLayoutBlock(null,s); - if (blk == null) { - log.error("Failure to create LayoutBlock '"+s+"'."); - return null; - } - else { - // initialize the new block - blk.initializeLayoutBlock(); - blk.setBlockTrackColor(defaultTrackColor); - blk.setBlockOccupiedColor(defaultTrackColor); - } - } + LayoutBlock blk; + if (s.length() < 1) { + if(!autoAssignBlocks){ + // nothing entered + return null; + } else { + blk = InstanceManager.layoutBlockManagerInstance().createNewLayoutBlock(); + if (blk == null) { + log.error("Unable to create a layout block"); + } + // initialize the new block + blk.initializeLayoutBlock(); + blk.setBlockTrackColor(defaultTrackColor); + blk.setBlockOccupiedColor(defaultOccupiedTrackColor); + blk.setBlockExtraColor(defaultAlternativeTrackColor); + } + } else { + // check if this Layout Block already exists + blk = InstanceManager.layoutBlockManagerInstance().getByUserName(s); + if (blk == null) { + blk = InstanceManager.layoutBlockManagerInstance().createNewLayoutBlock(null,s); + if (blk == null) { + log.error("Failure to create LayoutBlock '"+s+"'."); + return null; + } + else { + // initialize the new block + blk.initializeLayoutBlock(); + blk.setBlockTrackColor(defaultTrackColor); + blk.setBlockOccupiedColor(defaultOccupiedTrackColor); + blk.setBlockExtraColor(defaultAlternativeTrackColor); + } + } + } // set both new and previously existing block blk.addLayoutEditor(this); setDirty(true); blk.incrementUse(); return blk; } - + /** * Validates that the supplied occupancy sensor name corresponds to an existing sensor * and is unique among all blocks. If valid, returns true and sets the block sensor @@ -5777,6 +5908,8 @@ public double getXScale() {return xScale;} public double getYScale() {return yScale;} public String getDefaultTrackColor() {return colorToString(defaultTrackColor);} + public String getDefaultOccupiedTrackColor() {return colorToString(defaultOccupiedTrackColor);} + public String getDefaultAlternativeTrackColor() {return colorToString(defaultAlternativeTrackColor);} public String getDefaultTextColor() {return colorToString(defaultTextColor);} public String getLayoutName() {return layoutName;} public boolean getShowHelpBar() {return showHelpBar;} @@ -5787,6 +5920,7 @@ public boolean getTurnoutCircles() {return turnoutCirclesWithoutEditMode;} public boolean getTooltipsNotEdit() {return tooltipsWithoutEditMode;} public boolean getTooltipsInEdit() {return tooltipsInEditMode;} + public boolean getAutoBlockAssignment() { return autoAssignBlocks;} public void setLayoutDimensions(int windowW, int windowH, int x, int y, int panelW, int panelH) { upperLeftX = x; upperLeftY = y; @@ -5805,6 +5939,14 @@ defaultTrackColor = stringToColor(color); setOptionMenuTrackColor(); } + public void setDefaultOccupiedTrackColor(String color) { + defaultOccupiedTrackColor = stringToColor(color); + setOptionMenuTrackColor(); + } + public void setDefaultAlternativeTrackColor(String color) { + defaultAlternativeTrackColor = stringToColor(color); + setOptionMenuTrackColor(); + } public void setDefaultTextColor(String color) { defaultTextColor = stringToColor(color); setOptionMenuTextColor(); @@ -5852,6 +5994,12 @@ } } + public void setAutoBlockAssignment(boolean boo){ + if(autoAssignBlocks != boo){ + autoAssignBlocks = boo; + autoAssignBlocksItem.setSelected(autoAssignBlocks); + } + } public void setTooltipsNotEdit(boolean state) { if (tooltipsWithoutEditMode != state) { tooltipsWithoutEditMode = state; Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-05-28 07:37:08 UTC (rev 20588) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-05-28 12:11:45 UTC (rev 20589) @@ -306,6 +306,7 @@ AllowTurnoutAnimation = Allow Turnout Animation ShowEditHelp = Show Help Bar in Edit Mode ShowEditGrid = Show Grid in Edit Mode +AutoAssignBlock = Automatically Assign Blocks to Track SnapToGridOnAdd = Snap to Grid when Adding SnapToGridOnMove = Snap to Grid when Moving ScrollBarsSubMenu = Show scrollbars @@ -331,6 +332,8 @@ SetLocation = Save Location and Size AddFastClock = Add Fast Clock DefaultTrackColor = Set Default Track Color +DefaultOccupiedTrackColor = Set Default Occupied Track Color +DefaultAlternativeTrackColor = Set Default Alternative Track Color DefaultTextColor = Set Default Text Color # items specific to Layout Editor tools Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java 2012-05-28 07:37:08 UTC (rev 20588) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java 2012-05-28 12:11:45 UTC (rev 20589) @@ -69,6 +69,8 @@ panel.setAttribute("yscale", Float.toString((float)p.getYScale())); panel.setAttribute("sidetrackwidth", ""+p.getSideTrackWidth()); panel.setAttribute("defaulttrackcolor",p.getDefaultTrackColor()); + panel.setAttribute("defaultoccupiedtrackcolor",p.getDefaultOccupiedTrackColor()); + panel.setAttribute("defaultalternativetrackcolor",p.getDefaultAlternativeTrackColor()); panel.setAttribute("defaulttextcolor",p.getDefaultTextColor()); panel.setAttribute("turnoutbx", Float.toString((float)p.getTurnoutBX())); panel.setAttribute("turnoutcx", Float.toString((float)p.getTurnoutCX())); @@ -76,6 +78,7 @@ panel.setAttribute("xoverlong", Float.toString((float)p.getXOverLong())); panel.setAttribute("xoverhwid", Float.toString((float)p.getXOverHWid())); panel.setAttribute("xovershort", Float.toString((float)p.getXOverShort())); + panel.setAttribute("autoblkgenerate", ""+(p.getAutoBlockAssignment()?"yes":"no")); if (p.getBackgroundColor()!=null){ panel.setAttribute("redBackground", ""+p.getBackgroundColor().getRed()); panel.setAttribute("greenBackground", ""+p.getBackgroundColor().getGreen()); @@ -241,6 +244,7 @@ if((a = element.getAttribute("panelwidth")) != null) { panelWidth = a.getIntValue(); } + mainlinetrackwidth = element.getAttribute("mainlinetrackwidth").getIntValue(); sidetrackwidth = element.getAttribute("sidetrackwidth").getIntValue(); } catch ( org.jdom.DataConversionException e) { @@ -417,16 +421,29 @@ if ((a = element.getAttribute("tooltipsnotedit"))!=null && a.getValue().equals("yes")) value = true; panel.setTooltipsNotEdit(value); + + value = false; + if((a = element.getAttribute("autoblkgenerate")) != null && a.getValue().equals("yes")) { + value = true; + } + panel.setAutoBlockAssignment(value); value = true; if ((a = element.getAttribute("tooltipsinedit"))!=null && a.getValue().equals("no")) value = false; panel.setTooltipsInEdit(value); - // set default track color - if ((a = element.getAttribute("defaultTrackColor"))!=null) { + if ((a = element.getAttribute("defaulttrackcolor"))!=null) { panel.setDefaultTrackColor(a.getValue()); } + // set default track color + if ((a = element.getAttribute("defaultoccupiedtrackcolor"))!=null) { + panel.setDefaultOccupiedTrackColor(a.getValue()); + } + // set default track color + if ((a = element.getAttribute("defaultalternativetrackcolor"))!=null) { + panel.setDefaultAlternativeTrackColor(a.getValue()); + } try { int red = element.getAttribute("redBackground").getIntValue(); int blue = element.getAttribute("blueBackground").getIntValue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-06-29 13:25:41
|
Revision: 20709 http://jmri.svn.sourceforge.net/jmri/?rev=20709&view=rev Author: kevin-dickerson Date: 2012-06-29 13:25:31 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Initialise the layout block routing after the layout blocks and layout block paths have been initialised, otherwise some routes do not get added into the block routing correctly. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-06-29 12:09:34 UTC (rev 20708) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-06-29 13:25:31 UTC (rev 20709) @@ -154,13 +154,16 @@ block.setNamedSensor(occupancyNamedSensor); } } - if(InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled()){ - setBlockMetric(); - for (int i = 0; i<block.getPaths().size(); i++){ - addAdjacency(block.getPaths().get(i)); - } - } } + + protected void initializeLayoutBlockRouting(){ + if(!InstanceManager.layoutBlockManagerInstance().isAdvancedRoutingEnabled()) + return; + setBlockMetric(); + for (int i = 0; i<block.getPaths().size(); i++){ + addAdjacency(block.getPaths().get(i)); + } + } /** * Accessor methods Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2012-06-29 12:09:34 UTC (rev 20708) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2012-06-29 13:25:31 UTC (rev 20709) @@ -235,7 +235,11 @@ // LayoutEditorTests layoutEditorTests = new LayoutEditorTests(); // layoutEditorTests.runClinicTests(); // layoutEditorTests.runTestPanel3Tests(); + initialized = true; + initializeLayoutBlockRouting(); } + + private boolean initialized = false; private int badBeanErrors = 0; public void addBadBeanError() {badBeanErrors ++;} @@ -2083,12 +2087,22 @@ if (boo==enableAdvancedRouting) return; enableAdvancedRouting = boo; - if (boo){ - initializeLayoutBlockPaths(); + if (boo && initialized){ + initializeLayoutBlockRouting(); } firePropertyChange("advancedRoutingEnabled", !enableAdvancedRouting, enableAdvancedRouting); } + private void initializeLayoutBlockRouting() { + if(!enableAdvancedRouting || !initialized) + return; + // cycle through all LayoutBlocks, completing initialization of the layout block routing + java.util.Enumeration<jmri.NamedBean> en = _tsys.elements(); + while (en.hasMoreElements()) { + ((LayoutBlock)en.nextElement()).initializeLayoutBlockRouting(); + } + } + public LayoutBlockConnectivityTools getLayoutBlockConnectivityTools(){ return lbct; } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-06-29 12:09:34 UTC (rev 20708) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-06-29 13:25:31 UTC (rev 20709) @@ -5061,6 +5061,7 @@ } // initialize the new block blk.initializeLayoutBlock(); + blk.initializeLayoutBlockRouting(); blk.setBlockTrackColor(defaultTrackColor); blk.setBlockOccupiedColor(defaultOccupiedTrackColor); blk.setBlockExtraColor(defaultAlternativeTrackColor); @@ -5077,6 +5078,7 @@ else { // initialize the new block blk.initializeLayoutBlock(); + blk.initializeLayoutBlockRouting(); blk.setBlockTrackColor(defaultTrackColor); blk.setBlockOccupiedColor(defaultOccupiedTrackColor); blk.setBlockExtraColor(defaultAlternativeTrackColor); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-07-12 08:04:50
|
Revision: 20784 http://jmri.svn.sourceforge.net/jmri/?rev=20784&view=rev Author: kevin-dickerson Date: 2012-07-12 08:04:39 +0000 (Thu, 12 Jul 2012) Log Message: ----------- Pre-Populate the layout title field with the existing name of the layout, rather than the user having to retype it in if they just need to amend it. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-07-12 07:42:37 UTC (rev 20783) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-07-12 08:04:39 UTC (rev 20784) @@ -1053,14 +1053,19 @@ antialiasingOnItem.setSelected(antialiasingOn); // title item optionMenu.addSeparator(); - JMenuItem titleItem = new JMenuItem(rb.getString("NewTitle")+"..."); + JMenuItem titleItem = new JMenuItem(rb.getString("EditTitle")+"..."); optionMenu.add(titleItem); titleItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { // prompt for name - String newName = JOptionPane.showInputDialog(this, - rb.getString("EnterTitle")+":"); + String newName = (String)JOptionPane.showInputDialog(getTargetFrame(), + rb.getString("EnterTitle")+":", rb.getString("EditTitleMessageTitle"), + JOptionPane.PLAIN_MESSAGE, null, null,layoutName); if (newName==null) return; // cancelled + if(newName.equals(layoutName)){ + return; + } + if (newName==null) return; // cancelled if (jmri.jmrit.display.PanelMenu.instance().isPanelNameUsed(newName)){ JOptionPane.showMessageDialog(null, rb.getString("CanNotRename"), rb.getString("PanelExist"), JOptionPane.ERROR_MESSAGE); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-07-12 07:42:37 UTC (rev 20783) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-07-12 08:04:39 UTC (rev 20784) @@ -323,11 +323,13 @@ ShowBlockNames = Show Block Names in Edit Mode AntialiasingOn = Enable antialiasing (Smoother lines) NewTitle = New Title +EditTitle = Edit Title AddBackground = Add Background Image SetBackgroundColor = Set Background Color AddTurntable = Add Turntable AddReporter = Add Reporter Label EnterTitle = Enter New Title +EditTitleMessageTitle = Edit Layout Name SetTrackWidth = Set Track Width SetLocation = Save Location and Size AddFastClock = Add Fast Clock This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2012-07-27 11:43:26
|
Revision: 20891 http://jmri.svn.sourceforge.net/jmri/?rev=20891&view=rev Author: kevin-dickerson Date: 2012-07-27 11:43:16 +0000 (Fri, 27 Jul 2012) Log Message: ----------- Add a prompt to the user to link a reporter that is associated with a sensor to the block. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-07-27 11:31:13 UTC (rev 20890) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2012-07-27 11:43:16 UTC (rev 20891) @@ -955,6 +955,15 @@ if(!sensorDebounceActiveField.getText().trim().equals("")) getOccupancySensor().setSensorDebounceGoingActiveTimer(Long.parseLong(sensorDebounceActiveField.getText().trim())); } + if(getOccupancySensor().getReporter()!=null && block!=null){ + String msg = java.text.MessageFormat.format(rb + .getString("BlockAssignReporter"), new Object[] { getOccupancySensor().getDisplayName(), getOccupancySensor().getReporter().getDisplayName() }); + if(JOptionPane.showConfirmDialog(editLayoutBlockFrame, + msg,rb.getString("BlockAssignReporterTitle"), + JOptionPane.YES_NO_OPTION)==0) + block.setReporter(getOccupancySensor().getReporter()); + + } } // check if occupied sense changed int k = senseBox.getSelectedIndex(); @@ -2015,6 +2024,7 @@ * seperately. */ //Was public + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DLS_DEAD_LOCAL_STORE") void addThroughPath(Block srcBlock, Block dstBlock, LayoutEditor panel){ //Reset connectivity flag. layoutConnectivity = true; Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-07-27 11:31:13 UTC (rev 20890) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2012-07-27 11:43:16 UTC (rev 20891) @@ -191,6 +191,8 @@ MoveSelection = Move Selection MoveSelectionHint = Click here to move items within the selection rectangle. UndoTranslateSelection = Undo Translate Selection +BlockAssignReporterTitle = Assign Reporter to Block +BlockAssignReporter = Sensor {0} has reporter {1} associated with it, do you want to use the reporter with this block? # help area items Help1 = To add an item, check item type, enter needed data, then, with shift down, click on panel - except Track Segment. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mst...@us...> - 2012-09-12 16:18:22
|
Revision: 21165 http://jmri.svn.sourceforge.net/jmri/?rev=21165&view=rev Author: mstevetodd Date: 2012-09-12 16:18:11 +0000 (Wed, 12 Sep 2012) Log Message: ----------- set default background color in menu, improve color comparisons Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-09-12 14:43:08 UTC (rev 21164) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2012-09-12 16:18:11 UTC (rev 21165) @@ -2217,7 +2217,7 @@ //final String desiredName = name; final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (defaultBackgroundColor!=desiredColor) { + if (!defaultBackgroundColor.equals(desiredColor)) { defaultBackgroundColor = desiredColor; setBackgroundColor(desiredColor); setDirty(true); @@ -2228,7 +2228,7 @@ JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); backgroundColorButtonGroup.add(r); - if (defaultBackgroundColor == color) r.setSelected(true); + if (defaultBackgroundColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); backgroundColorMenuItems[backgroundColorCount] = r; @@ -2241,7 +2241,7 @@ //final String desiredName = name; final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (defaultTrackColor!=desiredColor) { + if (!defaultTrackColor.equals(desiredColor)) { defaultTrackColor = desiredColor; setDirty(true); repaint(); @@ -2251,7 +2251,7 @@ JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); trackColorButtonGroup.add(r); - if (defaultTrackColor == color) r.setSelected(true); + if (defaultTrackColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); trackColorMenuItems[trackColorCount] = r; @@ -2264,7 +2264,7 @@ //final String desiredName = name; final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (defaultOccupiedTrackColor!=desiredColor) { + if (!defaultOccupiedTrackColor.equals(desiredColor)) { defaultOccupiedTrackColor = desiredColor; setDirty(true); repaint(); @@ -2274,7 +2274,7 @@ JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); trackOccupiedColorButtonGroup.add(r); - if (defaultOccupiedTrackColor == color) r.setSelected(true); + if (defaultOccupiedTrackColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); trackOccupiedColorMenuItems[trackOccupiedColorCount] = r; @@ -2287,7 +2287,7 @@ //final String desiredName = name; final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (defaultAlternativeTrackColor!=desiredColor) { + if (!defaultAlternativeTrackColor.equals(desiredColor)) { defaultAlternativeTrackColor = desiredColor; setDirty(true); repaint(); @@ -2297,7 +2297,7 @@ JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); trackAlternativeColorButtonGroup.add(r); - if (defaultAlternativeTrackColor == color) r.setSelected(true); + if (defaultAlternativeTrackColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); trackAlternativeColorMenuItems[trackAlternativeColorCount] = r; @@ -2307,19 +2307,19 @@ protected void setOptionMenuTrackColor() { for (int i = 0;i<trackColorCount;i++) { - if (trackColors[i] == defaultTrackColor) + if (trackColors[i].equals(defaultTrackColor)) trackColorMenuItems[i].setSelected(true); else trackColorMenuItems[i].setSelected(false); } for (int i = 0;i<trackOccupiedColorCount;i++) { - if (trackOccupiedColors[i] == defaultOccupiedTrackColor) + if (trackOccupiedColors[i].equals(defaultOccupiedTrackColor)) trackOccupiedColorMenuItems[i].setSelected(true); else trackOccupiedColorMenuItems[i].setSelected(false); } for (int i = 0;i<trackAlternativeColorCount;i++) { - if (trackAlternativeColors[i] == defaultAlternativeTrackColor) + if (trackAlternativeColors[i].equals(defaultAlternativeTrackColor)) trackAlternativeColorMenuItems[i].setSelected(true); else trackAlternativeColorMenuItems[i].setSelected(false); @@ -2331,7 +2331,7 @@ //final String desiredName = name; final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (defaultTextColor!=desiredColor) { + if (!defaultTextColor.equals(desiredColor)) { defaultTextColor = desiredColor; setDirty(true); repaint(); @@ -2341,7 +2341,7 @@ JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); textColorButtonGroup.add(r); - if (defaultTextColor == color) r.setSelected(true); + if (defaultTextColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); textColorMenuItems[textColorCount] = r; @@ -2353,17 +2353,15 @@ ActionListener a = new ActionListener() { final Color desiredColor = color; public void actionPerformed(ActionEvent e) { - if (turnoutCircleColor!=desiredColor) { - turnoutCircleColor = desiredColor; - setDirty(true); - repaint(); - } + turnoutCircleColor = desiredColor; + setDirty(true); + repaint(); } }; JRadioButtonMenuItem r = new JRadioButtonMenuItem(name); r.addActionListener(a); turnoutCircleColorButtonGroup.add(r); - if (turnoutCircleColor == color) r.setSelected(true); + if (turnoutCircleColor.equals(color)) r.setSelected(true); else r.setSelected(false); menu.add(r); turnoutCircleColorMenuItems[turnoutCircleColorCount] = r; @@ -2395,8 +2393,10 @@ protected void setOptionMenuTurnoutCircleColor() { for (int i = 0;i<turnoutCircleColorCount;i++) { - if (turnoutCircleColors[i] == turnoutCircleColor) + if (turnoutCircleColors[i] == null && turnoutCircleColor == null) turnoutCircleColorMenuItems[i].setSelected(true); + else if (turnoutCircleColors[i] != null && turnoutCircleColors[i].equals(turnoutCircleColor)) + turnoutCircleColorMenuItems[i].setSelected(true); else turnoutCircleColorMenuItems[i].setSelected(false); } @@ -2414,13 +2414,22 @@ protected void setOptionMenuTextColor() { for (int i = 0;i<textColorCount;i++) { - if (textColors[i] == defaultTextColor) + if (textColors[i].equals(defaultTextColor)) textColorMenuItems[i].setSelected(true); else textColorMenuItems[i].setSelected(false); } } + protected void setOptionMenuBackgroundColor() { + for (int i = 0;i<backgroundColorCount;i++) { + if (backgroundColors[i].equals(defaultBackgroundColor)) + backgroundColorMenuItems[i].setSelected(true); + else + backgroundColorMenuItems[i].setSelected(false); + } + } + public void setScroll(int state) { if (isEditable()) { //In edit mode the scroll bars are always displayed, however we will want to set the scroll for when we exit edit mode @@ -6115,6 +6124,10 @@ defaultTextColor = stringToColor(color); setOptionMenuTextColor(); } + public void setDefaultBackgroundColor(String color) { + defaultBackgroundColor = stringToColor(color); + setOptionMenuBackgroundColor(); + } public void setXScale(double xSc) {xScale = xSc;} public void setYScale(double ySc) {yScale = ySc;} public void setLayoutName(String name) {layoutName = name;} @@ -6270,20 +6283,20 @@ // utility routines public static String colorToString(Color color) { - if(color == Color.black) return "black"; - else if (color == Color.darkGray) return "darkGray"; - else if (color == Color.gray) return "gray"; - else if (color == Color.lightGray) return "lightGray"; - else if (color == Color.white) return "white"; - else if (color == Color.red) return "red"; - else if (color == Color.pink) return "pink"; - else if (color == Color.orange) return "orange"; - else if (color == Color.yellow) return "yellow"; - else if (color == Color.green) return "green"; - else if (color == Color.blue) return "blue"; - else if (color == Color.magenta) return "magenta"; - else if (color == Color.cyan) return "cyan"; - else if (color == null) return "track"; + if (color == null) return "track"; + else if (color.equals(Color.black)) return "black"; + else if (color.equals(Color.darkGray)) return "darkGray"; + else if (color.equals(Color.gray)) return "gray"; + else if (color.equals(Color.lightGray)) return "lightGray"; + else if (color.equals(Color.white)) return "white"; + else if (color.equals(Color.red)) return "red"; + else if (color.equals(Color.pink)) return "pink"; + else if (color.equals(Color.orange)) return "orange"; + else if (color.equals(Color.yellow)) return "yellow"; + else if (color.equals(Color.green)) return "green"; + else if (color.equals(Color.blue)) return "blue"; + else if (color.equals(Color.magenta)) return "magenta"; + else if (color.equals(Color.cyan)) return "cyan"; log.error ("unknown color sent to colorToString"); return "black"; } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java 2012-09-12 14:43:08 UTC (rev 21164) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutEditorXml.java 2012-09-12 16:18:11 UTC (rev 21165) @@ -468,6 +468,7 @@ int red = element.getAttribute("redBackground").getIntValue(); int blue = element.getAttribute("blueBackground").getIntValue(); int green = element.getAttribute("greenBackground").getIntValue(); + panel.setDefaultBackgroundColor(LayoutEditor.colorToString(new Color(red, green, blue))); panel.setBackgroundColor(new Color(red, green, blue)); } catch ( org.jdom.DataConversionException e) { log.warn("Could not parse color attributes!"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2013-02-28 07:17:48
|
Revision: 22841 http://sourceforge.net/p/jmri/code/22841 Author: kevin-dickerson Date: 2013-02-28 07:17:42 +0000 (Thu, 28 Feb 2013) Log Message: ----------- Fix NP_NULL_ON_SOME_PATH and NP_NULL_PARAM_DEREF errors as found by findbugs Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2013-02-28 03:51:26 UTC (rev 22840) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2013-02-28 07:17:42 UTC (rev 22841) @@ -526,6 +526,7 @@ public void updatePathsUsingPanel(LayoutEditor panel) { if (panel==null) { log.error("Null panel in call to updatePathsUsingPanel"); + return; } ArrayList<LayoutConnectivity> c = panel.auxTools.getConnectivityList(_instance); updateBlockPaths(c, panel); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2013-02-28 03:51:26 UTC (rev 22840) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlockManager.java 2013-02-28 07:17:42 UTC (rev 22841) @@ -207,8 +207,10 @@ while (iter.hasNext()) { String sName = iter.next(); if (sName==null) log.error("System name null during 1st initialization of LayoutBlocks"); - LayoutBlock b = getBySystemName(sName); - b.initializeLayoutBlock(); + else { + LayoutBlock b = getBySystemName(sName); + b.initializeLayoutBlock(); + } } // cycle through all LayoutBlocks, updating Paths of associated jmri.Blocks badBeanErrors = 0; @@ -216,10 +218,12 @@ while (iter.hasNext()) { String sName = iter.next(); if (sName==null) log.error("System name null during 2nd initialization of LayoutBlocks"); - log.debug("LayoutBlock initialization - system name = "+sName); - LayoutBlock b = getBySystemName(sName); - b.updatePaths(); - if (b.getBlock().getValue()!=null) b.getBlock().setValue(null); + else { + log.debug("LayoutBlock initialization - system name = "+sName); + LayoutBlock b = getBySystemName(sName); + b.updatePaths(); + if (b.getBlock().getValue()!=null) b.getBlock().setValue(null); + } } if (badBeanErrors>0) { JOptionPane.showMessageDialog(null,""+badBeanErrors+" "+rb.getString("Warn2"), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2013-04-12 12:19:48
|
Revision: 23196 http://sourceforge.net/p/jmri/code/23196 Author: ken_c Date: 2013-04-12 12:19:43 +0000 (Fri, 12 Apr 2013) Log Message: ----------- Correct the hover hints for east/west, up/down to match usage. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle_ja_JP.properties Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2013-04-12 01:57:16 UTC (rev 23195) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2013-04-12 12:19:43 UTC (rev 23196) @@ -412,8 +412,8 @@ ChangeSignalIcon = Change Signal Head Icon ChangeSignalIconHint = Click to change icons used to represent signal heads. (Use left-facing icons.) SignalHeadNameHint = Enter name (system or user) of signal head located here. -SignalHeadEastNameHint = Enter name (system or user) of signal head for left-bound (east) or down-bound (south) trains. -SignalHeadWestNameHint = Enter name (system or user) of signal head for right-bound (west) or up-bound (north) trains. +SignalHeadEastNameHint = Enter name (system or user) of signal head for right-bound (east) or up-bound (south) trains. +SignalHeadWestNameHint = Enter name (system or user) of signal head for left-bound (west) or down-bound (north) trains. SignalDoneHint = Click Done to perform tasks requested above and dismiss this dialog. SignalsError1 = Error - No turnout name was entered. Please enter a turnout name or cancel. SignalsError2 = Error - No turnout is defined for "{0}". Please enter \na turnout name in the Turnout Table and on the panel. @@ -501,8 +501,8 @@ ChangeSensorIcon = Change Sensor Icon ChangeSensorIconHint = Click to change icons used to represent sensors. SensorNameHint = Enter name (system or user) of sensor located here. -SensorEastNameHint = Enter name (system or user) of sensor for left-bound (east) or down-bound (south) trains. -SensorWestNameHint = Enter name (system or user) of sensor for right-bound (west) or up-bound (north) trains. +SensorEastNameHint = Enter name (system or user) of sensor for right-bound (east) or down-bound (south) trains. +SensorWestNameHint = Enter name (system or user) of sensor for left-bound (west) or up-bound (north) trains. SensorDoneHint = Click Done to perform tasks requested above and dismiss this dialog. PlaceSensor = Add Sensor Icon to Panel Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle_ja_JP.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle_ja_JP.properties 2013-04-12 01:57:16 UTC (rev 23195) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle_ja_JP.properties 2013-04-12 12:19:43 UTC (rev 23196) @@ -322,8 +322,8 @@ ChangeSignalIcon = \u30B7\u30B0\u30CA\u30EB\u30A2\u30A4\u30B3\u30F3\u5909\u66F4 ChangeSignalIconHint = Click to change icons used to represent signal heads. (\u5DE6\u5411\u304D\u306E\u30A2\u30A4\u30B3\u30F3\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002) SignalHeadNameHint = Enter name (system or user) of signal head located here. -SignalHeadEastNameHint = Enter name (system or user) of signal head for left-bound (east) or down-bound (south) trains. -SignalHeadWestNameHint = Enter name (system or user) of signal head for right-bound (west) or up-bound (north) trains. +SignalHeadEastNameHint = Enter name (system or user) of signal head for right-bound (east) or down-bound (south) trains. +SignalHeadWestNameHint = Enter name (system or user) of signal head for left-bound (west) or up-bound (north) trains. SignalDoneHint = \u5B8C\u4E86\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u4EE5\u4E0A\u306E\u51E6\u7406\u3092\u7D42\u4E86\u3057\u3001\u30C0\u30A4\u30A2\u30ED\u30B0\u3092\u9589\u3058\u307E\u3059\u3002 SignalsError1 = \u30A8\u30E9\u30FC - No turnout name was entered. Please enter a turnout name or cancel. SignalsError2 = \u30A8\u30E9\u30FC - No turnout is defined for "{0}". Please enter \na turnout name in the Turnout Table and on the panel. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2013-07-23 15:16:09
|
Revision: 23831 http://sourceforge.net/p/jmri/code/23831 Author: kevin-dickerson Date: 2013-07-23 15:16:06 +0000 (Tue, 23 Jul 2013) Log Message: ----------- Setup SignalHeads over linked boundary blocks Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorAuxTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2013-07-22 15:09:44 UTC (rev 23830) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2013-07-23 15:16:06 UTC (rev 23831) @@ -5867,7 +5867,7 @@ l.updateSize(); l.setDisplayLevel(SIGNALS); } - + SignalHead getSignalHead(String name) { SignalHead sh = InstanceManager.signalHeadManagerInstance().getBySystemName(name); if (sh == null) sh = InstanceManager.signalHeadManagerInstance().getByUserName(name); @@ -5875,6 +5875,35 @@ return sh; } + public boolean containsSignalHead(SignalHead head){ + for(SignalHeadIcon h:signalList){ + if(h.getSignalHead()==head) + return true; + } + return false; + } + + public void removeSignalHead(SignalHead head){ + SignalHeadIcon h = null; + int index = -1; + for (int i=0;(i<signalList.size())&&(index==-1);i++) { + h = signalList.get(i); + if (h.getSignalHead() == head) { + index = i; + break; + } + } + if (index!=(-1)) { + signalList.remove(index); + if(h!=null){ + h.remove(); + h.dispose(); + } + setDirty(true); + repaint(); + } + } + void addSignalMast() { // check for valid signal head entry String tName = nextSignalMast.getText().trim(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorAuxTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorAuxTools.java 2013-07-22 15:09:44 UTC (rev 23830) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorAuxTools.java 2013-07-23 15:16:06 UTC (rev 23831) @@ -66,30 +66,9 @@ if ( (lc.getBlock1() == blk) || (lc.getBlock2() == blk) ) { retList.add(lc); } - /*if(lc.getAnchor()!=null && lc.getAnchor().getType()==PositionablePoint.EDGE_CONNECTOR){ - if(lc.getAnchor().getLinkedEditor()!=null){ - retList.addAll(new LayoutEditorAuxTools(lc.getAnchor().getLinkedEditor()).getConnectivityListSole(blk)); - } - }*/ } return (retList); } - - /*protected ArrayList<LayoutConnectivity> getConnectivityListSole(LayoutBlock blk){ - if (!initialized) initializeBlockConnectivity(); - if (blockConnectivityChanged) { - updateBlockConnectivity(); - } - ArrayList<LayoutConnectivity> retList = new ArrayList<LayoutConnectivity>(); - for (int i = 0;i<cList.size();i++) { - LayoutConnectivity lc = cList.get(i); - if ( (lc.getBlock1() == blk) || (lc.getBlock2() == blk) ) { - retList.add(lc); - } - } - return (retList); - - }*/ /** * Initializes the block connectivity (block boundaries) for a Layout Editor panel. Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2013-07-22 15:09:44 UTC (rev 23830) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorTools.java 2013-07-23 15:16:06 UTC (rev 23831) @@ -1295,7 +1295,8 @@ SignalHead head = jmri.InstanceManager.signalHeadManagerInstance(). getSignalHead(signalName); removeAssignment(head); - SignalHeadIcon h = null; + layoutEditor.removeSignalHead(head); + /*SignalHeadIcon h = null; int index = -1; for (int i=0;(i<layoutEditor.signalList.size())&&(index==-1);i++) { h = layoutEditor.signalList.get(i); @@ -1308,7 +1309,7 @@ h.remove(); h.dispose(); needRedraw = true; - } + }*/ } /* * Initializes a BlockBossLogic for creation of a signal logic for the signal @@ -1381,9 +1382,12 @@ if (track.getLayoutBlock()!=t.getLayoutBlock()) { // p is a block boundary - should be signalled String signalName; - if (isAtWestEndOfAnchor(t,p)) + if (isAtWestEndOfAnchor(t,p)) { signalName = p.getWestBoundSignal(); - else signalName = p.getEastBoundSignal(); + } + else { + signalName = p.getEastBoundSignal(); + } if ((signalName==null)||(signalName.equals(""))) return null; return jmri.InstanceManager.signalHeadManagerInstance(). getSignalHead(signalName); @@ -1675,6 +1679,18 @@ * "point" is an anchor point serving as a block boundary. */ public boolean isAtWestEndOfAnchor(TrackSegment t, PositionablePoint p) { + if(p.getType()==PositionablePoint.EDGE_CONNECTOR){ + if(p.getConnect1()==t){ + if(p.getConnect1Dir()==jmri.Path.NORTH || p.getConnect1Dir()==jmri.Path.WEST) + return false; + return true; + } else { + if(p.getConnect1Dir()==jmri.Path.NORTH || p.getConnect1Dir()==jmri.Path.WEST) + return true; + return false; + } + + } TrackSegment tx = null; if (p.getConnect1()==t) tx = p.getConnect2(); @@ -1750,6 +1766,9 @@ private PositionablePoint boundary = null; private SignalHead eastBoundHead = null; private SignalHead westBoundHead = null; + + private boolean showWest = true; + private boolean showEast = true; // display dialog for Set Signals at Block Boundary tool public void setSignalsAtBlockBoundaryFromMenu( PositionablePoint p, MultiIconEditor theEditor, @@ -1794,9 +1813,11 @@ JPanel panel12 = new JPanel(); panel12.setLayout(new FlowLayout()); if (boundaryFromMenu) { - JLabel block2NameLabel = new JLabel( rb.getString("Block")+" 2 "+ - rb.getString("Name")+" : "+boundary.getConnect2().getLayoutBlock().getID()); - panel12.add(block2NameLabel); + if(boundary.getConnect2()!=null){ + JLabel block2NameLabel = new JLabel( rb.getString("Block")+" 2 "+ + rb.getString("Name")+" : "+boundary.getConnect2().getLayoutBlock().getID()); + panel12.add(block2NameLabel); + } } else { JLabel block2NameLabel = new JLabel( rb.getString("Block")+" 2 "+ @@ -1820,38 +1841,47 @@ }); getAnchorSavedSignalHeads.setToolTipText( rb.getString("GetSavedHint") ); theContentPane.add(panel2); - JPanel panel21 = new JPanel(); - panel21.setLayout(new FlowLayout()); - JLabel eastBoundLabel = new JLabel(rb.getString("East/SouthBound")+" : "); - panel21.add(eastBoundLabel); - panel21.add(eastBoundField); - theContentPane.add(panel21); - eastBoundField.setToolTipText(rb.getString("SignalHeadEastNameHint")); - JPanel panel22 = new JPanel(); - panel22.setLayout(new FlowLayout()); - panel22.add(new JLabel(" ")); - panel22.add(setEastBound); - setEastBound.setToolTipText(rb.getString("AnchorPlaceHeadHint")); - panel22.add(new JLabel(" ")); - panel22.add(setupLogicEastBound); - setupLogicEastBound.setToolTipText(rb.getString("SetLogicHint")); - theContentPane.add(panel22); - JPanel panel31 = new JPanel(); - panel31.setLayout(new FlowLayout()); - JLabel westBoundLabel = new JLabel(rb.getString("West/NorthBound")+" : "); - panel31.add(westBoundLabel); - panel31.add(westBoundField); - theContentPane.add(panel31); - westBoundField.setToolTipText(rb.getString("SignalHeadWestNameHint")); - JPanel panel32 = new JPanel(); - panel32.setLayout(new FlowLayout()); - panel32.add(new JLabel(" ")); - panel32.add(setWestBound); - setWestBound.setToolTipText(rb.getString("AnchorPlaceHeadHint")); - panel32.add(new JLabel(" ")); - panel32.add(setupLogicWestBound); - setupLogicWestBound.setToolTipText(rb.getString("SetLogicHint")); - theContentPane.add(panel32); + if(showEast){ + JPanel panel21 = new JPanel(); + panel21.setLayout(new FlowLayout()); + JLabel eastBoundLabel = new JLabel(rb.getString("East/SouthBound")+" : "); + panel21.add(eastBoundLabel); + panel21.add(eastBoundField); + theContentPane.add(panel21); + eastBoundField.setToolTipText(rb.getString("SignalHeadEastNameHint")); + JPanel panel22 = new JPanel(); + panel22.setLayout(new FlowLayout()); + panel22.add(new JLabel(" ")); + panel22.add(setEastBound); + setEastBound.setToolTipText(rb.getString("AnchorPlaceHeadHint")); + panel22.add(new JLabel(" ")); + if(showWest){ + panel22.add(setupLogicEastBound); + setupLogicEastBound.setToolTipText(rb.getString("SetLogicHint")); + } + theContentPane.add(panel22); + } + if(showWest){ + JPanel panel31 = new JPanel(); + panel31.setLayout(new FlowLayout()); + JLabel westBoundLabel = new JLabel(rb.getString("West/NorthBound")+" : "); + panel31.add(westBoundLabel); + panel31.add(westBoundField); + theContentPane.add(panel31); + westBoundField.setToolTipText(rb.getString("SignalHeadWestNameHint")); + JPanel panel32 = new JPanel(); + panel32.setLayout(new FlowLayout()); + panel32.add(new JLabel(" ")); + panel32.add(setWestBound); + setWestBound.setToolTipText(rb.getString("AnchorPlaceHeadHint")); + panel32.add(new JLabel(" ")); + if(showEast){ + panel32.add(setupLogicWestBound); + setupLogicWestBound.setToolTipText(rb.getString("SetLogicHint")); + } + theContentPane.add(panel32); + } + theContentPane.add(new JSeparator(JSeparator.HORIZONTAL)); JPanel panel6 = new JPanel(); panel6.setLayout(new FlowLayout()); @@ -1891,8 +1921,8 @@ } private void getSavedAnchorSignals (ActionEvent a) { if ( !getBlockInformation() ) return; - eastBoundField.setText(boundary.getEastBoundSignal()); - westBoundField.setText(boundary.getWestBoundSignal()); + eastBoundField.setText(boundary.getEastBoundSignal()); + westBoundField.setText(boundary.getWestBoundSignal()); } private void setSignalsAtBoundaryCancelPressed (ActionEvent a) { setSignalsAtBoundaryOpen = false; @@ -1925,14 +1955,14 @@ if (eastBoundHead!=getHeadFromName(boundary.getEastBoundSignal())) { removeSignalHeadFromPanel(boundary.getEastBoundSignal()); removeAssignment(eastBoundHead); - boundary.setEastBoundSignal(eastBoundField.getText().trim()); + boundary.setEastBoundSignal(eastBoundField.getText().trim()); } } else { removeSignalHeadFromPanel(boundary.getEastBoundSignal()); placeEastBound(); removeAssignment(eastBoundHead); - boundary.setEastBoundSignal(eastBoundField.getText().trim()); + boundary.setEastBoundSignal(eastBoundField.getText().trim()); needRedraw = true; } } @@ -1949,7 +1979,7 @@ else { removeSignalHeadFromPanel(boundary.getEastBoundSignal()); removeAssignment(eastBoundHead); - boundary.setEastBoundSignal(eastBoundField.getText().trim()); + boundary.setEastBoundSignal(eastBoundField.getText().trim()); } } else if ( (eastBoundHead!=null) && @@ -2062,9 +2092,20 @@ else point1 = layoutEditor.getCoords(track1.getConnect1(),track1.getType1()); TrackSegment track2 = boundary.getConnect2(); - Point2D point2; + if(boundary.getType()==PositionablePoint.END_BUMPER) return true; + if(boundary.getType()==PositionablePoint.EDGE_CONNECTOR){ + if(boundary.getConnect1Dir()==jmri.Path.EAST || boundary.getConnect1Dir()==jmri.Path.SOUTH){ + eastTrack=track2; + westTrack=track1; + } else { + westTrack=track2; + eastTrack=track1; + } + return true; + } + Point2D point2; if (track2.getConnect1()==boundary) point2 = layoutEditor.getCoords(track2.getConnect2(),track2.getType2()); else @@ -2104,7 +2145,7 @@ else { eastTrack = track2; westTrack = track1; - } + } } return true; } @@ -2173,8 +2214,11 @@ null,JOptionPane.INFORMATION_MESSAGE); return; } + PositionablePoint p = boundary; + if(boundary.getType()==PositionablePoint.EDGE_CONNECTOR && eastTrack!=boundary.getConnect1()) + p=boundary.getLinkedPoint(); SignalHead nextHead = getNextSignalFromObject(eastTrack, - boundary, eastBoundField.getText().trim(), setSignalsAtBoundaryFrame); + p, eastBoundField.getText().trim(), setSignalsAtBoundaryFrame); if ( (nextHead==null) && (!reachedEndBumper()) ) { JOptionPane.showMessageDialog(setSignalsAtBoundaryFrame, java.text.MessageFormat.format(rb.getString("InfoMessage5"), @@ -2182,6 +2226,7 @@ null,JOptionPane.INFORMATION_MESSAGE); return; } + if (!initializeBlockBossLogic(eastBoundField.getText().trim())) return; logic.setMode(BlockBossLogic.SINGLEBLOCK); logic.setSensor1(eastBlockOccupancy.getSystemName()); @@ -2203,8 +2248,11 @@ null,JOptionPane.INFORMATION_MESSAGE); return; } + PositionablePoint p = boundary; + if(boundary.getType()==PositionablePoint.EDGE_CONNECTOR && westTrack!=boundary.getConnect1()) + p=boundary.getLinkedPoint(); SignalHead nextHead = getNextSignalFromObject(westTrack, - boundary, westBoundField.getText().trim(), setSignalsAtBoundaryFrame); + p, westBoundField.getText().trim(), setSignalsAtBoundaryFrame); if ( (nextHead==null) && (!reachedEndBumper()) ) { JOptionPane.showMessageDialog(setSignalsAtBoundaryFrame, java.text.MessageFormat.format(rb.getString("InfoMessage5"), @@ -2224,6 +2272,30 @@ finalizeBlockBossLogic(); } + public void setSignalAtEdgeConnector(PositionablePoint p, MultiIconEditor theEditor, + JFrame theFrame ){ + boundary = p; + if(p.getLinkedPoint()==null || p.getLinkedPoint().getConnect1()==null){ + if(p.getConnect1Dir()==jmri.Path.EAST || p.getConnect1Dir()==jmri.Path.SOUTH){ + showWest=false; + } else { + showEast=false; + } + block1NameField.setText(boundary.getConnect1().getLayoutBlock().getID()); + } else { + block1NameField.setText(boundary.getConnect1().getLayoutBlock().getID()); + block2NameField.setText(boundary.getConnect2().getLayoutBlock().getID()); + } + if(p.getConnect1Dir()==jmri.Path.EAST || p.getConnect1Dir()==jmri.Path.WEST) + trackHorizontal = true; + else if (p.getConnect1Dir()==jmri.Path.NORTH || p.getConnect1Dir()==jmri.Path.SOUTH) + trackVertical = true; + boundaryFromMenu = true; + + setSignalsAtBlockBoundary(theEditor,theFrame); + return; + } + /** * Tool to set signals at a double crossover turnout, including placing the * signal icons and setup of Simple Signal Logic for each signal head @@ -7846,17 +7918,8 @@ { if (signalMast==null) return; - /*for (int i=0;i<layoutEditor.pointList.size();i++) { - PositionablePoint po = layoutEditor.pointList.get(i); - if ((po.getEastBoundSignalMast()!=null) && - (po.getEastBoundSignalMast()== signalMast) ) - po.setEastBoundSignalMast(null); - if ((po.getWestBoundSignalMast()!=null) && - (po.getWestBoundSignalMast() == signalMast)) - po.setWestBoundSignalMast(null); - }*/ - for(PositionablePoint po : layoutEditor.pointList){ + for(PositionablePoint po : layoutEditor.pointList){ if ((po.getEastBoundSignalMast()!=null) && po.getEastBoundSignalMast()==signalMast){ po.setEastBoundSignalMast(null); } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2013-07-22 15:09:44 UTC (rev 23830) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2013-07-23 15:16:06 UTC (rev 23831) @@ -128,7 +128,6 @@ public void setLinkedPoint(PositionablePoint p){ if(p==linkedPoint) return; if(linkedPoint!=null && linkedPoint!=p){ - log.info("in here"); PositionablePoint oldLinkedPoint = linkedPoint; linkedPoint=null; if(oldLinkedPoint.getLinkedPoint()!=null){ @@ -147,6 +146,14 @@ } } linkedPoint = p; + if(p!=null){ + p.setLinkedPoint(this); + if(getConnect1()!=null){ + layoutEditor.auxTools.setBlockConnectivityChanged(); + getConnect1().updateBlockInfo(); + layoutEditor.repaint(); + } + } } public LayoutEditor getLinkedEditor(){ @@ -159,11 +166,56 @@ return layoutEditor; } - public String getEastBoundSignal() {return eastBoundSignalName;} - public void setEastBoundSignal(String signalName) {eastBoundSignalName = signalName;} - public String getWestBoundSignal() {return westBoundSignalName;} - public void setWestBoundSignal(String signalName) {westBoundSignalName = signalName;} + public String getEastBoundSignal() { + if(getType()==EDGE_CONNECTOR){ + if(getConnect1Dir()==Path.EAST || getConnect1Dir()==Path.SOUTH) + return eastBoundSignalName; + else if(getLinkedPoint()!=null){ + return getLinkedPoint().getEastBoundSignal(); + } + return ""; + } + return eastBoundSignalName; + } + public void setEastBoundSignal(String signalName) { + if(getType()==EDGE_CONNECTOR){ + if(getConnect1Dir()==Path.EAST || getConnect1Dir()==Path.SOUTH) + eastBoundSignalName = signalName; + else if(getLinkedPoint()!=null){ + getLinkedPoint().setEastBoundSignal(signalName); + } else { + eastBoundSignalName = signalName; + } + } else { + eastBoundSignalName = signalName; + } + } + public String getWestBoundSignal() { + if(getType()==EDGE_CONNECTOR){ + if(getConnect1Dir()==Path.WEST || getConnect1Dir()==Path.NORTH) + return westBoundSignalName; + else if(getLinkedPoint()!=null){ + return getLinkedPoint().getWestBoundSignal(); + } + return ""; + } + return westBoundSignalName; + } + public void setWestBoundSignal(String signalName) { + if(getType()==EDGE_CONNECTOR){ + if(getConnect1Dir()==Path.WEST || getConnect1Dir()==Path.NORTH) + westBoundSignalName = signalName; + else if(getLinkedPoint()!=null){ + getLinkedPoint().setWestBoundSignal(signalName); + } else { + westBoundSignalName = signalName; + } + } else { + westBoundSignalName = signalName; + } + } + public String getEastBoundSensorName() { if(eastBoundSensorNamed!=null) return eastBoundSensorNamed.getName(); @@ -482,6 +534,14 @@ setLink(); } }); + popup.add(new AbstractAction(rb.getString("SetSignals")) { + public void actionPerformed(ActionEvent e) { + tools = new LayoutEditorTools(layoutEditor); + // bring up signals at level crossing tool dialog + tools.setSignalAtEdgeConnector(instance, + layoutEditor.signalIconEditor,layoutEditor.signalFrame); + } + }); } else { popup.add(new AbstractAction(rb.getString("SetSignals")) { public void actionPerformed(ActionEvent e) { @@ -555,10 +615,11 @@ void removeLinkedPoint(){ if(type==EDGE_CONNECTOR && getLinkedPoint()!=null){ - getLinkedPoint().setLinkedPoint(null); - getLinkedEditor().repaint(); + if(getConnect2()!=null && getLinkedEditor()!=null){ //as we have removed the point, need to force the update on the remote end. + getLinkedPoint().setLinkedPoint(null); + getLinkedEditor().repaint(); TrackSegment ts = getConnect2(); getLinkedEditor().auxTools.setBlockConnectivityChanged(); ts.updateBlockInfo(); @@ -586,6 +647,9 @@ protected int getConnect1Dir(){ Point2D p1; + if(getConnect1()==null){ + return Path.NONE; + } if (getConnect1().getConnect1()==this) p1 = layoutEditor.getCoords(getConnect1().getConnect2(),getConnect1().getType2()); else p1 = layoutEditor.getCoords(getConnect1().getConnect1(),getConnect1().getType1()); @@ -613,7 +677,6 @@ else dir = Path.NORTH + Path.EAST; } return dir; - } JComboBox linkPointsBox; @@ -711,6 +774,29 @@ public void updateLink(){ if(editorCombo.getSelectedIndex()==0 || linkPointsBox.getSelectedIndex()==-1){ + if(getLinkedPoint()!=null && getConnect2()!=null){ + String removeremote = null; + String removelocal = null; + if(getConnect1Dir()==Path.EAST || getConnect1Dir()==Path.SOUTH){ + removeremote = getLinkedPoint().getEastBoundSignal(); + removelocal = getWestBoundSignal(); + getLinkedPoint().setEastBoundSignal(""); + } else { + removeremote = getLinkedPoint().getWestBoundSignal(); + removelocal = getEastBoundSignal(); + getLinkedPoint().setWestBoundSignal(""); + } + if(removeremote!=null && !removeremote.equals("")){ + jmri.SignalHead sh = InstanceManager.signalHeadManagerInstance().getSignalHead(removeremote); + getLinkedEditor().removeSignalHead(sh); + jmri.jmrit.blockboss.BlockBossLogic.getStoppedObject(removeremote); + } + if(removelocal!=null && !removelocal.equals("")){ + jmri.SignalHead sh = InstanceManager.signalHeadManagerInstance().getSignalHead(removelocal); + layoutEditor.removeSignalHead(sh); + jmri.jmrit.blockboss.BlockBossLogic.getStoppedObject(removelocal); + } + } setLinkedPoint(null); } else { setLinkedPoint(pointList.get(linkPointsBox.getSelectedIndex())); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-03-06 10:22:32
|
Revision: 25300 http://sourceforge.net/p/jmri/code/25300 Author: kevin-dickerson Date: 2014-03-06 10:22:28 +0000 (Thu, 06 Mar 2014) Log Message: ----------- Highlight connecting point for block A on crossovers. Fresh layout of edit turnouts outs. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-03-05 23:00:16 UTC (rev 25299) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-03-06 10:22:28 UTC (rev 25300) @@ -7665,7 +7665,11 @@ g2.setColor(Color.red); } else { - g2.setColor(Color.green); + if(t.getTurnoutType()>=LayoutTurnout.DOUBLE_XOVER && t.getTurnoutType()<=LayoutTurnout.LH_XOVER){ + g2.setColor(Color.blue); + } else { + g2.setColor(Color.green); + } } g2.draw(new Rectangle2D.Double ( pt.getX()-SIZE, pt.getY()-SIZE, SIZE2, SIZE2)); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-03-05 23:00:16 UTC (rev 25299) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-03-06 10:22:28 UTC (rev 25300) @@ -147,6 +147,7 @@ DoneHint = Click Done to accept any changes made above and dismiss this dialog. Cancel = Cancel CancelHint = Click Cancel to dismiss this dialog without making changes. +CreateEdit = Create/Edit EditBlock = Create/Edit Block EditBlock1 = Create/Edit Block 1 EditBlock2 = Create/Edit Block 2 Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-03-05 23:00:16 UTC (rev 25299) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-03-06 10:22:28 UTC (rev 25300) @@ -16,6 +16,9 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; +import javax.swing.BorderFactory; +import javax.swing.border.TitledBorder; + import java.util.ResourceBundle; import java.util.ArrayList; @@ -1763,47 +1766,76 @@ panel33.add (hiddenBox); contentPane.add(panel33); + TitledBorder border = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black)); + border.setTitle(rb.getString("Block")); // setup block name JPanel panel2 = new JPanel(); + panel2.setBorder(border); panel2.setLayout(new FlowLayout()); - JLabel blockNameLabel = new JLabel( rb.getString("BlockID")); - panel2.add(blockNameLabel); panel2.add(blockNameField); blockNameField.setToolTipText( rb.getString("EditBlockNameHint") ); + panel2.add(turnoutEditBlock = new JButton(rb.getString("CreateEdit"))); + turnoutEditBlock.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnoutEditBlockPressed(e); + } + }); contentPane.add(panel2); if ( (type == DOUBLE_XOVER) || (type == RH_XOVER) || (type == LH_XOVER) ) { JPanel panel21 = new JPanel(); panel21.setLayout(new FlowLayout()); - JLabel blockBNameLabel = new JLabel( rb.getString("Block2ID")); - panel21.add(blockBNameLabel); - panel21.add(blockBNameField); + TitledBorder borderblk2 = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black)); + borderblk2.setTitle(rb.getString("Block") + " 2"); + panel21.setBorder(borderblk2); + panel21.add(blockBNameField); blockBNameField.setToolTipText( rb.getString("EditBlockBNameHint") ); - contentPane.add(panel21); + + panel21.add(turnoutEditBlockB = new JButton(rb.getString("CreateEdit"))); + turnoutEditBlockB.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnoutEditBlockBPressed(e); + } + }); + turnoutEditBlockB.setToolTipText( rb.getString("EditBlockBHint") ); + contentPane.add(panel21); + JPanel panel22 = new JPanel(); panel22.setLayout(new FlowLayout()); - JLabel blockCNameLabel = new JLabel( rb.getString("Block3ID")); - panel22.add(blockCNameLabel); + TitledBorder borderblk3 = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black)); + borderblk3.setTitle(rb.getString("Block") + " 3"); + panel22.setBorder(borderblk3); panel22.add(blockCNameField); - blockCNameField.setToolTipText( rb.getString("EditBlockCNameHint") ); + blockCNameField.setToolTipText( rb.getString("EditBlockCNameHint") ); + panel22.add(turnoutEditBlockC = new JButton(rb.getString("CreateEdit"))); + turnoutEditBlockC.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnoutEditBlockCPressed(e); + } + }); + turnoutEditBlockC.setToolTipText( rb.getString("EditBlockCHint") ); contentPane.add(panel22); + JPanel panel23 = new JPanel(); panel23.setLayout(new FlowLayout()); - JLabel blockDNameLabel = new JLabel( rb.getString("Block4ID")); - panel23.add(blockDNameLabel); + TitledBorder borderblk4 = BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black)); + borderblk4.setTitle(rb.getString("Block") + " 4"); + panel23.setBorder(borderblk4); panel23.add(blockDNameField); blockDNameField.setToolTipText( rb.getString("EditBlockDNameHint") ); + panel23.add(turnoutEditBlockD = new JButton(rb.getString("CreateEdit"))); + turnoutEditBlockD.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnoutEditBlockDPressed(e); + } + }); + turnoutEditBlockD.setToolTipText( rb.getString("EditBlockDHint") ); contentPane.add(panel23); } // set up Edit Block, Done and Cancel buttons JPanel panel5 = new JPanel(); panel5.setLayout(new FlowLayout()); // Edit Block - panel5.add(turnoutEditBlock = new JButton(rb.getString("EditBlock"))); - turnoutEditBlock.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - turnoutEditBlockPressed(e); - } - }); + turnoutEditBlock.setToolTipText( rb.getString("EditBlockHint") ); // Done panel5.add(turnoutEditDone = new JButton(rb.getString("Done"))); @@ -1822,35 +1854,6 @@ }); turnoutEditCancel.setToolTipText( rb.getString("CancelHint") ); contentPane.add(panel5); - if ( (type == DOUBLE_XOVER) || (type == RH_XOVER) || (type == LH_XOVER) ) { - JPanel panel6 = new JPanel(); - panel6.setLayout(new FlowLayout()); - // Edit Block 2 - panel6.add(turnoutEditBlockB = new JButton(rb.getString("EditBlock2"))); - turnoutEditBlockB.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - turnoutEditBlockBPressed(e); - } - }); - turnoutEditBlockB.setToolTipText( rb.getString("EditBlockBHint") ); - // Edit Block 3 - panel6.add(turnoutEditBlockC = new JButton(rb.getString("EditBlock3"))); - turnoutEditBlockC.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - turnoutEditBlockCPressed(e); - } - }); - turnoutEditBlockC.setToolTipText( rb.getString("EditBlockCHint") ); - // Edit Block 4 - panel6.add(turnoutEditBlockD = new JButton(rb.getString("EditBlock4"))); - turnoutEditBlockD.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - turnoutEditBlockDPressed(e); - } - }); - turnoutEditBlockD.setToolTipText( rb.getString("EditBlockDHint") ); - contentPane.add(panel6); - } } hiddenBox.setSelected(hidden); @@ -1889,7 +1892,8 @@ editLayoutTurnoutFrame.setVisible(true); editOpen = true; needsBlockUpdate = false; - } + } + void turnoutEditBlockPressed(ActionEvent a) { // check if a block name has been entered if (!blockName.equals(blockNameField.getText().trim()) ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-03-12 10:44:01
|
Revision: 25371 http://sourceforge.net/p/jmri/code/25371 Author: kevin-dickerson Date: 2014-03-12 10:43:57 +0000 (Wed, 12 Mar 2014) Log Message: ----------- Add an option to the connectivity util to suppress the error messages as the existing logging method does not allow this to happen. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java 2014-03-12 09:51:05 UTC (rev 25370) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/ConnectivityUtil.java 2014-03-12 10:43:57 UTC (rev 25371) @@ -81,6 +81,10 @@ * Returns an empty list if a connectivity anamoly is discovered--specified blocks are not connected. */ public ArrayList<LayoutTurnout> getTurnoutList(Block block, Block prevBlock, Block nextBlock) { + return getTurnoutList(block, prevBlock, nextBlock, false); + } + + public ArrayList<LayoutTurnout> getTurnoutList(Block block, Block prevBlock, Block nextBlock, boolean suppress) { turnoutConnectivity = true; ArrayList<LayoutTurnout> list = new ArrayList<LayoutTurnout>(); companion = new ArrayList<Integer>(); @@ -114,7 +118,7 @@ } else if (((TrackSegment)ls.getConnectD()).getLayoutBlock()==lb){ companion.add(Integer.valueOf(LayoutSlip.STATE_AD)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } } @@ -134,7 +138,7 @@ companion.add(Integer.valueOf(LayoutSlip.STATE_BC)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } @@ -145,7 +149,7 @@ } else if (((TrackSegment)ls.getConnectD()).getLayoutBlock()==lb){ companion.add(Integer.valueOf(LayoutSlip.STATE_BD)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } } @@ -166,7 +170,7 @@ companion.add(Integer.valueOf(LayoutSlip.STATE_BC)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } @@ -177,7 +181,7 @@ } else if (((TrackSegment)ls.getConnectA()).getLayoutBlock()==lb){ companion.add(Integer.valueOf(LayoutSlip.STATE_AC)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } } @@ -195,12 +199,12 @@ } else if (((TrackSegment)ls.getConnectB()).getLayoutBlock()==lb){ companion.add(Integer.valueOf(LayoutSlip.STATE_AD)); } else { - log.error("Cannot determine slip setting " + ls.getName()); + if(!suppress) log.error("Cannot determine slip setting " + ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } } else { - log.error("Cannot determine turnout setting for "+ls.getName()); + if(!suppress) log.error("Cannot determine turnout setting for "+ls.getName()); companion.add(Integer.valueOf(LayoutSlip.UNKNOWN)); } break; @@ -230,7 +234,7 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting - "+ltx.getTurnoutName()); + if(!suppress) log.error("Cannot determine turnout setting - "+ltx.getTurnoutName()); companion.add(Integer.valueOf(Turnout.CLOSED)); } } @@ -241,8 +245,8 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting for "+ltx.getTurnoutName()); - log.error("lb " + lb + " nlb " + nlb + " connect B " + ((TrackSegment)ltx.getConnectB()).getLayoutBlock() + " connect C " + ((TrackSegment)ltx.getConnectC()).getLayoutBlock()); + if(!suppress) log.error("Cannot determine turnout setting for "+ltx.getTurnoutName()); + if(!suppress) log.error("lb " + lb + " nlb " + nlb + " connect B " + ((TrackSegment)ltx.getConnectB()).getLayoutBlock() + " connect C " + ((TrackSegment)ltx.getConnectC()).getLayoutBlock()); companion.add(Integer.valueOf(Turnout.CLOSED)); } break; @@ -266,7 +270,7 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting(A) - "+ltx.getTurnoutName()); + if(!suppress) log.error("Cannot determine turnout setting(A) - "+ltx.getTurnoutName()); companion.add(Integer.valueOf(Turnout.CLOSED)); } } @@ -279,7 +283,7 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting(B) - "+ltx.getTurnoutName()); + if(!suppress) log.error("Cannot determine turnout setting(B) - "+ltx.getTurnoutName()); companion.add(Integer.valueOf(Turnout.CLOSED)); } } @@ -296,7 +300,7 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting(C) - "+ltx.getTurnoutName()); + if(!suppress) log.error("Cannot determine turnout setting(C) - "+ltx.getTurnoutName()); companion.add(Integer.valueOf(Turnout.CLOSED)); } } @@ -309,7 +313,7 @@ companion.add(Integer.valueOf(Turnout.THROWN)); } else { - log.error("Cannot determine turnout setting(D) - "+ltx.getTurnoutName()); + if(!suppress) log.error("Cannot determine turnout setting(D) - "+ltx.getTurnoutName()); companion.add(Integer.valueOf(Turnout.CLOSED)); } } @@ -422,11 +426,11 @@ else if ( (cType>=LayoutEditor.TURNOUT_A) && (cType<=LayoutEditor.TURNOUT_D) ) { // add turnout to list list.add((LayoutTurnout)lc.getConnectedObject()); - companion.add(getTurnoutSetting((LayoutTurnout)lc.getConnectedObject(), cType)); + companion.add(getTurnoutSetting((LayoutTurnout)lc.getConnectedObject(), cType, suppress)); } else if ((cType>=LayoutEditor.SLIP_A) && (cType<=LayoutEditor.SLIP_D)){ list.add((LayoutSlip)lc.getConnectedObject()); - companion.add(getTurnoutSetting((LayoutSlip)lc.getConnectedObject(), cType)); + companion.add(getTurnoutSetting((LayoutSlip)lc.getConnectedObject(), cType, suppress)); } notFound = false; } @@ -434,10 +438,10 @@ if (notFound) { if (prevBlock!=null) // could not initialize the connectivity search - log.error ("Could not find connection between Blocks "+block.getUserName()+" and "+ + if(!suppress) log.error ("Could not find connection between Blocks "+block.getUserName()+" and "+ prevBlock.getUserName()); else - log.error("Could not find connection between Blocks "+block.getUserName()+", prevBock is null!"); + if(!suppress) log.error("Could not find connection between Blocks "+block.getUserName()+", prevBock is null!"); return list; } // search connectivity for turnouts by following TrackSegments to end of Block @@ -453,7 +457,7 @@ cObject = tr.getConnect1(); } else { - log.error("Connectivity error when searching turnouts in Block "+lb.getUserName()); + if(!suppress) log.error("Connectivity error when searching turnouts in Block "+lb.getUserName()); tr = null; break; } @@ -551,7 +555,7 @@ tr = null; } else { // no legal outcome found, print error - log.error("Connectivity mismatch at A in turnout "+lt.getTurnoutName()); + if(!suppress) log.error("Connectivity mismatch at A in turnout "+lt.getTurnoutName()); tr = null; } break; @@ -594,7 +598,7 @@ } else { // no legal outcome found, print error - log.error("Connectivity mismatch at B in turnout "+lt.getTurnoutName()); + if(!suppress) log.error("Connectivity mismatch at B in turnout "+lt.getTurnoutName()); tr = null; } break; @@ -637,7 +641,7 @@ } else { // no legal outcome found, print error - log.error("Connectivity mismatch at C in turnout "+lt.getTurnoutName()); + if(!suppress) log.error("Connectivity mismatch at C in turnout "+lt.getTurnoutName()); tr = null; } break; @@ -680,7 +684,7 @@ } else { // no legal outcome found, print error - log.error("Connectivity mismatch at D in turnout "+lt.getTurnoutName()); + if(!suppress) log.error("Connectivity mismatch at D in turnout "+lt.getTurnoutName()); tr = null; } break; @@ -696,7 +700,7 @@ else { // turnout is inside current block, add it to the list list.add((LayoutTurnout)cObject); - companion.add(getTurnoutSetting(lt, cType)); + companion.add(getTurnoutSetting(lt, cType, suppress)); } } } @@ -709,7 +713,7 @@ } else { // turnout is inside current block, add it to the list list.add(ls); - companion.add(getTurnoutSetting(ls, cType)); + companion.add(getTurnoutSetting(ls, cType, suppress)); } } } @@ -1861,7 +1865,7 @@ * Initializes the setting (as an object), sets the new track segment (if in Block), and sets the * prevConnectType. */ - private Integer getTurnoutSetting(LayoutTurnout lt, int cType) { + private Integer getTurnoutSetting(LayoutTurnout lt, int cType, boolean suppress) { prevConnectObject = lt; int setting = Turnout.THROWN; int tType = lt.getTurnoutType(); @@ -1905,7 +1909,7 @@ tr = (TrackSegment)lt.getConnectD(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(LS1)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(LS1)"); tr=null; } } @@ -1948,7 +1952,7 @@ tr = (TrackSegment)lt.getConnectC(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(LS2)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(LS2)"); tr=null; } @@ -2006,7 +2010,7 @@ tr = (TrackSegment)lt.getConnectB(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(LS3)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(LS3)"); tr=null; } } @@ -2056,7 +2060,7 @@ tr = (TrackSegment)lt.getConnectB(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(LS4)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(LS4)"); tr=null; } } @@ -2068,7 +2072,7 @@ tr = null; } else if (tr==null) { - log.error("Connectivity not complete at Slip "+ls.getDisplayName()); + if(!suppress) log.error("Connectivity not complete at Slip "+ls.getDisplayName()); turnoutConnectivity = false; } } else { @@ -2123,7 +2127,7 @@ tr = (TrackSegment)lt.getConnectC(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(1)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(1)"); tr = null; } } @@ -2172,7 +2176,7 @@ tr = (TrackSegment)lt.getConnectD(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(2)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(2)"); tr = null; } } @@ -2228,7 +2232,7 @@ tr = (TrackSegment)lt.getConnectA(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(3)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(3)"); tr = null; } } @@ -2287,7 +2291,7 @@ tr = (TrackSegment)lt.getConnectB(); } else { - log.error("Error - Neither branch at track node leads to requested Block.(2)"); + if(!suppress) log.error("Error - Neither branch at track node leads to requested Block.(2)"); tr = null; } } @@ -2308,7 +2312,7 @@ tr = null; } else if (tr==null) { - log.error("Connectivity not complete at turnout "+lt.getTurnoutName()); + if(!suppress) log.error("Connectivity not complete at turnout "+lt.getTurnoutName()); turnoutConnectivity = false; } if (lt.getContinuingSense() != Turnout.CLOSED) { Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2014-03-12 09:51:05 UTC (rev 25370) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutBlock.java 2014-03-12 10:43:57 UTC (rev 25371) @@ -2248,7 +2248,7 @@ try{ MDC.put("loggingDisabled", connection.getClass().getCanonicalName()); - stod = connection.getTurnoutList(block, srcBlock, dstBlock); + stod = connection.getTurnoutList(block, srcBlock, dstBlock, true); stodSet = connection.getTurnoutSettingList(); MDC.remove("loggingDisabled"); } catch (java.lang.NullPointerException ex){ @@ -2266,7 +2266,7 @@ try{ MDC.put("loggingDisabled", connection.getClass().getName()); - tmpdtos = connection.getTurnoutList(block, dstBlock, srcBlock); + tmpdtos = connection.getTurnoutList(block, dstBlock, srcBlock, true); tmpdtosSet = connection.getTurnoutSettingList(); MDC.remove("loggingDisabled"); } catch (java.lang.NullPointerException ex){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-03-12 13:26:44
|
Revision: 25373 http://sourceforge.net/p/jmri/code/25373 Author: kevin-dickerson Date: 2014-03-12 13:26:41 +0000 (Wed, 12 Mar 2014) Log Message: ----------- Add the ability to automatically add a track segment between two turnouts by hovering the connection point of one turnout over the connection point of another. Initial code drop for an alternative method for resizing of crossovers, not yet activated. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-03-12 11:21:53 UTC (rev 25372) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-03-12 13:26:41 UTC (rev 25373) @@ -28,6 +28,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.ResourceBundle; import jmri.util.SystemType; @@ -2155,11 +2157,36 @@ // loop over all defined turnouts for (int i = 0; i<turnoutList.size();i++) { LayoutTurnout t = turnoutList.get(i); - Point2D center = t.getCoordsCenter(); - if (selectRect.contains(center)) { - t.setCoordsCenter(new Point2D.Double(center.getX()+xTranslation, - center.getY()+yTranslation)); - } + + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + if(selectRect.contains(t.getCoordsA())){ + Point2D coord = t.getCoordsA(); + t.setCoordsA(new Point2D.Double(coord.getX()+xTranslation, + coord.getY()+yTranslation)); + } + if(selectRect.contains(t.getCoordsB())){ + Point2D coord = t.getCoordsB(); + t.setCoordsB(new Point2D.Double(coord.getX()+xTranslation, + coord.getY()+yTranslation)); + } + if(selectRect.contains(t.getCoordsC())){ + Point2D coord = t.getCoordsC(); + t.setCoordsC(new Point2D.Double(coord.getX()+xTranslation, + coord.getY()+yTranslation)); + } + if(selectRect.contains(t.getCoordsD())){ + Point2D coord = t.getCoordsD(); + t.setCoordsD(new Point2D.Double(coord.getX()+xTranslation, + coord.getY()+yTranslation)); + } + } else { + Point2D center = t.getCoordsCenter(); + if (selectRect.contains(center)) { + t.setCoordsCenter(new Point2D.Double(center.getX()+xTranslation, + center.getY()+yTranslation)); + } + } } // loop over all defined level crossings for (int i = 0; i<xingList.size();i++) { @@ -2226,11 +2253,35 @@ } for (int i = 0; i<turnoutList.size();i++) { LayoutTurnout t = turnoutList.get(i); - Point2D center = t.getCoordsCenter(); - if (undoRect.contains(center)) { - t.setCoordsCenter(new Point2D.Double(center.getX()+undoDeltaX, - center.getY()+undoDeltaY)); - } + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + if(undoRect.contains(t.getCoordsA())){ + Point2D coord = t.getCoordsA(); + t.setCoordsA(new Point2D.Double(coord.getX()+undoDeltaX, + coord.getY()+undoDeltaY)); + } + if(undoRect.contains(t.getCoordsB())){ + Point2D coord = t.getCoordsB(); + t.setCoordsB(new Point2D.Double(coord.getX()+undoDeltaX, + coord.getY()+undoDeltaY)); + } + if(undoRect.contains(t.getCoordsC())){ + Point2D coord = t.getCoordsC(); + t.setCoordsC(new Point2D.Double(coord.getX()+undoDeltaX, + coord.getY()+undoDeltaY)); + } + if(undoRect.contains(t.getCoordsD())){ + Point2D coord = t.getCoordsD(); + t.setCoordsD(new Point2D.Double(coord.getX()+undoDeltaX, + coord.getY()+undoDeltaY)); + } + } else { + Point2D center = t.getCoordsCenter(); + if (undoRect.contains(center)) { + t.setCoordsCenter(new Point2D.Double(center.getX()+undoDeltaX, + center.getY()+undoDeltaY)); + } + } } for (int i = 0; i<xingList.size();i++) { LevelXing x = xingList.get(i); @@ -3173,7 +3224,7 @@ } return null; } - + private PositionableLabel checkBackgrounds(Point2D loc) { // check background images, if any for (int i=backgroundImage.size()-1; i>=0; i--) { @@ -3488,6 +3539,11 @@ // controlling layout, in edit mode LayoutTurntable t = (LayoutTurntable)selectedObject; t.setPosition(selectedPointType-TURNTABLE_RAY_OFFSET); + } else if ( ( selectedObject!=null) && (selectedPointType==TURNOUT_CENTER) && + allControlling() && (event.isMetaDown()) && (!event.isAltDown()) && + (!event.isShiftDown()) && (!event.isControlDown()) && isDragging ) { + // controlling layout, in edit mode + checkPointsOfTurnout((LayoutTurnout) selectedObject); } if ( (trackBox.isSelected()) && (beginObject!=null) && (foundObject!=null) ) { // user let up shift key before releasing the mouse when creating a track segment @@ -3775,7 +3831,7 @@ amendSelectionGroup((PositionablePoint)foundObject); break; case TURNOUT_CENTER: - amendSelectionGroup((LayoutTurnout)foundObject); + amendSelectionGroup((LayoutTurnout)foundObject, dLoc); break; case LEVEL_XING_CENTER: amendSelectionGroup((LevelXing)foundObject); @@ -3786,10 +3842,19 @@ case TURNTABLE_CENTER: amendSelectionGroup((LayoutTurntable)foundObject); break; + case TURNOUT_A: + case TURNOUT_B: + case TURNOUT_C: + case TURNOUT_D: + LayoutTurnout t = (LayoutTurnout)foundObject; + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + amendSelectionGroup((LayoutTurnout)foundObject, dLoc); + } + default: break; } } else { - PositionableLabel s = checkSensorIcons(dLoc); if (s!=null) { amendSelectionGroup(s); @@ -3819,7 +3884,6 @@ if (sm!=null) { amendSelectionGroup(sm); } - } } } @@ -3834,8 +3898,72 @@ thisPanel.requestFocusInWindow(); return; } + + private void checkPointsOfTurnout(LayoutTurnout lt){ + beginObject = lt; + if(lt.getConnectA()==null){ + beginPointType = TURNOUT_A; + dLoc = lt.getCoordsA(); + checkPointsOfTurnoutSub(lt.getCoordsA()); + } + if(lt.getConnectB()==null){ + beginPointType = TURNOUT_B; + dLoc = lt.getCoordsB(); + checkPointsOfTurnoutSub(lt.getCoordsB()); + } + if(lt.getConnectC()==null){ + beginPointType = TURNOUT_C; + dLoc = lt.getCoordsC(); + checkPointsOfTurnoutSub(lt.getCoordsC()); + } + if(lt.getConnectD()==null && ( (lt.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (lt.getTurnoutType()==LayoutTurnout.LH_XOVER) || (lt.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + beginPointType = TURNOUT_D; + dLoc = lt.getCoordsD(); + checkPointsOfTurnoutSub(lt.getCoordsD()); + } + beginObject = null; + foundObject = null; + } - private ArrayList<LayoutTurnout> _turnoutSelection = null; //new ArrayList<LayoutTurnout>(); // LayoutTurnouts + private void checkPointsOfTurnoutSub(Point2D dLoc){ + if (checkSelect(dLoc, true)) { + LayoutTurnout ft = (LayoutTurnout)foundObject; + switch (foundPointType) { + case POS_POINT: + break; + case TURNOUT_A: + case TURNOUT_B: + case TURNOUT_C: + case TURNOUT_D: + addTrackSegment(); + break; + } + } + } + + //private ArrayList<LayoutTurnout> _turnoutSelection = null; // LayoutTurnouts + private java.util.HashMap<LayoutTurnout, TurnoutSelection> _turnoutSelection = null; + static class TurnoutSelection{ + boolean pointA = false; + boolean pointB = false; + boolean pointC = false; + boolean pointD = false; + + TurnoutSelection(){ } + + void setPointA(boolean boo){ pointA=boo;} + void setPointB(boolean boo){ pointB=boo;} + void setPointC(boolean boo){ pointC=boo;} + void setPointD(boolean boo){ pointD=boo;} + + boolean getPointA() { return pointA; } + boolean getPointB() { return pointB; } + boolean getPointC() { return pointC; } + boolean getPointD() { return pointD; } + + } + private ArrayList<PositionablePoint> _pointSelection = null; //new ArrayList<PositionablePoint>(); // PositionablePoint list private ArrayList<LevelXing> _xingSelection = null; //new ArrayList<LevelXing>(); // LevelXing list private ArrayList<LayoutSlip> _slipSelection = null; //new ArrayList<LevelXing>(); // LayoutSlip list @@ -3855,18 +3983,40 @@ } // loop over all defined turnouts if (_turnoutSelection!=null){ - for (int i = 0; i<_turnoutSelection.size();i++) { - LayoutTurnout t = _turnoutSelection.get(i); - int minx = (int) Math.min(Math.min(t.getCoordsA().getX(), t.getCoordsB().getX()),Math.min(t.getCoordsC().getX(), t.getCoordsD().getX())); - int miny = (int) Math.min(Math.min(t.getCoordsA().getY(), t.getCoordsB().getY()),Math.min(t.getCoordsC().getY(), t.getCoordsD().getY())); - int maxx = (int) Math.max(Math.max(t.getCoordsA().getX(), t.getCoordsB().getX()),Math.max(t.getCoordsC().getX(), t.getCoordsD().getX())); - int maxy = (int) Math.max(Math.max(t.getCoordsA().getY(), t.getCoordsB().getY()),Math.max(t.getCoordsC().getY(), t.getCoordsD().getY())); - int width = maxx-minx; - int height = maxy-miny; - int x = (int) t.getCoordsCenter().getX()-(width/2); - int y = (int) t.getCoordsCenter().getY()-(height/2); - g.drawRect(x, y, width, height); + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout t = (LayoutTurnout)entry.getKey(); + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + TurnoutSelection ts = (TurnoutSelection)entry.getValue(); + if(ts.getPointA()){ + Point2D coord = t.getCoordsA(); + g.drawRect((int)coord.getX()-4, (int)coord.getY()-4, 9, 9); + } + if(ts.getPointB()){ + Point2D coord = t.getCoordsB(); + g.drawRect((int)coord.getX()-4, (int)coord.getY()-4, 9, 9); + } + if(ts.getPointC()){ + Point2D coord = t.getCoordsC(); + g.drawRect((int)coord.getX()-4, (int)coord.getY()-4, 9, 9); + } + if(ts.getPointD()){ + Point2D coord = t.getCoordsD(); + g.drawRect((int)coord.getX()-4, (int)coord.getY()-4, 9, 9); + } + } else { + int minx = (int) Math.min(Math.min(t.getCoordsA().getX(), t.getCoordsB().getX()),Math.min(t.getCoordsC().getX(), t.getCoordsD().getX())); + int miny = (int) Math.min(Math.min(t.getCoordsA().getY(), t.getCoordsB().getY()),Math.min(t.getCoordsC().getY(), t.getCoordsD().getY())); + int maxx = (int) Math.max(Math.max(t.getCoordsA().getX(), t.getCoordsB().getX()),Math.max(t.getCoordsC().getX(), t.getCoordsD().getX())); + int maxy = (int) Math.max(Math.max(t.getCoordsA().getY(), t.getCoordsB().getY()),Math.max(t.getCoordsC().getY(), t.getCoordsD().getY())); + int width = maxx-minx; + int height = maxy-miny; + int x = (int) t.getCoordsCenter().getX()-(width/2); + int y = (int) t.getCoordsCenter().getY()-(height/2); + g.drawRect(x, y, width, height); } + + } } if (_xingSelection!=null){ // loop over all defined level crossings @@ -3881,7 +4031,7 @@ int x = (int) xing.getCoordsCenter().getX()-(width/2); int y = (int) xing.getCoordsCenter().getY()-(height/2); g.drawRect(x, y, width, height); - } + } } if (_slipSelection!=null){ // loop over all defined level crossings @@ -3936,12 +4086,63 @@ // loop over all defined turnouts for (int i = 0; i<turnoutList.size();i++) { LayoutTurnout t = turnoutList.get(i); - Point2D center = t.getCoordsCenter(); - if (selectRect.contains(center)) { - if (_turnoutSelection==null) _turnoutSelection = new ArrayList<LayoutTurnout>(); - if(!_turnoutSelection.contains(t)) - _turnoutSelection.add(t); + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + if(selectRect.contains(t.getCoordsA())){ + if (_turnoutSelection==null) _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(t)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(t, ts); + } else { + ts = _turnoutSelection.get(t); + } + ts.setPointA(true); + } + if(selectRect.contains(t.getCoordsB())){ + if (_turnoutSelection==null) _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(t)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(t, ts); + } else { + ts = _turnoutSelection.get(t); + } + ts.setPointB(true); + } + + if(selectRect.contains(t.getCoordsC())){ + if (_turnoutSelection==null) _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(t)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(t, ts); + } else { + ts = _turnoutSelection.get(t); + } + ts.setPointC(true); + } + + if(selectRect.contains(t.getCoordsD())){ + if (_turnoutSelection==null) _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(t)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(t, ts); + } else { + ts = _turnoutSelection.get(t); + } + ts.setPointD(true); + } + } else { + Point2D center = t.getCoordsCenter(); + if (selectRect.contains(center)) { + if (_turnoutSelection==null) _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); + if(!_turnoutSelection.containsKey(t)) + _turnoutSelection.put(t, new TurnoutSelection()); + } } + } // loop over all defined level crossings for (int i = 0; i<xingList.size();i++) { @@ -4051,8 +4252,8 @@ if(_turnoutSelection!=null){ boolean oldTurnout = noWarnLayoutTurnout; noWarnLayoutTurnout = true; - for(LayoutTurnout point: _turnoutSelection){ - removeLayoutTurnout(point); + for (Map.Entry entry : _turnoutSelection.entrySet()) { + removeLayoutTurnout((LayoutTurnout)entry.getKey()); } noWarnLayoutTurnout = oldTurnout; } @@ -4081,21 +4282,107 @@ repaint(); } - private void amendSelectionGroup(LayoutTurnout p){ + private void amendSelectionGroup(LayoutTurnout p, Point2D dLoc){ if (_turnoutSelection==null){ - _turnoutSelection = new ArrayList <LayoutTurnout>(); + _turnoutSelection = new HashMap<LayoutTurnout, TurnoutSelection>(); } boolean removed = false; - for(int i=0; i<_turnoutSelection.size();i++){ - if (_turnoutSelection.get(i)==p){ - _turnoutSelection.remove(i); - removed = true; - break; + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout t = (LayoutTurnout)entry.getKey(); + if (t==p){ + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + TurnoutSelection ts = (TurnoutSelection)entry.getValue(); + Rectangle2D r = new Rectangle2D.Double( + dLoc.getX() - SIZE,dLoc.getY() - SIZE,SIZE2,SIZE2); + if(ts.getPointA()){ + if (r.contains(t.getCoordsA())) { + ts.setPointA(false); + removed=true; + } + } + if(ts.getPointB()){ + if (r.contains(t.getCoordsB())) { + ts.setPointB(false); + removed=true; + } + } + if(ts.getPointC()){ + if (r.contains(t.getCoordsC())) { + ts.setPointC(false); + removed=true; + } + } + if(ts.getPointD()){ + if (r.contains(t.getCoordsD())) { + ts.setPointD(false); + removed=true; + } + } + if(!ts.getPointA() && !ts.getPointB() && !ts.getPointC() && !ts.getPointD()){ + _turnoutSelection.remove(t); + removed = true; + break; + } + } else { + _turnoutSelection.remove(t); + removed = true; + break; + } } } - if(!removed) - _turnoutSelection.add(p); - if (_turnoutSelection.size()==0){ + if(!removed){ + if(p.getVersion()==2 && ( (p.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (p.getTurnoutType()==LayoutTurnout.LH_XOVER) || (p.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + Rectangle2D r = new Rectangle2D.Double( + dLoc.getX() - SIZE,dLoc.getY() - SIZE,SIZE2,SIZE2); + if(r.contains(p.getCoordsA())){ + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(p)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(p, ts); + } else { + ts = _turnoutSelection.get(p); + } + ts.setPointA(true); + } + if(r.contains(p.getCoordsB())){ + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(p)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(p, ts); + } else { + ts = _turnoutSelection.get(p); + } + ts.setPointB(true); + } + + if(r.contains(p.getCoordsC())){ + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(p)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(p, ts); + } else { + ts = _turnoutSelection.get(p); + } + ts.setPointC(true); + } + + if(r.contains(p.getCoordsD())){ + TurnoutSelection ts; + if(!_turnoutSelection.containsKey(p)){ + ts = new TurnoutSelection(); + _turnoutSelection.put(p, ts); + } else { + ts = _turnoutSelection.get(p); + } + ts.setPointD(true); + } + } else { + _turnoutSelection.put(p, new TurnoutSelection()); + } + } + if (_turnoutSelection.isEmpty()){ _turnoutSelection=null; } repaint(); @@ -4180,7 +4467,7 @@ } repaint(); } - + public void alignSelection(boolean alignX){ int sum = 0; int cnt = 0; @@ -4211,8 +4498,8 @@ } if(_turnoutSelection!=null){ - for (int i = 0; i<_turnoutSelection.size(); i++){ - LayoutTurnout comp = _turnoutSelection.get(i); + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout comp = (LayoutTurnout)entry.getKey(); if (alignX) { sum += comp.getCoordsCenter().getX(); } else { @@ -4279,8 +4566,8 @@ } } if(_turnoutSelection!=null){ - for (int i=0; i<_turnoutSelection.size(); i++) { - LayoutTurnout comp = _turnoutSelection.get(i); + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout comp = (LayoutTurnout) entry.getKey(); if (alignX) { comp.setCoordsCenter(new Point2D.Double(ave, comp.getCoordsCenter().getY())); } else { @@ -4385,12 +4672,39 @@ } // loop over all defined turnouts if (_turnoutSelection!=null){ - for (int i = 0; i<_turnoutSelection.size();i++) { - LayoutTurnout t = _turnoutSelection.get(i); - Point2D center = t.getCoordsCenter(); - t.setCoordsCenter(new Point2D.Double(returnNewXPostition(e, center.getX()), + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout t = (LayoutTurnout)entry.getKey(); + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + + TurnoutSelection ts = (TurnoutSelection)entry.getValue(); + if(ts.getPointA()){ + Point2D coord = t.getCoordsA(); + t.setCoordsA(new Point2D.Double(returnNewXPostition(e, coord.getX()), + returnNewYPostition(e, coord.getY()))); + } + if(ts.getPointB()){ + Point2D coord = t.getCoordsB(); + t.setCoordsB(new Point2D.Double(returnNewXPostition(e, coord.getX()), + returnNewYPostition(e, coord.getY()))); + } + if(ts.getPointC()){ + Point2D coord = t.getCoordsC(); + t.setCoordsC(new Point2D.Double(returnNewXPostition(e, coord.getX()), + returnNewYPostition(e, coord.getY()))); + } + if(ts.getPointD()){ + Point2D coord = t.getCoordsD(); + t.setCoordsD(new Point2D.Double(returnNewXPostition(e, coord.getX()), + returnNewYPostition(e, coord.getY()))); + } + + } else { + Point2D center = t.getCoordsCenter(); + t.setCoordsCenter(new Point2D.Double(returnNewXPostition(e, center.getX()), returnNewYPostition(e, center.getY()))); } + } } if (_xingSelection!=null){ // loop over all defined level crossings @@ -4561,14 +4875,53 @@ } if (_turnoutSelection!=null){ - for (int i = 0; i<_turnoutSelection.size();i++) { - LayoutTurnout t = _turnoutSelection.get(i); - Point2D center = t.getCoordsCenter(); - xNew = (int) center.getX()+offsetx; - yNew = (int) center.getY()+offsety; - if (xNew<0) xNew=0; - if (yNew<0) yNew=0; - t.setCoordsCenter(new Point2D.Double(xNew, yNew)); + for (Map.Entry entry : _turnoutSelection.entrySet()) { + LayoutTurnout t = (LayoutTurnout)entry.getKey(); + if(t.getVersion()==2 && ( (t.getTurnoutType()==LayoutTurnout.DOUBLE_XOVER) + || (t.getTurnoutType()==LayoutTurnout.LH_XOVER) || (t.getTurnoutType()==LayoutTurnout.RH_XOVER))){ + + TurnoutSelection ts = (TurnoutSelection)entry.getValue(); + if(ts.getPointA()){ + Point2D coord = t.getCoordsA(); + xNew = (int) coord.getX()+offsetx; + yNew = (int) coord.getY()+offsety; + if (xNew<0) xNew=0; + if (yNew<0) yNew=0; + t.setCoordsA(new Point2D.Double(xNew,yNew)); + } + if(ts.getPointB()){ + Point2D coord = t.getCoordsB(); + xNew = (int) coord.getX()+offsetx; + yNew = (int) coord.getY()+offsety; + if (xNew<0) xNew=0; + if (yNew<0) yNew=0; + t.setCoordsB(new Point2D.Double(xNew,yNew)); + } + if(ts.getPointC()){ + Point2D coord = t.getCoordsC(); + xNew = (int) coord.getX()+offsetx; + yNew = (int) coord.getY()+offsety; + if (xNew<0) xNew=0; + if (yNew<0) yNew=0; + t.setCoordsC(new Point2D.Double(xNew,yNew)); + } + if(ts.getPointD()){ + Point2D coord = t.getCoordsD(); + xNew = (int) coord.getX()+offsetx; + yNew = (int) coord.getY()+offsety; + if (xNew<0) xNew=0; + if (yNew<0) yNew=0; + t.setCoordsD(new Point2D.Double(xNew,yNew)); + } + + } else { + Point2D center = t.getCoordsCenter(); + xNew = (int) center.getX()+offsetx; + yNew = (int) center.getY()+offsety; + if (xNew<0) xNew=0; + if (yNew<0) yNew=0; + t.setCoordsCenter(new Point2D.Double(xNew, yNew)); + } } } if (_xingSelection!=null){ Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-03-12 11:21:53 UTC (rev 25372) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-03-12 13:26:41 UTC (rev 25373) @@ -177,6 +177,13 @@ public Point2D center = new Point2D.Double(50.0,50.0); public Point2D dispB = new Point2D.Double(20.0,0.0); public Point2D dispC = new Point2D.Double(20.0,10.0); + public Point2D pointA = new Point2D.Double(0,0); + public Point2D pointB = new Point2D.Double(40,0); + public Point2D pointC = new Point2D.Double(60,20); + public Point2D pointD = new Point2D.Double(20,20); + + private int version = 1; + public String linkedTurnoutName = ""; // name of the linked Turnout (as entered in tool) public int linkType = NO_LINK; @@ -186,11 +193,16 @@ protected LayoutTurnout() {} + public LayoutTurnout(String id, int t, Point2D c, double rot, + double xFactor, double yFactor, LayoutEditor myPanel) { + this(id, t, c, rot, xFactor, yFactor, myPanel, 1); + } + /** * constructor method */ public LayoutTurnout(String id, int t, Point2D c, double rot, - double xFactor, double yFactor, LayoutEditor myPanel) { + double xFactor, double yFactor, LayoutEditor myPanel, int v) { instance = this; namedTurnout = null; turnoutName = ""; @@ -203,49 +215,82 @@ ident = id; type = t; center = c; + version = v; // adjust initial coordinates - if (type==LH_TURNOUT) { - dispB.setLocation(layoutEditor.getTurnoutBX(),0.0); - dispC.setLocation(layoutEditor.getTurnoutCX(),-layoutEditor.getTurnoutWid()); - } - else if (type==RH_TURNOUT) { - dispB.setLocation(layoutEditor.getTurnoutBX(),0.0); - dispC.setLocation(layoutEditor.getTurnoutCX(),layoutEditor.getTurnoutWid()); - } - else if (type==WYE_TURNOUT) { - dispB.setLocation(layoutEditor.getTurnoutBX(),0.5*layoutEditor.getTurnoutWid()); - dispC.setLocation(layoutEditor.getTurnoutBX(),-0.5*layoutEditor.getTurnoutWid()); - } - else if (type==DOUBLE_XOVER) { - dispB.setLocation(layoutEditor.getXOverLong(),-layoutEditor.getXOverHWid()); - dispC.setLocation(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); - blockB = null; - blockBName = ""; - blockC = null; - blockCName = ""; - blockD = null; - blockDName = ""; - } - else if (type==RH_XOVER) { - dispB.setLocation(layoutEditor.getXOverShort(),-layoutEditor.getXOverHWid()); - dispC.setLocation(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); - blockB = null; - blockBName = ""; - blockC = null; - blockCName = ""; - blockD = null; - blockDName = ""; - } - else if (type==LH_XOVER) { - dispB.setLocation(layoutEditor.getXOverLong(),-layoutEditor.getXOverHWid()); - dispC.setLocation(layoutEditor.getXOverShort(),layoutEditor.getXOverHWid()); - blockB = null; - blockBName = ""; - blockC = null; - blockCName = ""; - blockD = null; - blockDName = ""; - } + if (type==LH_TURNOUT) { + dispB.setLocation(layoutEditor.getTurnoutBX(),0.0); + dispC.setLocation(layoutEditor.getTurnoutCX(),-layoutEditor.getTurnoutWid()); + } + else if (type==RH_TURNOUT) { + dispB.setLocation(layoutEditor.getTurnoutBX(),0.0); + dispC.setLocation(layoutEditor.getTurnoutCX(),layoutEditor.getTurnoutWid()); + } + else if (type==WYE_TURNOUT) { + dispB.setLocation(layoutEditor.getTurnoutBX(),0.5*layoutEditor.getTurnoutWid()); + dispC.setLocation(layoutEditor.getTurnoutBX(),-0.5*layoutEditor.getTurnoutWid()); + } + else if (type==DOUBLE_XOVER) { + if(version ==2){ + center = new Point2D.Double(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); + pointB.setLocation(layoutEditor.getXOverLong()*2,0); + pointC.setLocation(layoutEditor.getXOverLong()*2,(layoutEditor.getXOverHWid()*2)); + pointD.setLocation(0,(layoutEditor.getXOverHWid()*2)); + setCoordsCenter(c); + } else { + dispB.setLocation(layoutEditor.getXOverLong(),-layoutEditor.getXOverHWid()); + dispC.setLocation(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); + } + blockB = null; + blockBName = ""; + blockC = null; + blockCName = ""; + blockD = null; + blockDName = ""; + } + else if (type==RH_XOVER) { + if(version ==2){ + center = new Point2D.Double(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); + pointB.setLocation((layoutEditor.getXOverShort()+layoutEditor.getXOverLong()),0); + pointC.setLocation(layoutEditor.getXOverLong()*2,(layoutEditor.getXOverHWid()*2)); + pointD.setLocation((center.getX()-layoutEditor.getXOverShort()),(layoutEditor.getXOverHWid()*2)); + setCoordsCenter(c); + } else { + dispB.setLocation(layoutEditor.getXOverShort(),-layoutEditor.getXOverHWid()); + dispC.setLocation(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); + } + blockB = null; + blockBName = ""; + blockC = null; + blockCName = ""; + blockD = null; + blockDName = ""; + } + else if (type==LH_XOVER) { + if(version ==2){ + center = new Point2D.Double(layoutEditor.getXOverLong(),layoutEditor.getXOverHWid()); + pointA.setLocation(20,0); + pointB.setLocation(60,0); + pointC.setLocation(40,20); + pointD.setLocation(0,20); + + pointA.setLocation((center.getX()-layoutEditor.getXOverShort()),0); + pointB.setLocation((layoutEditor.getXOverLong()*2),0); + pointC.setLocation(layoutEditor.getXOverLong()+layoutEditor.getXOverShort(),(layoutEditor.getXOverHWid()*2)); + pointD.setLocation(0, (layoutEditor.getXOverHWid()*2)); + + + setCoordsCenter(c); + } else { + dispB.setLocation(layoutEditor.getXOverLong(),-layoutEditor.getXOverHWid()); + dispC.setLocation(layoutEditor.getXOverShort(),layoutEditor.getXOverHWid()); + } + blockB = null; + blockBName = ""; + blockC = null; + blockCName = ""; + blockD = null; + blockDName = ""; + } rotateCoords(rot); // adjust size of new turnout Point2D pt = new Point2D.Double(round(dispB.getX()*xFactor), @@ -255,6 +300,7 @@ round(dispC.getY()*yFactor)); dispC = pt; } + private double round (double x) { int i = (int)(x+0.5); return i; @@ -264,17 +310,35 @@ // rotate coordinates double sineAng = Math.sin(rot*Math.PI/180.0); double cosineAng = Math.cos(rot*Math.PI/180.0); - double x = (cosineAng*dispB.getX()) - (sineAng*dispB.getY()); - double y = (sineAng*dispB.getX()) + (cosineAng*dispB.getY()); - dispB = new Point2D.Double(x,y); - x = (cosineAng*dispC.getX()) - (sineAng*dispC.getY()); - y = (sineAng*dispC.getX()) + (cosineAng*dispC.getY()); - dispC = new Point2D.Double(x,y); + + if(version == 2){ + pointA = rotatePoint(pointA, sineAng, cosineAng); + pointB = rotatePoint(pointB, sineAng, cosineAng); + pointC = rotatePoint(pointC, sineAng, cosineAng); + pointD = rotatePoint(pointD, sineAng, cosineAng); + } else { + double x = (cosineAng*dispB.getX()) - (sineAng*dispB.getY()); + double y = (sineAng*dispB.getX()) + (cosineAng*dispB.getY()); + dispB = new Point2D.Double(x,y); + x = (cosineAng*dispC.getX()) - (sineAng*dispC.getY()); + y = (sineAng*dispC.getX()) + (cosineAng*dispC.getY()); + dispC = new Point2D.Double(x,y); + } } + + protected Point2D rotatePoint(Point2D p, double sineAng, double cosineAng){ + double cX = center.getX(); + double cY = center.getY(); + double x = cX + cosineAng * (p.getX()-cX) - sineAng * (p.getY()-cY); + double y = cY + sineAng * (p.getX()-cX) + cosineAng * (p.getY()-cY); + return new Point2D.Double(x,y); + } /** * Accessor methods */ + public int getVersion() { return version;} + public void setVersion(int v) { version = v; } public String getName() {return ident;} public boolean useBlockSpeed() { return useBlockSpeed; } public String getTurnoutName() { @@ -660,6 +724,9 @@ public Point2D getCoordsCenter() {return center;} public Point2D getCoordsA() { if ( (type==DOUBLE_XOVER) || (type==LH_XOVER) || (type==RH_XOVER) ) { + if (version == 2){ + return pointA; + } double x = center.getX() - dispC.getX(); double y = center.getY() - dispC.getY(); return new Point2D.Double(x,y); @@ -676,16 +743,25 @@ } } public Point2D getCoordsB() { + if ((version == 2) && ((type==DOUBLE_XOVER) || (type==LH_XOVER) || (type==RH_XOVER))){ + return pointB; + } double x = center.getX() + dispB.getX(); double y = center.getY() + dispB.getY(); return new Point2D.Double(x,y); } public Point2D getCoordsC() { + if ((version == 2) && ((type==DOUBLE_XOVER) || (type==LH_XOVER) || (type==RH_XOVER))){ + return pointC; + } double x = center.getX() + dispC.getX(); double y = center.getY() + dispC.getY(); return new Point2D.Double(x,y); } public Point2D getCoordsD() { + if ((version == 2) && ((type==DOUBLE_XOVER) || (type==LH_XOVER) || (type==RH_XOVER))){ + return pointD; + } // only allowed for single and double crossovers double x = center.getX() - dispB.getX(); double y = center.getY() - dispB.getY(); @@ -751,26 +827,71 @@ layoutEditor.setTurnoutCX(round(xx+0.1)); layoutEditor.setTurnoutWid(round(distBC+0.1)); } - else if (type == DOUBLE_XOVER) { - double lng = Math.sqrt((lenB*lenB)-(0.25*(distBC*distBC))); - layoutEditor.setXOverLong(round(lng+0.1)); - layoutEditor.setXOverHWid(round((0.5*distBC)+0.1)); - layoutEditor.setXOverShort(round((0.5*lng)+0.1)); - } - else if (type == RH_XOVER) { - double distDC = Math.sqrt(((bX+cX)*(bX+cX)) + ((bY+cY)*(bY+cY))); - layoutEditor.setXOverShort(round((0.25*distDC)+0.1)); - layoutEditor.setXOverLong(round((0.75*distDC)+0.1)); - double hwid = Math.sqrt((lenC*lenC)-(0.5625*distDC*distDC)); - layoutEditor.setXOverHWid(round(hwid+0.1)); - } - else if (type == LH_XOVER) { - double distDC = Math.sqrt(((bX+cX)*(bX+cX)) + ((bY+cY)*(bY+cY))); - layoutEditor.setXOverShort(round((0.25*distDC)+0.1)); - layoutEditor.setXOverLong(round((0.75*distDC)+0.1)); - double hwid = Math.sqrt((lenC*lenC)-(0.0625*distDC*distDC)); - layoutEditor.setXOverHWid(round(hwid+0.1)); - } + else { + if(version == 2){ + double aX = pointA.getX()/layoutEditor.getXScale(); + double aY = pointA.getY()/layoutEditor.getYScale(); + bX = pointB.getX()/layoutEditor.getXScale(); + bY = pointB.getY()/layoutEditor.getYScale(); + cX = pointC.getX()/layoutEditor.getXScale(); + cY = pointC.getY()/layoutEditor.getYScale(); + double lenAB = Math.sqrt(((bX-aX)*(bX-aX))+((bY-aY)*(bY-aY))); + if (type == DOUBLE_XOVER){ + double lenBC = Math.sqrt(((bX-cX)*(bX-cX))+((bY-cY)*(bY-cY))); + layoutEditor.setXOverLong(round(lenAB/2)); //set to half to be backwardly compatible + layoutEditor.setXOverHWid(round(lenBC/2)); + layoutEditor.setXOverShort(round((0.5*lenAB)/2)); + } + else if (type == RH_XOVER) { + lenAB = lenAB/3; + layoutEditor.setXOverShort(round(lenAB)); + layoutEditor.setXOverLong(round(lenAB*2)); + double opp = (aY-bY); + double ang = Math.asin(opp/(lenAB*3)); + opp = Math.sin(ang)*lenAB; + bY = bY+opp; + double adj = Math.cos(ang)*lenAB; + bX = bX+adj; + double lenBC = Math.sqrt(((bX-cX)*(bX-cX))+((bY-cY)*(bY-cY))); + layoutEditor.setXOverHWid(round(lenBC/2)); + + } + else if (type == LH_XOVER) { + double dY = pointD.getY()/layoutEditor.getYScale(); + lenAB = lenAB/3; + layoutEditor.setXOverShort(round(lenAB)); + layoutEditor.setXOverLong(round(lenAB*2)); + double opp = (dY-cY); + double ang = Math.asin(opp/(lenAB*3)); //Lenght of AB should be the same as CD + opp = Math.sin(ang)*lenAB; + cY = cY+opp; + double adj = Math.cos(ang)*lenAB; + cX = cX+adj; + double lenBC = Math.sqrt(((bX-cX)*(bX-cX))+((bY-cY)*(bY-cY))); + layoutEditor.setXOverHWid(round(lenBC/2)); + } + } + else if (type == DOUBLE_XOVER) { + double lng = Math.sqrt((lenB*lenB)-(0.25*(distBC*distBC))); + layoutEditor.setXOverLong(round(lng+0.1)); + layoutEditor.setXOverHWid(round((0.5*distBC)+0.1)); + layoutEditor.setXOverShort(round((0.5*lng)+0.1)); + } + else if (type == RH_XOVER) { + double distDC = Math.sqrt(((bX+cX)*(bX+cX)) + ((bY+cY)*(bY+cY))); + layoutEditor.setXOverShort(round((0.25*distDC)+0.1)); + layoutEditor.setXOverLong(round((0.75*distDC)+0.1)); + double hwid = Math.sqrt((lenC*lenC)-(0.5625*distDC*distDC)); + layoutEditor.setXOverHWid(round(hwid+0.1)); + } + else if (type == LH_XOVER) { + double distDC = Math.sqrt(((bX+cX)*(bX+cX)) + ((bY+cY)*(bY+cY))); + layoutEditor.setXOverShort(round((0.25*distDC)+0.1)); + layoutEditor.setXOverLong(round((0.75*distDC)+0.1)); + double hwid = Math.sqrt((lenC*lenC)-(0.0625*distDC*distDC)); + layoutEditor.setXOverHWid(round(hwid+0.1)); + } + } } /** @@ -918,9 +1039,30 @@ * Modify coordinates methods */ public void setCoordsCenter(Point2D p) { + if(version == 2) { + Point2D oldC = center; + double offsety = oldC.getY()-p.getY(); + double offsetx = oldC.getX()-p.getX(); + pointA = new Point2D.Double(pointA.getX()-offsetx, pointA.getY()-offsety); + pointB = new Point2D.Double(pointB.getX()-offsetx, pointB.getY()-offsety); + pointC = new Point2D.Double(pointC.getX()-offsetx, pointC.getY()-offsety); + pointD = new Point2D.Double(pointD.getX()-offsetx, pointD.getY()-offsety); + } center = p; } + + private void reCalculateCenter(){ + double centreX = (pointC.getX()-pointA.getX())/2; + double centreY = (pointC.getY()-pointA.getY())/2; + centreX = pointA.getX()+centreX; + centreY = pointA.getY()+centreY; + center = new Point2D.Double(centreX,centreY); + } + public void setCoordsA(Point2D p) { + pointA = p; + if(version == 2) + reCalculateCenter(); double x = center.getX() - p.getX(); double y = center.getY() - p.getY(); if (type == DOUBLE_XOVER) { @@ -976,6 +1118,7 @@ } } public void setCoordsB(Point2D p) { + pointB = p; double x = center.getX() - p.getX(); double y = center.getY() - p.getY(); dispB = new Point2D.Double(-x,-y); @@ -1012,6 +1155,9 @@ } } public void setCoordsC(Point2D p) { + pointC = p; + if(version == 2) + reCalculateCenter(); double x = center.getX() - p.getX(); double y = center.getY() - p.getY(); dispC = new Point2D.Double(-x,-y); @@ -1047,6 +1193,8 @@ } } public void setCoordsD(Point2D p) { + pointD = p; + // only used for crossovers double x = center.getX() - p.getX(); double y = center.getY() - p.getY(); @@ -1087,12 +1235,24 @@ Point2D pt = new Point2D.Double(round(center.getX()*xFactor), round(center.getY()*yFactor)); center = pt; - pt = new Point2D.Double(round(dispB.getX()*xFactor), - round(dispB.getY()*yFactor)); - dispB = pt; - pt = new Point2D.Double(round(dispC.getX()*xFactor), - round(dispC.getY()*yFactor)); - dispC = pt; + + if(version == 2){ + pointA = new Point2D.Double(round(pointA.getX()*xFactor), + round(pointA.getY()*yFactor)); + pointB = new Point2D.Double(round(pointB.getX()*xFactor), + round(pointB.getY()*yFactor)); + pointC = new Point2D.Double(round(pointC.getX()*xFactor), + round(pointC.getY()*yFactor)); + pointD = new Point2D.Double(round(pointD.getX()*xFactor), + round(pointD.getY()*yFactor)); + } else { + pt = new Point2D.Double(round(dispB.getX()*xFactor), + round(dispB.getY()*yFactor)); + dispB = pt; + pt = new Point2D.Double(round(dispC.getX()*xFactor), + round(dispC.getY()*yFactor)); + dispC = pt; + } } /** Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2014-03-12 11:21:53 UTC (rev 25372) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/configurexml/LayoutTurnoutXml.java 2014-03-12 13:26:41 UTC (rev 25373) @@ -138,13 +138,19 @@ Point2D coords = p.getCoordsCenter(); element.setAttribute("xcen", ""+coords.getX()); element.setAttribute("ycen", ""+coords.getY()); + coords = p.getCoordsA(); + element.setAttribute("xa", ""+coords.getX()); + element.setAttribute("ya", ""+coords.getY()); coords = p.getCoordsB(); element.setAttribute("xb", ""+coords.getX()); element.setAttribute("yb", ""+coords.getY()); coords = p.getCoordsC(); element.setAttribute("xc", ""+coords.getX()); element.setAttribute("yc", ""+coords.getY()); - + coords = p.getCoordsD(); + element.setAttribute("xd", ""+coords.getX()); + element.setAttribute("yd", ""+coords.getY()); + element.setAttribute("ver", ""+p.getVersion()); element.setAttribute("class", "jmri.jmrit.display.configurexml.LayoutTurnoutXml"); return element; } @@ -176,10 +182,19 @@ } catch (org.jdom.DataConversionException e) { log.error("failed to convert layoutturnout attribute"); } + + int version = 1; + try { + version = element.getAttribute("ver").getIntValue(); + } catch (org.jdom.DataConversionException e) { + log.error("failed to convert layoutturnout b coords attribute"); + } catch (java.lang.NullPointerException e){ + //can be ignored as panel file may not support method + } // create the new LayoutTurnout LayoutTurnout l = new LayoutTurnout(name,tType, - new Point2D.Double(x,y),0.0,1.0,1.0,p); + new Point2D.Double(x,y),0.0,1.0,1.0,p, version); // get remaining attributes Attribute a = element.getAttribute("blockname"); @@ -291,6 +306,16 @@ hide = true; } l.setHidden(hide); + try { + x = element.getAttribute("xa").getFloatValue(); + y = element.getAttribute("ya").getFloatValue(); + l.setCoordsA(new Point2D.Double(x,y)); + } catch (org.jdom.DataConversionException e) { + log.error("failed to convert layoutturnout b coords attribute"); + } catch (java.lang.NullPointerException e){ + //can be ignored as panel file may not support method + } + try { x = element.getAttribute("xb").getFloatValue(); y = element.getAttribute("yb").getFloatValue(); @@ -305,6 +330,16 @@ log.error("failed to convert layoutturnout c coords attribute"); } l.setCoordsC(new Point2D.Double(x,y)); + try { + x = element.getAttribute("xd").getFloatValue(); + y = element.getAttribute("yd").getFloatValue(); + l.setCoordsD(new Point2D.Double(x,y)); + } catch (org.jdom.DataConversionException e) { + log.error("failed to convert layoutturnout c coords attribute"); + } catch (java.lang.NullPointerException e){ + //can be ignored as panel file may not support method + } + if (element.getChild("signalAMast")!=null){ String mast = element.getChild("signalAMast").getText(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-06-16 12:16:03
|
Revision: 26320 http://sourceforge.net/p/jmri/code/26320 Author: kevin-dickerson Date: 2014-06-16 12:15:59 +0000 (Mon, 16 Jun 2014) Log Message: ----------- On circular track segments remove the construction line directly between the two points and move the selection area (defined by a circle) to be on the track. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-16 09:54:25 UTC (rev 26319) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-16 12:15:59 UTC (rev 26320) @@ -3214,22 +3214,32 @@ TrackSegment tr = trackList.get(i); Object o = tr.getConnect1(); int type = tr.getType1(); - // get coordinates of first end point - Point2D pt1 = getEndCoords(o,type); - o = tr.getConnect2(); - type = tr.getType2(); - // get coordinates of second end point - Point2D pt2 = getEndCoords(o,type); - // construct a detection rectangle - double cX = (pt1.getX() + pt2.getX())/2.0D; - double cY = (pt1.getY() + pt2.getY())/2.0D; - Rectangle2D r = new Rectangle2D.Double( - cX - SIZE2,cY - SIZE2,SIZE2+SIZE2,SIZE2+SIZE2); - // Test this detection rectangle - if (r.contains(loc)) { - // mouse was pressed in detection rectangle - return tr; - } + if(tr.getCircle()){ + Rectangle2D r = new Rectangle2D.Double( + tr.getCentreSegX() - SIZE2,tr.getCentreSegY() - SIZE2,SIZE2+SIZE2,SIZE2+SIZE2); + // Test this detection rectangle + if (r.contains(loc)) { + // mouse was pressed in detection rectangle + return tr; + } + } else { + // get coordinates of first end point + Point2D pt1 = getEndCoords(o,type); + o = tr.getConnect2(); + type = tr.getType2(); + // get coordinates of second end point + Point2D pt2 = getEndCoords(o,type); + // construct a detection rectangle + double cX = (pt1.getX() + pt2.getX())/2.0D; + double cY = (pt1.getY() + pt2.getY())/2.0D; + Rectangle2D r = new Rectangle2D.Double( + cX - SIZE2,cY - SIZE2,SIZE2+SIZE2,SIZE2+SIZE2); + // Test this detection rectangle + if (r.contains(loc)) { + // mouse was pressed in detection rectangle + return tr; + } + } } return null; } @@ -8461,11 +8471,18 @@ // Circle - Compute center t.setCentreX(pt2x - java.lang.Math.cos(startRad) * radius); t.setCentreY(pt2y + java.lang.Math.sin(startRad) * radius); + // Circle - Compute rectangle required by Arc2D.Double t.setCW(radius * 2.0D); t.setCH(radius * 2.0D); t.setCX(t.getCentreX()-(radius)); t.setCY(t.getCentreY()-(radius)); + + //Compute the vlues for locating the circle + + t.setCentreSegX(t.getCentreX() + radius*java.lang.Math.cos(startRad+halfAngle)); + t.setCentreSegY(t.getCentreY() - java.lang.Math.sin(startRad+halfAngle) * radius); + } else { // Elipse - Round start angle to the closest multiple of 90 @@ -8556,24 +8573,26 @@ // loop over all defined track segments g2.setColor(defaultTrackColor); for (int i = 0; i<trackList.size();i++) { - TrackSegment t = trackList.get(i); - Point2D pt1 = getCoords(t.getConnect1(),t.getType1()); - Point2D pt2 = getCoords(t.getConnect2(),t.getType2()); - double cX = (pt1.getX() + pt2.getX())/2.0D; - double cY = (pt1.getY() + pt2.getY())/2.0D; - g2.draw(new Ellipse2D.Double (cX-SIZE2, cY-SIZE2, SIZE2+SIZE2, SIZE2+SIZE2)); - if (t.getArc()) { - LayoutBlock b = t.getLayoutBlock(); - if (b!=null) g2.setColor(b.getBlockColor()); - else g2.setColor(defaultTrackColor); - g2.draw(new Line2D.Double(getCoords(t.getConnect1(),t.getType1()), getCoords(t.getConnect2(),t.getType2()))); - if (t.getCircle()){ - g2.draw(new Line2D.Double(getCoords(t.getConnect1(),t.getType1()), new Point2D.Double(t.getCentreX(),t.getCentreY()))); - g2.draw(new Line2D.Double(getCoords(t.getConnect2(),t.getType2()), new Point2D.Double(t.getCentreX(),t.getCentreY()))); - + TrackSegment t = trackList.get(i); + LayoutBlock b = t.getLayoutBlock(); + if (b!=null) g2.setColor(b.getBlockColor()); + else g2.setColor(defaultTrackColor); + if (t.getCircle()) { + g2.draw(new Line2D.Double(getCoords(t.getConnect1(),t.getType1()), new Point2D.Double(t.getCentreX(),t.getCentreY()))); + g2.draw(new Line2D.Double(getCoords(t.getConnect2(),t.getType2()), new Point2D.Double(t.getCentreX(),t.getCentreY()))); + + g2.draw(new Ellipse2D.Double (t.getCentreSegX()-SIZE2, t.getCentreSegY()-SIZE2, SIZE2+SIZE2, SIZE2+SIZE2)); + } else { + Point2D pt1 = getCoords(t.getConnect1(),t.getType1()); + Point2D pt2 = getCoords(t.getConnect2(),t.getType2()); + double cX = (pt1.getX() + pt2.getX())/2.0D; + double cY = (pt1.getY() + pt2.getY())/2.0D; + g2.draw(new Ellipse2D.Double (cX-SIZE2, cY-SIZE2, SIZE2+SIZE2, SIZE2+SIZE2)); + if(t.getArc()){ + g2.draw(new Line2D.Double(getCoords(t.getConnect1(),t.getType1()), getCoords(t.getConnect2(),t.getType2()))); } - g2.setColor(defaultTrackColor); - } + } + g2.setColor(defaultTrackColor); } } Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2014-06-16 09:54:25 UTC (rev 26319) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2014-06-16 12:15:59 UTC (rev 26320) @@ -686,6 +686,24 @@ startadj = Startadj; } + private double centreSegX; + public double getCentreSegX(){ + return centreSegX; + } + + public void setCentreSegX(double CentreX){ + centreSegX = CentreX; + } + + private double centreSegY; + public double getCentreSegY(){ + return centreSegY; + } + + public void setCentreSegY(double CentreY){ + centreSegY = CentreY; + } + private double centreX; public double getCentreX(){ return centreX; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-06-19 13:56:35
|
Revision: 26360 http://sourceforge.net/p/jmri/code/26360 Author: kevin-dickerson Date: 2014-06-19 13:56:24 +0000 (Thu, 19 Jun 2014) Log Message: ----------- Improve one some editing features on the layout editor, when you remove a turnout/slip/turntable/crossing, the track segments are left and anchor points are put in the place of previous objects connecting points. You can now join a track segment connected to an Anchor point by moving the anchor point of the track segment over another anchor point. (if that makes sense!) Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -2915,27 +2915,33 @@ return; } + + private boolean checkSelect(Point2D loc, boolean requireUnconnected) { + return checkSelect(loc, requireUnconnected, null); + } - private boolean checkSelect(Point2D loc, boolean requireUnconnected) { + private boolean checkSelect(Point2D loc, boolean requireUnconnected, Object avoid) { // check positionable points, if any for (int i = 0; i<pointList.size();i++) { PositionablePoint p = pointList.get(i); - if ( (p!=selectedObject) && !requireUnconnected || - (p.getConnect1()==null) || - ((p.getType()==PositionablePoint.ANCHOR) && - (p.getConnect2()==null)) ) { - Point2D pt = p.getCoords(); - Rectangle2D r = new Rectangle2D.Double( - pt.getX() - SIZE,pt.getY() - SIZE,SIZE2,SIZE2); - if (r.contains(loc)) { - // mouse was pressed on this connection point - foundLocation = pt; - foundObject = p; - foundPointType = POS_POINT; - foundNeedsConnect = ((p.getConnect1()==null)||(p.getConnect2()==null)); - return true; - } - } + if(p!=avoid){ + if ( (p!=selectedObject) && !requireUnconnected || + (p.getConnect1()==null) || + ((p.getType()==PositionablePoint.ANCHOR) && + (p.getConnect2()==null)) ) { + Point2D pt = p.getCoords(); + Rectangle2D r = new Rectangle2D.Double( + pt.getX() - SIZE,pt.getY() - SIZE,SIZE2,SIZE2); + if (r.contains(loc)) { + // mouse was pressed on this connection point + foundLocation = pt; + foundObject = p; + foundPointType = POS_POINT; + foundNeedsConnect = ((p.getConnect1()==null)||(p.getConnect2()==null)); + return true; + } + } + } } // check turnouts, if any for (int i = 0; i<turnoutList.size();i++) { @@ -3581,7 +3587,14 @@ (!event.isShiftDown()) && (!event.isControlDown()) && isDragging ) { // controlling layout, in edit mode checkPointsOfTurnout((LayoutTurnout) selectedObject); - } + } else if (selectedObject!=null && selectedPointType==POS_POINT && + allControlling() && (event.isMetaDown()) && (!event.isAltDown()) && + (!event.isShiftDown()) && (!event.isControlDown()) && isDragging ){ + PositionablePoint p = (PositionablePoint) selectedObject; + if(p.getConnect1()==null || p.getConnect2()==null){ + checkPointOfPositionable(p); + } + } if ( (trackBox.isSelected()) && (beginObject!=null) && (foundObject!=null) ) { // user let up shift key before releasing the mouse when creating a track segment setCursor(Cursor.getDefaultCursor()); @@ -3936,6 +3949,121 @@ return; } + private void checkPointOfPositionable(PositionablePoint p){ + TrackSegment t = p.getConnect1(); + if(t==null) + t=p.getConnect2(); + //Nothing connected to this bit of track so ignore + if(t==null){ + return; + } + beginObject = p; + beginPointType = POS_POINT; + Point2D loc = p.getCoords(); + + if (checkSelect(loc, true, p)) { + switch (foundPointType) { + case POS_POINT: PositionablePoint p2 = (PositionablePoint)foundObject; + if(p2.getType()==PositionablePoint.ANCHOR && p2.setTrackConnection(t)){ + if(t.getConnect1()==p){ + t.setNewConnect1(p2, POS_POINT); + } else { + t.setNewConnect2(p2, POS_POINT); + } + p.removeTrackConnection(t); + if(p.getConnect1()==null && p.getConnect2()==null){ + removePositionablePoint(p); + } + } + break; + case TURNOUT_A: + case TURNOUT_B: + case TURNOUT_C: + case TURNOUT_D: LayoutTurnout lt = (LayoutTurnout)foundObject; + try { + if(lt.getConnection(foundPointType)==null){ + lt.setConnection(foundPointType, t, TRACK); + if(t.getConnect1()==p) + t.setNewConnect1(lt, foundPointType); + else + t.setNewConnect2(lt, foundPointType); + p.removeTrackConnection(t); + if(p.getConnect1()==null && p.getConnect2()==null){ + removePositionablePoint(p); + } + } + } catch (jmri.JmriException e){ + log.debug("Unable to set location"); + } + break; + case LEVEL_XING_A: + case LEVEL_XING_B: + case LEVEL_XING_C: + case LEVEL_XING_D: LevelXing lx = (LevelXing)foundObject; + try { + if(lx.getConnection(foundPointType)==null){ + lx.setConnection(foundPointType, t, TRACK); + if(t.getConnect1()==p) + t.setNewConnect1(lx, foundPointType); + else + t.setNewConnect2(lx, foundPointType); + p.removeTrackConnection(t); + if(p.getConnect1()==null && p.getConnect2()==null){ + removePositionablePoint(p); + } + } + } catch (jmri.JmriException e){ + log.debug("Unable to set location"); + } + break; + case SLIP_A: + case SLIP_B: + case SLIP_C: + case SLIP_D: LayoutSlip ls = (LayoutSlip)foundObject; + try { + if(ls.getConnection(foundPointType)==null){ + ls.setConnection(foundPointType, t, TRACK); + if(t.getConnect1()==p) + t.setNewConnect1(ls, foundPointType); + else + t.setNewConnect2(ls, foundPointType); + p.removeTrackConnection(t); + if(p.getConnect1()==null && p.getConnect2()==null){ + removePositionablePoint(p); + } + } + } catch (jmri.JmriException e){ + log.debug("Unable to set location"); + } + break; + default: + if (foundPointType>=TURNTABLE_RAY_OFFSET) { + LayoutTurntable tt = (LayoutTurntable)foundObject; + int ray = foundPointType-TURNTABLE_RAY_OFFSET; + if(tt.getRayConnectIndexed(ray)==null){ + tt.setRayConnect(t, ray); + if(t.getConnect1()==p) + t.setNewConnect1(tt, foundPointType); + else + t.setNewConnect2(tt, foundPointType); + p.removeTrackConnection(t); + if(p.getConnect1()==null && p.getConnect2()==null){ + removePositionablePoint(p); + } + } + } else { + log.debug("No valid point, so will quit"); + return; + } + } + repaint(); + if(t.getLayoutBlock()!=null) + auxTools.setBlockConnectivityChanged(); + } + beginObject = null; + foundObject = null; + } + private void checkPointsOfTurnout(LayoutTurnout lt){ beginObject = lt; if(lt.getConnectA()==null){ @@ -3965,14 +4093,40 @@ private void checkPointsOfTurnoutSub(Point2D dLoc){ if (checkSelect(dLoc, true)) { - LayoutTurnout ft = (LayoutTurnout)foundObject; switch (foundPointType) { - case POS_POINT: - break; + case POS_POINT: PositionablePoint p2 = (PositionablePoint)foundObject; + if((p2.getConnect1()==null && p2.getConnect2()!=null) || + (p2.getConnect1()!=null && p2.getConnect2()==null) ){ + TrackSegment t = p2.getConnect1(); + if(t==null) + t = p2.getConnect2(); + if(t==null) return; + LayoutTurnout lt = (LayoutTurnout) beginObject; + try { + if(lt.getConnection(beginPointType)==null){ + lt.setConnection(beginPointType, t, TRACK); + p2.removeTrackConnection(t); + if(t.getConnect1()==null) + t.setNewConnect1(lt, beginPointType); + else + t.setNewConnect2(lt, beginPointType); + + removePositionablePoint(p2); + + + } + if(t.getLayoutBlock()!=null) + auxTools.setBlockConnectivityChanged(); + } catch (jmri.JmriException e){ + log.debug("Unable to set location"); + } + } + break; case TURNOUT_A: case TURNOUT_B: case TURNOUT_C: case TURNOUT_D: + LayoutTurnout ft = (LayoutTurnout)foundObject; addTrackSegment(); if(ft.getTurnoutType()==LayoutTurnout.RH_TURNOUT || ft.getTurnoutType()==LayoutTurnout.LH_TURNOUT){ rotateTurnout(ft); @@ -5310,7 +5464,11 @@ * Add an Anchor point. */ public void addAnchor() { - numAnchors ++; + addAnchor(currentPoint); + } + + private PositionablePoint addAnchor(Point2D p){ + numAnchors ++; // get unique name String name = ""; boolean duplicate = true; @@ -5321,12 +5479,13 @@ } // create object PositionablePoint o = new PositionablePoint(name, - PositionablePoint.ANCHOR, currentPoint, this); + PositionablePoint.ANCHOR, p, this); //if (o!=null) { pointList.add(o); setDirty(true); //} - } + return o; + } /** * Add an End Bumper point. @@ -5941,28 +6100,30 @@ * Remove a PositionablePoint -- an Anchor or an End Bumper. */ protected boolean removePositionablePoint(PositionablePoint o) { - // First verify with the user that this is really wanted - if (!noWarnPositionablePoint) { - int selectedValue = JOptionPane.showOptionDialog(this, - rb.getString("Question2"),rb.getString("WarningTitle"), - JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, - new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), - rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); - if (selectedValue == 1) return(false); // return without creating if "No" response - if (selectedValue == 2) { - // Suppress future warnings, and continue - noWarnPositionablePoint = true; - } - } - // remove from selection information - if (selectedObject==o) selectedObject = null; - if (prevSelectedObject==o) prevSelectedObject = null; - // remove connections if any - TrackSegment t = o.getConnect1(); - if (t!=null) removeTrackSegment(t); - t = o.getConnect2(); - if (t!=null) removeTrackSegment(t); - // delete from array + // First verify with the user that this is really wanted, only show message if there is a bit of track connected + if(o.getConnect1()!=null || o.getConnect2()!=null){ + if (!noWarnPositionablePoint) { + int selectedValue = JOptionPane.showOptionDialog(this, + rb.getString("Question2"),rb.getString("WarningTitle"), + JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, + new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), + rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); + if (selectedValue == 1) return(false); // return without creating if "No" response + if (selectedValue == 2) { + // Suppress future warnings, and continue + noWarnPositionablePoint = true; + } + } + // remove from selection information + if (selectedObject==o) selectedObject = null; + if (prevSelectedObject==o) prevSelectedObject = null; + // remove connections if any + TrackSegment t = o.getConnect1(); + if (t!=null) removeTrackSegment(t); + t = o.getConnect2(); + if (t!=null) removeTrackSegment(t); + // delete from array + } for (int i = 0; i<pointList.size();i++) { PositionablePoint p = pointList.get(i); if (p==o) { @@ -5985,7 +6146,7 @@ // First verify with the user that this is really wanted if (!noWarnLayoutTurnout) { int selectedValue = JOptionPane.showOptionDialog(this, - rb.getString("Question1"),rb.getString("WarningTitle"), + rb.getString("Question1r"),rb.getString("WarningTitle"), JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); @@ -6000,13 +6161,13 @@ if (prevSelectedObject==o) prevSelectedObject = null; // remove connections if any TrackSegment t = (TrackSegment)o.getConnectA(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsA(), o, t); t = (TrackSegment)o.getConnectB(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsB(), o, t); t = (TrackSegment)o.getConnectC(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsC(), o, t); t = (TrackSegment)o.getConnectD(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsD(), o, t); // decrement Block use count(s) LayoutBlock b = o.getLayoutBlock(); if (b!=null) b.decrementUse(); @@ -6034,6 +6195,17 @@ } return(false); } + + private void substituteAnchor(Point2D loc, Object o, TrackSegment t){ + PositionablePoint p = addAnchor(loc); + if(t.getConnect1()==o){ + t.setNewConnect1(p, POS_POINT); + } + if(t.getConnect2()==o) { + t.setNewConnect2(p, POS_POINT); + } + p.setTrackConnection(t); + } boolean noWarnLevelXing = false; @@ -6044,7 +6216,7 @@ // First verify with the user that this is really wanted if (!noWarnLevelXing) { int selectedValue = JOptionPane.showOptionDialog(this, - rb.getString("Question3"),rb.getString("WarningTitle"), + rb.getString("Question3r"),rb.getString("WarningTitle"), JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); @@ -6059,13 +6231,13 @@ if (prevSelectedObject==o) prevSelectedObject = null; // remove connections if any TrackSegment t = (TrackSegment)o.getConnectA(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsA(), o, t); t = (TrackSegment)o.getConnectB(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsB(), o, t); t = (TrackSegment)o.getConnectC(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsC(), o, t); t = (TrackSegment)o.getConnectD(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsD(), o, t); // decrement block use count if any blocks in use LayoutBlock lb = o.getLayoutBlockAC(); if (lb != null) lb.decrementUse(); @@ -6095,7 +6267,7 @@ // First verify with the user that this is really wanted if (!noWarnSlip) { int selectedValue = JOptionPane.showOptionDialog(this, - rb.getString("Question5"),rb.getString("WarningTitle"), + rb.getString("Question5r"),rb.getString("WarningTitle"), JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); @@ -6110,13 +6282,13 @@ if (prevSelectedObject==o) prevSelectedObject = null; // remove connections if any TrackSegment t = (TrackSegment)o.getConnectA(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsA(), o, t); t = (TrackSegment)o.getConnectB(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsB(), o, t); t = (TrackSegment)o.getConnectC(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsC(), o, t); t = (TrackSegment)o.getConnectD(); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getCoordsD(), o, t); // decrement block use count if any blocks in use LayoutBlock lb = o.getLayoutBlock(); if (lb != null) lb.decrementUse(); @@ -6145,7 +6317,7 @@ // First verify with the user that this is really wanted if (!noWarnTurntable) { int selectedValue = JOptionPane.showOptionDialog(this, - rb.getString("Question4"),rb.getString("WarningTitle"), + rb.getString("Question4r"),rb.getString("WarningTitle"), JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"), rb.getString("ButtonYesPlus")},rb.getString("ButtonNo")); @@ -6161,7 +6333,7 @@ // remove connections if any for (int j = 0; j<o.getNumberRays();j++) { TrackSegment t = o.getRayConnectOrdered(j); - if (t!=null) removeTrackSegment(t); + if (t!=null) substituteAnchor(o.getRayCoordsIndexed(j), o, t); } // delete from array for (int i = 0; i<turntableList.size();i++) { @@ -6281,7 +6453,7 @@ default: if (type>=TURNTABLE_RAY_OFFSET) { ((LayoutTurntable)o).setRayConnect(null,type-TURNTABLE_RAY_OFFSET); - } + } } } @@ -8419,7 +8591,6 @@ for (int i = 0; i<trackList.size();i++) { setTrackStrokeWidth(g2, isMainline); TrackSegment t = trackList.get(i); - //log.info("" + t.getID()); if ( (!t.getHidden()) && (!t.getDashed()) && (isMainline == t.getMainline()) ) { LayoutBlock b = t.getLayoutBlock(); if (b!=null) g2.setColor(b.getBlockColor()); @@ -8430,9 +8601,7 @@ g2.draw(new Arc2D.Double(t.getCX(), t.getCY(), t.getCW(), t.getCH(), t.getStartadj(), t.getTmpAngle(), Arc2D.OPEN)); } else { Point2D end1 = getCoords(t.getConnect1(),t.getType1()); - //log.info("" + end1); Point2D end2 = getCoords(t.getConnect2(),t.getType2()); - //log.info("" + end2); g2.draw(new Line2D.Double(end1, end2 )); } t.trackRedrawn(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-06-19 13:56:24 UTC (rev 26360) @@ -489,10 +489,14 @@ ButtonOKPlus = OK - Stop Warnings WarningTitle = Warning Question1 = Are you sure you want to remove this turnout from the panel, along with any connected Track Segments? +Question1r = Are you sure you want to remove this turnout from the panel? Question2 = Are you sure you want to remove this point from the panel, along with any connected Track Segments? Question3 = Are you sure you want to remove this level crossing from the panel, along with any connected Track Segments? +Question3r = Are you sure you want to remove this level crossing from the panel? Question4 = Are you sure you want to remove this turntable from the panel, along with any connected Track Segments? +Question4r = Are you sure you want to remove this turntable from the panel? Question5 = Are you sure you want to remove this slip from the panel, along with any connected Track Segments? +Question5r = Are you sure you want to remove this slip from the panel? Question6 = Are you sure you want to remove all the selected items, along with any connected Track Segments? Question7 = Are you sure you want to remove this ray from the turntable, along with any connected Track Segments? Warn1 = Warning - Connectivities for block "{0}" in panels "{1}" and "{2}" are not compatible. Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutSlip.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -139,6 +139,36 @@ } } + public Object getConnection(int location) throws jmri.JmriException { + switch (location) { + case LayoutEditor.SLIP_A: return connectA; + case LayoutEditor.SLIP_B: return connectB; + case LayoutEditor.SLIP_C: return connectC; + case LayoutEditor.SLIP_D: return connectD; + } + log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + + public void setConnection(int location, Object o, int type) throws jmri.JmriException { + if ( (type!=LayoutEditor.TRACK) && (type!=LayoutEditor.NONE) ) { + log.error("unexpected type of connection to layoutturnout - "+type); + throw new jmri.JmriException("unexpected type of connection to layoutturnout - "+type); + } + switch (location) { + case LayoutEditor.SLIP_A: connectA = o; + break; + case LayoutEditor.SLIP_B: connectB = o; + break; + case LayoutEditor.SLIP_C: connectC=o; + break; + case LayoutEditor.SLIP_D: connectD=o; + break; + default : log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + } + public String getDisplayName(){ String name = "Slip :"; if(getTurnoutName()!=null){ Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -684,6 +684,37 @@ public void setDisableWhenOccupied(boolean state) {disableWhenOccupied = state;} public boolean isDisabledWhenOccupied() {return disableWhenOccupied;} + + public Object getConnection(int location) throws jmri.JmriException { + switch (location) { + case LayoutEditor.TURNOUT_A: return connectA; + case LayoutEditor.TURNOUT_B: return connectB; + case LayoutEditor.TURNOUT_C: return connectC; + case LayoutEditor.TURNOUT_D: return connectD; + } + log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + + public void setConnection(int location, Object o, int type) throws jmri.JmriException { + if ( (type!=LayoutEditor.TRACK) && (type!=LayoutEditor.NONE) ) { + log.error("unexpected type of connection to layoutturnout - "+type); + throw new jmri.JmriException("unexpected type of connection to layoutturnout - "+type); + } + switch (location) { + case LayoutEditor.TURNOUT_A: connectA = o; + break; + case LayoutEditor.TURNOUT_B: connectB = o; + break; + case LayoutEditor.TURNOUT_C: connectC=o; + break; + case LayoutEditor.TURNOUT_D: connectD=o; + break; + default : log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + } + public void setConnectA(Object o,int type) { connectA = o; if ( (type!=LayoutEditor.TRACK) && (type!=LayoutEditor.NONE) ) { Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -334,6 +334,36 @@ } } + public Object getConnection(int location) throws jmri.JmriException { + switch (location) { + case LayoutEditor.LEVEL_XING_A: return connectA; + case LayoutEditor.LEVEL_XING_B: return connectB; + case LayoutEditor.LEVEL_XING_C: return connectC; + case LayoutEditor.LEVEL_XING_D: return connectD; + } + log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + + public void setConnection(int location, Object o, int type) throws jmri.JmriException { + if ( (type!=LayoutEditor.TRACK) && (type!=LayoutEditor.NONE) ) { + log.error("unexpected type of connection to layoutturnout - "+type); + throw new jmri.JmriException("unexpected type of connection to layoutturnout - "+type); + } + switch (location) { + case LayoutEditor.LEVEL_XING_A: connectA = o; + break; + case LayoutEditor.LEVEL_XING_B: connectB = o; + break; + case LayoutEditor.LEVEL_XING_C: connectC=o; + break; + case LayoutEditor.LEVEL_XING_D: connectD=o; + break; + default : log.error("Invalid Point Type " + location); //I18IN + throw new jmri.JmriException("Invalid Point"); + } + } + public Object getConnectA() {return connectA;} public Object getConnectB() {return connectB;} public Object getConnectC() {return connectC;} Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/PositionablePoint.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -417,9 +417,9 @@ /** * Setup and remove connections to track */ - public void setTrackConnection (TrackSegment track) { + public boolean setTrackConnection (TrackSegment track) { if (track==null) { - return; + return false; } if ( (connect1!=track) && (connect2!=track) ) { // not connected to this track @@ -437,8 +437,10 @@ } else { log.error ("Attempt to assign more than allowed number of connections"); + return false; } } + return true; } public void removeTrackConnection (TrackSegment track) { Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2014-06-19 12:39:05 UTC (rev 26359) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/TrackSegment.java 2014-06-19 13:56:24 UTC (rev 26360) @@ -123,6 +123,15 @@ public int getType2() {return type2;} public Object getConnect1() {return connect1;} public Object getConnect2() {return connect2;} + protected void setNewConnect1(Object o, int type){ + connect1 = o; + type1 = type; + + } + protected void setNewConnect2(Object o, int type){ + connect2 = o; + type2 = type; + } public boolean getDashed() {return dashed;} public void setDashed(boolean dash) {dashed = dash;} public boolean getHidden() {return hidden;} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kev...@us...> - 2014-06-26 11:52:42
|
Revision: 26454 http://sourceforge.net/p/jmri/code/26454 Author: kevin-dickerson Date: 2014-06-26 11:52:40 +0000 (Thu, 26 Jun 2014) Log Message: ----------- When removing a signal mast from a panel, also ask the user if they want to remove any references to the mast that might occur in turnouts, boundary points, slips and level crossings. Modified Paths: -------------- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-26 11:00:19 UTC (rev 26453) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java 2014-06-26 11:52:40 UTC (rev 26454) @@ -113,7 +113,6 @@ public ArrayList<PositionableLabel> backgroundImage = new ArrayList<PositionableLabel>(); // background images public ArrayList<SensorIcon> sensorImage = new ArrayList<SensorIcon>(); // sensor images public ArrayList<SignalHeadIcon> signalHeadImage = new ArrayList<SignalHeadIcon>(); // signal head images - public ArrayList<SignalMastIcon> signalMastImage = new ArrayList<SignalMastIcon>(); // signal mast images public ArrayList<LocoIcon> markerImage = new ArrayList<LocoIcon>(); // marker images public ArrayList<PositionableLabel> labelImage = new ArrayList<PositionableLabel>(); // layout positionable label images public ArrayList<AnalogClock2Display> clocks = new ArrayList<AnalogClock2Display>(); // fast clocks @@ -3338,8 +3337,8 @@ private SignalMastIcon checkSignalMastIcons(Point2D loc) { // check signal head images, if any - for (int i=signalMastImage.size()-1; i>=0; i--) { - SignalMastIcon s = signalMastImage.get(i); + for (int i=signalMastList.size()-1; i>=0; i--) { + SignalMastIcon s = signalMastList.get(i); double x = s.getX(); double y = s.getY(); double w = s.maxWidth(); @@ -6058,9 +6057,13 @@ } for (int i = 0; i<signalMastList.size();i++) { if (s == signalMastList.get(i)) { - signalMastList.remove(i); - found = true; - break; + if(removeSignalMast((SignalMastIcon)s)){ + signalMastList.remove(i); + found = true; + break; + } else { + return false; + } } } for (int i = 0; i<multiSensors.size();i++) { @@ -6077,13 +6080,6 @@ break; } } - for (int i = 0; i<signalMastImage.size();i++) { - if (s == signalMastImage.get(i)) { - signalMastImage.remove(i); - found = true; - break; - } - } for (int i = 0; i<signalHeadImage.size();i++) { if (s == signalHeadImage.get(i)) { signalHeadImage.remove(i); @@ -6091,13 +6087,6 @@ break; } } - for (int i = 0; i<signalMastImage.size();i++) { - if (s == signalMastImage.get(i)) { - signalMastImage.remove(i); - found = true; - break; - } - } for (int i = 0; i<labelImage.size();i++) { if (s == labelImage.get(i)) { labelImage.remove(i); @@ -6116,6 +6105,77 @@ public boolean removeFromContents(Positionable l) { return remove(l); } + + private boolean removeSignalMast(SignalMastIcon si){ + SignalMast sm = si.getSignalMast(); + PositionablePoint pe; + PositionablePoint pw; + LayoutTurnout lt; + LevelXing lx; + LayoutSlip ls; + boolean found = false; + String usage = "This Signal Mast is linked to the following items\n do you want to remove those references?"; + if((pw=findPositionablePointByWestBoundBean(sm))!=null){ + usage = usage + "\n Point of "; + TrackSegment t = pw.getConnect1(); + if(t!=null) { + usage = usage + t.getBlockName() + " and "; + } + t = pw.getConnect2(); + if(t!=null) { + usage = usage + t.getBlockName(); + } + found = true; + } + if((pe=findPositionablePointByEastBoundBean(sm))!=null){ + usage = usage + "\n Point of "; + TrackSegment t = pe.getConnect1(); + if(t!=null) { + usage = usage + t.getBlockName() + " and "; + } + t = pe.getConnect2(); + if(t!=null) { + usage = usage + t.getBlockName(); + } + found = true; + } + if((lt=findLayoutTurnoutByBean(sm))!=null){ + usage = usage + "\n Turnout " + lt.getTurnoutName(); + found = true; + } + if((lx=findLevelXingByBean(sm))!=null){ + usage = usage + "\n Level Crossing " + lx.getID(); + found = true; + } + if((ls=findLayoutSlipByBean(sm))!=null){ + usage = usage + "\n Level Crossing " + ls.getTurnoutName(); + found = true; + } + if(found){ + int selectedValue = JOptionPane.showOptionDialog(this, + usage,rb.getString("WarningTitle"), + JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, + new Object[]{rb.getString("ButtonYes"),rb.getString("ButtonNo"),rb.getString("ButtonCancel")},rb.getString("ButtonYes")); + if (selectedValue == 1) return(true); // return leaving the references in place but allow the icon to be deleted. + if (selectedValue == 2) return(false); // do not delete the item + if(pe!=null){ + pe.setEastBoundSignalMast(null); + } + if(pw!=null){ + pw.setWestBoundSignalMast(null); + } + if(lt!=null){ + lt.removeSignalMast(sm); + } + if(ls!=null){ + ls.removeSignalMast(sm); + } + if(lx!=null){ + lx.removeSignalMast(sm); + } + } + return true; + } boolean noWarnPositionablePoint = false; @@ -6690,7 +6750,6 @@ signalHeadImage.add((SignalHeadIcon)l); signalList.add((SignalHeadIcon)l); } else if (l instanceof SignalMastIcon) { - signalMastImage.add((SignalMastIcon)l); signalMastList.add((SignalMastIcon)l); } else if (l instanceof MemoryIcon){ memoryLabelList.add((MemoryIcon)l); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-06-26 11:00:19 UTC (rev 26453) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutEditorBundle.properties 2014-06-26 11:52:40 UTC (rev 26454) @@ -485,6 +485,7 @@ # question messages ButtonNo = No ButtonYes = Yes +ButtonCancel = Cancel ButtonYesPlus = Yes - Stop Warnings ButtonOK = OK ButtonOKPlus = OK - Stop Warnings Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-06-26 11:00:19 UTC (rev 26453) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LayoutTurnout.java 2014-06-26 11:52:40 UTC (rev 26454) @@ -377,6 +377,25 @@ public String getSignalD2Name() {return signalD2Name;} public void setSignalD2Name(String signalName) {signalD2Name = signalName;} + public void removeSignalMast(SignalMast sm){ + if(signalAMastNamed!=null && signalAMastNamed.getBean().equals(sm)){ + setSignalAMast(null); + return; + } + if(signalBMastNamed!=null && signalBMastNamed.getBean().equals(sm)){ + setSignalBMast(null); + return; + } + if(signalCMastNamed!=null && signalCMastNamed.getBean().equals(sm)){ + setSignalCMast(null); + return; + } + if(signalDMastNamed!=null && signalDMastNamed.getBean().equals(sm)){ + setSignalDMast(null); + return; + } + } + public String getSignalAMastName(){ if(signalAMastNamed!=null) return signalAMastNamed.getName(); Modified: trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java =================================================================== --- trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2014-06-26 11:00:19 UTC (rev 26453) +++ trunk/jmri/java/src/jmri/jmrit/display/layoutEditor/LevelXing.java 2014-06-26 11:52:40 UTC (rev 26454) @@ -126,6 +126,25 @@ public String getSignalDName() {return signalDName;} public void setSignalDName(String signalName) {signalDName = signalName;} + public void removeSignalMast(SignalMast sm){ + if(signalAMastNamed.getBean().equals(sm)){ + setSignalAMast(null); + return; + } + if(signalBMastNamed.getBean().equals(sm)){ + setSignalBMast(null); + return; + } + if(signalCMastNamed.getBean().equals(sm)){ + setSignalCMast(null); + return; + } + if(signalDMastNamed.getBean().equals(sm)){ + setSignalDMast(null); + return; + } + } + public String getSignalAMastName(){ if(signalAMastNamed!=null) return signalAMastNamed.getName(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |