trackeditor: add height start and height end sliders

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9252 30fe4595-0a0c-4342-8851-515496e4dcbd
This commit is contained in:
iobyte 2024-01-17 21:30:17 +00:00
parent 94b30199f9
commit 497f8ee1cf
9 changed files with 200 additions and 68 deletions

View File

@ -735,10 +735,7 @@ public class EditorFrame extends JFrame
shape = new Straight();
shape.setLength(100);
shape.setHeightStartLeft(0);
shape.setHeightStartRight(0);
shape.setHeightEndLeft(0);
shape.setHeightEndRight(0);
shape.setHeightStart(0);
shape.setSurface(MainTrack.DEFAULT_SURFACE);
shape.getLeft().setNewTrackDefaults();
shape.getRight().setNewTrackDefaults();
@ -748,10 +745,6 @@ public class EditorFrame extends JFrame
((Curve)shape).setRadiusStart(100);
((Curve)shape).setRadiusEnd(100);
((Curve)shape).setArcDeg(180);
shape.setHeightStartLeft(0);
shape.setHeightStartRight(0);
shape.setHeightEndLeft(0);
shape.setHeightEndRight(0);
shape.setSurface(MainTrack.DEFAULT_SURFACE);
shape.getLeft().setNewTrackDefaults();
shape.getRight().setNewTrackDefaults();
@ -759,10 +752,6 @@ public class EditorFrame extends JFrame
shape = new Straight();
shape.setLength(100);
shape.setHeightStartLeft(0);
shape.setHeightStartRight(0);
shape.setHeightEndLeft(0);
shape.setHeightEndRight(0);
shape.setSurface(MainTrack.DEFAULT_SURFACE);
shape.getLeft().setNewTrackDefaults();
shape.getRight().setNewTrackDefaults();
@ -772,10 +761,7 @@ public class EditorFrame extends JFrame
((Curve)shape).setRadiusStart(100);
((Curve)shape).setRadiusEnd(100);
((Curve)shape).setArcDeg(180);
shape.setHeightStartLeft(0);
shape.setHeightStartRight(0);
shape.setHeightEndLeft(0);
shape.setHeightEndRight(0);
shape.setHeightEnd(0);
shape.setSurface(MainTrack.DEFAULT_SURFACE);
shape.getLeft().setNewTrackDefaults();
shape.getRight().setNewTrackDefaults();

View File

@ -83,8 +83,10 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
private SegmentSlider endTangentSlider = null;
private SegmentSlider bankingStartSlider = null;
private SegmentSlider bankingEndSlider = null;
private SegmentSlider heightStartSlider = null;
private SegmentSlider heightStartLeftSlider = null;
private SegmentSlider heightStartRightSlider = null;
private SegmentSlider heightEndSlider = null;
private SegmentSlider heightEndLeftSlider = null;
private SegmentSlider heightEndRightSlider = null;
private SegmentSlider profilStepsSlider = null;
@ -228,7 +230,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
*/
private void initialize()
{
this.setSize(850, 536);
this.setSize(960, 536);
Point p = editorFrame.getLocation();
p.x = editorFrame.getProject().getSegmentEditorX();
p.y = editorFrame.getProject().getSegmentEditorY();
@ -310,8 +312,10 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
centerPanel.add(getBankingStartSlider(), null);
centerPanel.add(getBankingEndSlider(), null);
centerPanel.add(getEndTangentSlider(), null);
centerPanel.add(getHeightStartSlider(), null);
centerPanel.add(getHeightStartLeftSlider(), null);
centerPanel.add(getHeightStartRightSlider(), null);
centerPanel.add(getHeightEndSlider(), null);
centerPanel.add(getHeightEndLeftSlider(), null);
centerPanel.add(getHeightEndRightSlider(), null);
centerPanel.add(getGroupButton(), null);
@ -504,6 +508,21 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
}
return bankingEndSlider;
}
/**
* This method initializes heightStartSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getHeightStartSlider()
{
if (heightStartSlider == null)
{
heightStartSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightStart(), "Height", "Start", "HeightStart", true);
heightStartSlider.setBounds(610, 64, 50, 390);
heightStartSlider.addSliderListener(this);
}
return heightStartSlider;
}
/**
* This method initializes heightStartLeftSlider
*
@ -514,7 +533,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (heightStartLeftSlider == null)
{
heightStartLeftSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightStartLeft(), "L Height", "Start", "HeightStartLeft", true);
heightStartLeftSlider.setBounds(610, 64, 50, 390);
heightStartLeftSlider.setBounds(665, 64, 50, 390);
heightStartLeftSlider.addSliderListener(this);
}
return heightStartLeftSlider;
@ -529,11 +548,26 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (heightStartRightSlider == null)
{
heightStartRightSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightStartRight(), "R Height", "Start", "HeightStartRight", true);
heightStartRightSlider.setBounds(665, 64, 50, 390);
heightStartRightSlider.setBounds(720, 64, 50, 390);
heightStartRightSlider.addSliderListener(this);
}
return heightStartRightSlider;
}
/**
* This method initializes heightEndSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getHeightEndSlider()
{
if (heightEndSlider == null)
{
heightEndSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightEnd(), "Height", "End", "HeightEnd", true);
heightEndSlider.setBounds(775, 64, 50, 390);
heightEndSlider.addSliderListener(this);
}
return heightEndSlider;
}
/**
* This method initializes heightEndLeftSlider
*
@ -544,7 +578,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (heightEndLeftSlider == null)
{
heightEndLeftSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightEndLeft(), "L Height", "End", "HeightEndLeft", true);
heightEndLeftSlider.setBounds(720, 64, 50, 390);
heightEndLeftSlider.setBounds(830, 64, 50, 390);
heightEndLeftSlider.addSliderListener(this);
}
return heightEndLeftSlider;
@ -559,7 +593,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (heightEndRightSlider == null)
{
heightEndRightSlider = new SegmentSlider(0, 200, 0, 0.001, shape.getHeightEndRight(), "R Height", "End", "HeightEndRight", true);
heightEndRightSlider.setBounds(775, 64, 50, 390);
heightEndRightSlider.setBounds(885, 64, 50, 390);
heightEndRightSlider.addSliderListener(this);
}
return heightEndRightSlider;
@ -606,7 +640,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (marksTextField == null)
{
marksTextField = new JTextField();
marksTextField.setBounds(510, 5, 315, 23);
marksTextField.setBounds(510, 5, 425, 23);
marksTextField.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
@ -630,7 +664,7 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
if (commentTextField == null)
{
commentTextField = new JTextField();
commentTextField.setBounds(510, 33, 315, 23);
commentTextField.setBounds(510, 33, 425, 23);
commentTextField.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
@ -752,8 +786,10 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
this.getEndTangentSlider().setValue(shape.getProfilEndTangent());
this.getBankingStartSlider().setValue(shape.getBankingStart());
this.getBankingEndSlider().setValue(shape.getBankingEnd());
this.getHeightStartSlider().setValue(shape.getHeightStart());
this.getHeightStartLeftSlider().setValue(shape.getHeightStartLeft());
this.getHeightStartRightSlider().setValue(shape.getHeightStartRight());
this.getHeightEndSlider().setValue(shape.getHeightEnd());
this.getHeightEndLeftSlider().setValue(shape.getHeightEndLeft());
this.getHeightEndRightSlider().setValue(shape.getHeightEndRight());
this.getProfileStepsSlider().setValue(shape.getProfilSteps());
@ -917,6 +953,82 @@ public class SegmentEditorDlg extends JDialog implements SliderListener
dirty = true;
}
public void checkBoxChanged(SegmentSlider slider)
{
if (slider.getSection().equals("Height") && slider.getAttr().equals("Start"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightStartLeftSlider.getValue()))
{
heightStartLeftSlider.setValue(Double.NaN);
}
if (!Double.isNaN(heightStartRightSlider.getValue()))
{
heightStartRightSlider.setValue(Double.NaN);
}
}
}
else if (slider.getSection().equals("L Height") && slider.getAttr().equals("Start"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightStartSlider.getValue()))
{
slider.setValue(heightStartSlider.getValue());
heightStartSlider.setValue(Double.NaN);
}
}
}
else if (slider.getSection().equals("R Height") && slider.getAttr().equals("Start"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightStartSlider.getValue()))
{
slider.setValue(heightStartSlider.getValue());
heightStartSlider.setValue(Double.NaN);
}
}
}
else if (slider.getSection().equals("Height") && slider.getAttr().equals("End"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightEndLeftSlider.getValue()))
{
heightEndLeftSlider.setValue(Double.NaN);
}
if (!Double.isNaN(heightEndRightSlider.getValue()))
{
heightEndRightSlider.setValue(Double.NaN);
}
}
}
else if (slider.getSection().equals("L Height") && slider.getAttr().equals("End"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightEndSlider.getValue()))
{
slider.setValue(heightEndSlider.getValue());
heightEndSlider.setValue(Double.NaN);
}
}
}
else if (slider.getSection().equals("R Height") && slider.getAttr().equals("End"))
{
if (slider.isCheckBoxSelected())
{
if (!Double.isNaN(heightEndSlider.getValue()))
{
slider.setValue(heightEndSlider.getValue());
heightEndSlider.setValue(Double.NaN);
}
}
}
}
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);

View File

@ -1251,4 +1251,7 @@ public class SegmentSideProperties extends JPanel implements SliderListener
parent.update();
}
public void checkBoxChanged(SegmentSlider slider)
{
}
} // @jve:decl-index=0:visual-constraint="42,-30"

View File

@ -360,6 +360,16 @@ public class SegmentSlider extends JPanel
}
}
public boolean isCheckBoxSelected()
{
return checkBox.isSelected();
}
public void setCheckBoxSelected(boolean state)
{
checkBox.setSelected(state);
}
/**
* @return Returns the method.
*/
@ -529,6 +539,19 @@ public class SegmentSlider extends JPanel
}
}
private void checkboxChanged()
{
if (sliderListeners != null)
{
Vector<SliderListener> listeners = sliderListeners;
int count = listeners.size();
for (int i = 0; i < count; i++)
{
listeners.elementAt(i).checkBoxChanged(this);
}
}
}
/** *** Inner class SliderLink****** */
class SliderLink
{
@ -565,6 +588,8 @@ public class SegmentSlider extends JPanel
public void checkBoxChanged()
{
checkboxChanged();
double oldValue = value;
if (checkBox.isSelected())
{

View File

@ -29,4 +29,5 @@ package gui.segment;
public interface SliderListener
{
public void sliderChanged(SegmentSlider slider);
public void checkBoxChanged(SegmentSlider slider);
}

View File

@ -924,28 +924,13 @@ public class XmlReader
shape.setSurface(getAttrStrValue(seg, "surface"));
double z = getAttrNumValue(seg, "z start", "m");
if (Double.isNaN(z))
{
shape.setHeightStartLeft(getAttrNumValue(seg, "z start left", "m"));
shape.setHeightStartRight(getAttrNumValue(seg, "z start right", "m"));
}
else
{
shape.setHeightStartLeft(z);
shape.setHeightStartRight(z);
}
z = getAttrNumValue(seg, "z end", "m");
if (Double.isNaN(z))
{
shape.setHeightEndLeft(getAttrNumValue(seg, "z end left", "m"));
shape.setHeightEndRight(getAttrNumValue(seg, "z end right", "m"));
}
else
{
shape.setHeightEndLeft(z);
shape.setHeightEndRight(z);
}
shape.setHeightStart(getAttrNumValue(seg, "z start", "m"));
shape.setHeightStartLeft(getAttrNumValue(seg, "z start left", "m"));
shape.setHeightStartRight(getAttrNumValue(seg, "z start right", "m"));
shape.setHeightEnd(getAttrNumValue(seg, "z end", "m"));
shape.setHeightEndLeft(getAttrNumValue(seg, "z end left", "m"));
shape.setHeightEndRight(getAttrNumValue(seg, "z end right", "m"));
shape.setGrade(getAttrNumValue(seg, "grade", "%"));
shape.setBankingStart(getAttrNumValue(seg, "banking start", "deg"));

View File

@ -303,28 +303,15 @@ public class XmlWriter
}
addContent(segment, "marks", ((Curve) shape).getMarks());
}
if (!Double.isNaN(shape.getHeightStartLeft()) &&
!Double.isNaN(shape.getHeightStartRight()) &&
shape.getHeightStartLeft() == shape.getHeightStartRight())
{
addContent(segment, "z start", "m", shape.getHeightStartLeft());
}
else
{
addContent(segment, "z start left", "m", shape.getHeightStartLeft());
addContent(segment, "z start right", "m", shape.getHeightStartRight());
}
if (!Double.isNaN(shape.getHeightEndLeft()) &&
!Double.isNaN(shape.getHeightEndRight()) &&
shape.getHeightEndLeft() == shape.getHeightEndRight())
{
addContent(segment, "z end", "m", shape.getHeightEndLeft());
}
else
{
addContent(segment, "z end left", "m", shape.getHeightEndLeft());
addContent(segment, "z end right", "m", shape.getHeightEndRight());
}
addContent(segment, "z start", "m", shape.getHeightStart());
addContent(segment, "z start left", "m", shape.getHeightStartLeft());
addContent(segment, "z start right", "m", shape.getHeightStartRight());
addContent(segment, "z end", "m", shape.getHeightEnd());
addContent(segment, "z end left", "m", shape.getHeightEndLeft());
addContent(segment, "z end right", "m", shape.getHeightEndRight());
addContent(segment, "grade", "%", shape.getGrade());
addContent(segment, "banking start", "deg", shape.getBankingStart());
addContent(segment, "banking end", "deg", shape.getBankingEnd());

View File

@ -34,7 +34,7 @@ public class Properties
private static Properties instance = new Properties();
private Vector<ActionListener> propertiesListeners = new Vector<ActionListener>();
public final String title = "sd2-trackeditor";
public final String version = "1.3.38";
public final String version = "1.4.0";
private String path;
private double imageScale = 1;

View File

@ -64,8 +64,11 @@ public class Segment implements Cloneable
protected double length = Double.NaN;
protected String surface = null;
protected double heightStart = Double.NaN;
protected double heightStartLeft = Double.NaN;
protected double heightStartRight = Double.NaN;
protected double heightEnd = Double.NaN;
protected double heightEndLeft = Double.NaN;
protected double heightEndRight = Double.NaN;
@ -121,8 +124,10 @@ public class Segment implements Cloneable
comment = segment.comment;
length = segment.length;
surface = segment.surface;
heightStart = segment.heightStart;
heightStartLeft = segment.heightStartLeft;
heightStartRight = segment.heightStartRight;
heightEnd = segment.heightEnd;
heightEndLeft = segment.heightEndLeft;
heightEndRight = segment.heightEndRight;
grade = segment.grade;
@ -364,6 +369,15 @@ public class Segment implements Cloneable
{
}
public double getHeightStart()
{
return heightStart;
}
public void setHeightStart(double heightStart)
{
this.heightStart = heightStart;
}
/**
* @return Returns the heightStartLeft.
*/
@ -394,6 +408,16 @@ public class Segment implements Cloneable
{
this.heightStartRight = heightStartRight;
}
public double getHeightEnd()
{
return heightEnd;
}
public void setHeightEnd(double heightEnd)
{
this.heightEnd = heightEnd;
}
/**
* @return Returns the heightEndLeft.
*/
@ -718,8 +742,10 @@ public class Segment implements Cloneable
s.comment = this.comment;
s.length = this.length;
s.surface = this.surface;
s.heightStart = this.heightStart;
s.heightStartLeft = this.heightStartLeft;
s.heightStartRight = this.heightStartRight;
s.heightEnd = this.heightEnd;
s.heightEndLeft = this.heightEndLeft;
s.heightEndRight = this.heightEndRight;
s.grade = this.grade;
@ -1709,6 +1735,13 @@ public class Segment implements Cloneable
public void inheritProperties(Segment previousShape)
{
setSurface(previousShape.getSurface());
if (!Double.isNaN(previousShape.getHeightEnd()))
{
setHeightStart(previousShape.getHeightEnd());
setHeightEnd(previousShape.getHeightEnd());
}
if (!Double.isNaN(previousShape.getHeightEndLeft()))
{
setHeightStartLeft(previousShape.getHeightEndLeft());