speed-dreams/src/tools/trackeditor/gui/segment/SegmentSideProperties.java

1283 lines
44 KiB
Java

/*
* SegmentSideProperties.java
* Created on Aug 25, 2004
*
* The SegmentSideProperties.java is part of TrackEditor-0.2.0.
*
* TrackEditor-0.2.0 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* TrackEditor-0.2.0 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TrackEditor-0.2.0; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package gui.segment;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Collections;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
import utils.SurfaceComboBox;
import utils.circuit.Segment;
import utils.circuit.SegmentSide;
import utils.circuit.Surface;
import bsh.EvalError;
import bsh.Interpreter;
/**
* @author babis
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class SegmentSideProperties extends JPanel implements SliderListener
{
private SegmentSide side;
private SegmentEditorDlg parent;
private String[] borderStyleItems = {"none", "plan", "wall", "curb"};
private String[] borderSurfaceItems =
{"curb-5cm-r", "curb-5cm-l", "curb-l", "tar-grass3-l",
"tar-grass3-r", "tar-sand", "b-road1-grass6", "b-road1-grass6-l2", "b-road1-gravel-l2", "b-road1-sand3",
"b-road1-sand3-l2", "b-asphalt-grass7", "b-asphalt-grass7-l1", "b-asphalt-grass6", "b-asphalt-grass6-l1",
"b-asphalt-sand3", "b-asphalt-sand3-l1", "grass", "grass3", "grass5", "grass6", "grass7", "gravel",
"sand3", "sand", "asphalt-lines", "asphalt-l-left", "asphalt-l-right", "asphalt-l-both", "asphalt-pits",
"asphalt", "dirt", "dirt-b", "asphalt2", "road1", "road1-pits", "road1-asphalt", "asphalt-road1",
"b-road1", "b-road1-l2", "b-road1-l2p", "concrete", "concrete2", "concrete3", "b-asphalt", "b-asphalt-l1",
"b-asphalt-l1p", "asphalt2-lines", "asphalt2-l-left", "asphalt2-l-right", "asphalt2-l-both", "barrier",
"barrier2", "barrier-turn", "barrier-grille", "wall", "wall2", "tire-wall"};
private Vector<String> borderSurfaceVector = new Vector<String>();
private String[] sideSurfaceItems =
{"grass", "grass3", "grass5", "grass6", "grass7", "gravel",
"sand3", "sand", "asphalt-lines", "asphalt-l-left", "asphalt-l-right", "asphalt-l-both", "asphalt-pits",
"asphalt", "dirt", "dirt-b", "asphalt2", "road1", "road1-pits", "road1-asphalt", "asphalt-road1",
"b-road1", "b-road1-l2", "b-road1-l2p", "concrete", "concrete2", "concrete3", "b-asphalt", "b-asphalt-l1",
"b-asphalt-l1p", "asphalt2-lines", "asphalt2-l-left", "asphalt2-l-right", "asphalt2-l-both", "curb-5cm-r",
"curb-5cm-l", "curb-l", "tar-grass3-l", "tar-grass3-r", "tar-sand", "b-road1-grass6", "b-road1-grass6-l2",
"b-road1-gravel-l2", "b-road1-sand3", "b-road1-sand3-l2", "b-asphalt-grass7", "b-asphalt-grass7-l1",
"b-asphalt-grass6", "b-asphalt-grass6-l1", "b-asphalt-sand3", "b-asphalt-sand3-l1", "barrier", "barrier2",
"barrier-turn", "barrier-grille", "wall", "wall2", "tire-wall"};
private Vector<String> sideSurfaceVector = new Vector<String>();
private String[] barrierStyleItems = {"none", "no barrier", "wall", "fence", "fence1", "fence2"};
private String[] barrierSurfaceItems =
{"barrier", "barrier2", "barrier-turn", "barrier-grille",
"wall", "wall2", "tire-wall", "asphalt-lines", "asphalt-l-left", "asphalt-l-right", "asphalt-l-both",
"asphalt-pits", "asphalt", "dirt", "dirt-b", "asphalt2", "road1", "road1-pits", "road1-asphalt",
"asphalt-road1", "b-road1", "b-road1-l2", "b-road1-l2p", "concrete", "concrete2", "concrete3", "b-asphalt",
"b-asphalt-l1", "b-asphalt-l1p", "asphalt2-lines", "asphalt2-l-left", "asphalt2-l-right",
"asphalt2-l-both", "curb-5cm-r", "curb-5cm-l", "curb-l", "tar-grass3-l", "tar-grass3-r", "tar-sand",
"b-road1-grass6", "b-road1-grass6-l2", "b-road1-gravel-l2", "b-road1-sand3", "b-road1-sand3-l2",
"b-asphalt-grass7", "b-asphalt-grass7-l1", "b-asphalt-grass6", "b-asphalt-grass6-l1", "b-asphalt-sand3",
"b-asphalt-sand3-l1", "grass", "grass3", "grass5", "grass6", "grass7", "gravel", "sand3", "sand"};
private Vector<String> barrierSurfaceVector = new Vector<String>();
public JPanel panel = null;
private JLabel borderLabel = null;
private JLabel borderSurfaceLabel = null;
private JLabel borderStyleLabel = null;
private JLabel sideLabel = null;
private JLabel sideSurfaceLabel = null;
private JLabel sideBankingTypeLabel = null;
private JLabel barrierLabel = null;
private JLabel barrierStyleLabel = null;
private JLabel barrierSurfaceLabel = null;
public JLabel titleLabel = null;
private SegmentSlider barrierHeightSlider = null;
private SurfaceComboBox borderSurfaceComboBox = null;
private JComboBox<String> borderStyleComboBox = null;
private SurfaceComboBox sideSurfaceComboBox = null;
private JComboBox<String> sideBankingTypeComboBox = null;
private SurfaceComboBox barrierSurfaceComboBox = null;
private JComboBox<String> barrierStyleComboBox = null;
private SegmentSlider sideStartWidthSlider = null;
private SegmentSlider borderWidthSlider = null;
private SegmentSlider sideEndWidthSlider = null;
private SegmentSlider barrierWidthSlider = null;
private SegmentSlider borderHeightSlider = null;
/**
*
*/
public SegmentSideProperties(SegmentEditorDlg parent, Segment segment, SegmentSide side)
{
this.parent = parent;
// add new surfaces from Surfaces
addDefaultSurfaces(sideSurfaceVector, sideSurfaceItems);
addDefaultSurfaces(borderSurfaceVector, borderSurfaceItems);
addDefaultSurfaces(barrierSurfaceVector, barrierSurfaceItems);
setSide(segment, side);
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize()
{
titleLabel = new JLabel();
this.setLayout(null);
this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
this.setLocation(0, 0);
titleLabel.setBounds(396, 5, 70, 23);
titleLabel.setText("Right");
titleLabel.setFont(new Font("Dialog", Font.BOLD, 18));
this.add(getPanel(), null);
this.add(titleLabel, null);
}
public void refresh()
{
sideSurfaceVector.clear();
addDefaultSurfaces(sideSurfaceVector, sideSurfaceItems);
panel.remove(sideSurfaceComboBox);
sideSurfaceComboBox = null;
panel.add(getSideSurfaceComboBox(), null);
borderSurfaceVector.clear();
addDefaultSurfaces(borderSurfaceVector, borderSurfaceItems);
panel.remove(borderSurfaceComboBox);
borderSurfaceComboBox = null;
panel.add(getBorderSurfaceComboBox(), null);
barrierSurfaceVector.clear();
addDefaultSurfaces(barrierSurfaceVector, barrierSurfaceItems);
panel.remove(barrierSurfaceComboBox);
barrierSurfaceComboBox = null;
panel.add(getBarrierSurfaceComboBox(), null);
}
private void addDefaultSurfaces(Vector<String> surfaceVector, String[] fallback)
{
// use the default surfaces if available
Vector<Surface> defaultSurfaces = parent.editorFrame.getDefaultSurfaces();
if (defaultSurfaces.isEmpty())
{
// add the ones found
surfaceVector.addAll(Arrays.asList(fallback));
}
else
{
// add the ones that should be there
for (int i = 0; i < defaultSurfaces.size(); i++)
{
surfaceVector.add(defaultSurfaces.get(i).getName());
}
}
Vector<Surface> surfaces = parent.editorFrame.getTrackData().getSurfaces();
for (int i = 0; i < surfaces.size(); i++)
{
String surface = surfaces.elementAt(i).getName();
if (surface != null)
{
boolean found = false;
for (int j = 0; j < surfaceVector.size(); j++)
{
if (surfaceVector.elementAt(i).equals(surfaces.elementAt(i).getName()))
{
found = true;
break;
}
}
if (!found)
{
surfaceVector.add(surface);
}
}
}
Collections.sort(surfaceVector);
}
/**
* This method initializes panel
*
* @return javax.swing.JPanel
*/
public JPanel getPanel()
{
if (panel == null)
{
borderLabel = new JLabel();
borderStyleLabel = new JLabel();
borderSurfaceLabel = new JLabel();
panel = new JPanel();
sideSurfaceLabel = new JLabel();
sideLabel = new JLabel();
sideBankingTypeLabel = new JLabel();
barrierSurfaceLabel = new JLabel();
barrierStyleLabel = new JLabel();
barrierLabel = new JLabel();
panel.setLayout(null);
panel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
borderLabel.setBounds(698, 2, 50, 23);
borderLabel.setText("Border");
borderSurfaceLabel.setBounds(698, 325, 55, 23);
borderSurfaceLabel.setText("Surface");
borderStyleLabel.setBounds(703, 375, 55, 23);
borderStyleLabel.setText("Style");
sideBankingTypeLabel.setBounds(376, 375, 90, 23);
sideBankingTypeLabel.setText("Banking Type");
panel.add(borderSurfaceLabel, null);
panel.add(borderStyleLabel, null);
panel.add(borderLabel, null);
panel.add(sideLabel, null);
panel.add(sideSurfaceLabel, null);
panel.add(barrierLabel, null);
panel.add(barrierStyleLabel, null);
panel.add(barrierSurfaceLabel, null);
panel.add(sideBankingTypeLabel, null);
panel.setLocation(3, 35);
panel.setSize(823, 431);
sideLabel.setText("Side");
sideLabel.setSize(45, 23);
sideLabel.setLocation(401, 2);
sideSurfaceLabel.setText("Surface");
sideSurfaceLabel.setBounds(391, 325, 55, 23);
barrierLabel.setText("Barrier");
barrierLabel.setBounds(85, 2, 50, 23);
barrierStyleLabel.setText("Style");
barrierStyleLabel.setBounds(90, 375, 55, 23);
barrierSurfaceLabel.setText("Surface");
barrierSurfaceLabel.setBounds(85, 325, 55, 23);
panel.add(getBarrierHeightSlider(), null);
panel.add(getBorderSurfaceComboBox(), null);
panel.add(getBorderStyleComboBox(), null);
panel.add(getSideSurfaceComboBox(), null);
panel.add(getSideBankingTypeComboBox(), null);
panel.add(getBarrierSurfaceComboBox(), null);
panel.add(getBarrierStyleComboBox(), null);
panel.add(getSideStartWidthSlider(), null);
panel.add(getBorderWidthSlider(), null);
panel.add(getSideEndWidthSlider(), null);
panel.add(getBarrierWidthSlider(), null);
panel.add(getBorderHeightSlider(), null);
}
return panel;
}
/**
* This method initializes borderSurfaceComboBox
*
* @return utils.SurfaceComboBox
*/
private SurfaceComboBox getBorderSurfaceComboBox()
{
if (borderSurfaceComboBox == null)
{
borderSurfaceComboBox = new SurfaceComboBox(parent.editorFrame, borderSurfaceVector);
borderSurfaceComboBox.setBounds(618, 350, 200, 23);
borderSurfaceComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (borderSurfaceComboBox.getSelectedItem() != null)
side.setBorderSurface(borderSurfaceComboBox.getSelectedItem()+"");
}
});
}
return borderSurfaceComboBox;
}
/**
* This method initializes borderStyleComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox<String> getBorderStyleComboBox()
{
if (borderStyleComboBox == null)
{
borderStyleComboBox = new JComboBox<String>();
borderStyleComboBox.setBounds(658, 400, 120, 23);
borderStyleComboBox.setModel(new DefaultComboBoxModel<String>(borderStyleItems));
borderStyleComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String oldStyle = side.getBorderStyle();
if (oldStyle == null || oldStyle.isEmpty())
oldStyle = "none";
String newStyle = borderStyleComboBox.getSelectedItem().toString();
boolean styleChanged = !oldStyle.equals(newStyle);
String style = newStyle;
if (style == "none")
style = null;
side.setBorderStyle(style);
if (!styleChanged)
{
return;
}
switch (newStyle)
{
case "none":
side.setBorderStyle(null);
side.setBorderSurface(null);
side.setBorderHeight(Double.NaN);
side.setBorderWidth(Double.NaN);
getBorderSurfaceComboBox().setSelectedIndex(-1);
getBorderSurfaceComboBox().setEnabled(false);
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderHeightSlider().setEnabled(false);
getBorderWidthSlider().setValue(side.getBorderWidth());
getBorderWidthSlider().setEnabled(false);
break;
case "plan":
if (side.isRight())
{
side.setBorderSurface(SegmentSide.DEFAULT_BORDER_PLAN_RIGHT_SURFACE);
}
else
{
side.setBorderSurface(SegmentSide.DEFAULT_BORDER_PLAN_LEFT_SURFACE);
}
side.setBorderHeight(SegmentSide.DEFAULT_BORDER_PLAN_HEIGHT);
side.setBorderWidth(SegmentSide.DEFAULT_BORDER_PLAN_WIDTH);
getBorderSurfaceComboBox().setEnabled(true);
getBorderSurfaceComboBox().setSelectedItem(side.getBorderSurface());
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValueFrozen(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
case "wall":
side.setBorderSurface(SegmentSide.DEFAULT_BORDER_WALL_SURFACE);
side.setBorderHeight(SegmentSide.DEFAULT_BORDER_WALL_HEIGHT);
side.setBorderWidth(SegmentSide.DEFAULT_BORDER_WALL_WIDTH);
getBorderSurfaceComboBox().setEnabled(true);
getBorderSurfaceComboBox().setSelectedItem(side.getBorderSurface());
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
case "curb":
if (side.isRight())
{
side.setBorderSurface(SegmentSide.DEFAULT_BORDER_CURB_RIGHT_SURFACE);
}
else
{
side.setBorderSurface(SegmentSide.DEFAULT_BORDER_CURB_LEFT_SURFACE);
}
side.setBorderHeight(SegmentSide.DEFAULT_BORDER_CURB_HEIGHT);
side.setBorderWidth(SegmentSide.DEFAULT_BORDER_CURB_WIDTH);
getBorderSurfaceComboBox().setEnabled(true);
getBorderSurfaceComboBox().setSelectedItem(side.getBorderSurface());
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
}
parent.sideChanged();
}
});
}
return borderStyleComboBox;
}
/**
* This method initializes sideSurfaceComboBox
*
* @return utils.SurfaceComboBox
*/
private SurfaceComboBox getSideSurfaceComboBox()
{
if (sideSurfaceComboBox == null)
{
sideSurfaceComboBox = new SurfaceComboBox(parent.editorFrame, sideSurfaceVector);
sideSurfaceComboBox.setBounds(311, 350, 200, 23);
sideSurfaceComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (sideSurfaceComboBox.getSelectedItem() != null)
side.setSideSurface(sideSurfaceComboBox.getSelectedItem()+"");
}
});
}
return sideSurfaceComboBox;
}
/**
* This method initializes sideBankingTypeComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox<String> getSideBankingTypeComboBox()
{
if (sideBankingTypeComboBox == null)
{
String[] items = {"none", "level", "tangent"};
sideBankingTypeComboBox = new JComboBox<String>();
sideBankingTypeComboBox.setBounds(351, 400, 120, 23);
sideBankingTypeComboBox.setModel(new DefaultComboBoxModel<String>(items));
sideBankingTypeComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String type = sideBankingTypeComboBox.getSelectedItem().toString();
if (type == "none")
type = null;
side.setSideBankingType(type);
}
});
}
return sideBankingTypeComboBox;
}
/**
* This method initializes barrierSurfaceComboBox
*
* @return utils.SurfaceComboBox
*/
private SurfaceComboBox getBarrierSurfaceComboBox()
{
if (barrierSurfaceComboBox == null)
{
barrierSurfaceComboBox = new SurfaceComboBox(parent.editorFrame, barrierSurfaceVector);
barrierSurfaceComboBox.setBounds(5, 350, 200, 23);
barrierSurfaceComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (barrierSurfaceComboBox.getSelectedItem() != null)
side.setBarrierSurface(barrierSurfaceComboBox.getSelectedItem()+"");
}
});
}
return barrierSurfaceComboBox;
}
/**
* This method initializes barrierStyleComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox<String> getBarrierStyleComboBox()
{
if (barrierStyleComboBox == null)
{
barrierStyleComboBox = new JComboBox<String>();
barrierStyleComboBox.setBounds(45, 400, 120, 23);
barrierStyleComboBox.setModel(new DefaultComboBoxModel<String>(barrierStyleItems));
barrierStyleComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String oldStyle = side.getBarrierStyle();
if (oldStyle == null || oldStyle.isEmpty())
oldStyle = "none";
String newStyle = barrierStyleComboBox.getSelectedItem().toString();
boolean styleChanged = !oldStyle.equals(newStyle);
String style = newStyle;
if (style == "none")
style = null;
side.setBarrierStyle(style);
if (!styleChanged)
{
return;
}
switch (newStyle)
{
case "none":
side.setBarrierSurface(null);
side.setBarrierHeight(Double.NaN);
side.setBarrierWidth(Double.NaN);
getBarrierSurfaceComboBox().setSelectedIndex(-1);
getBarrierSurfaceComboBox().setEnabled(false);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierHeightSlider().setEnabled(false);
getBarrierWidthSlider().setValue(side.getBarrierWidth());
getBarrierWidthSlider().setEnabled(false);
break;
case "no barrier":
side.setBarrierSurface(null);
side.setBarrierHeight(0.0);
side.setBarrierWidth(0.0);
getBarrierSurfaceComboBox().setSelectedIndex(-1);
getBarrierSurfaceComboBox().setEnabled(false);
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValueFrozen(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case "wall":
side.setBarrierSurface(SegmentSide.DEFAULT_BARRIER_WALL_SURFACE);
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_WALL_HEIGHT);
side.setBarrierWidth(SegmentSide.DEFAULT_BARRIER_WALL_WIDTH);
getBarrierSurfaceComboBox().setEnabled(true);
getBarrierSurfaceComboBox().setSelectedItem(side.getBarrierSurface());
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValue(side.getBarrierWidth());
break;
case "fence":
side.setBarrierSurface(SegmentSide.DEFAULT_BARRIER_FENCE_SURFACE);
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_FENCE_HEIGHT);
side.setBarrierWidth(SegmentSide.DEFAULT_BARRIER_FENCE_WIDTH);
getBarrierSurfaceComboBox().setEnabled(true);
getBarrierSurfaceComboBox().setSelectedItem(side.getBarrierSurface());
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case "fence1":
side.setBarrierSurface(SegmentSide.DEFAULT_BARRIER_FENCE_SURFACE);
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_FENCE_HEIGHT);
side.setBarrierWidth(SegmentSide.DEFAULT_BARRIER_FENCE_WIDTH);
getBarrierSurfaceComboBox().setEnabled(true);
getBarrierSurfaceComboBox().setSelectedItem(side.getBarrierSurface());
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case "fence2":
side.setBarrierSurface(SegmentSide.DEFAULT_BARRIER_FENCE_SURFACE);
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_FENCE_HEIGHT);
side.setBarrierWidth(SegmentSide.DEFAULT_BARRIER_FENCE_WIDTH);
getBarrierSurfaceComboBox().setEnabled(true);
getBarrierSurfaceComboBox().setSelectedItem(side.getBarrierSurface());
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
}
parent.sideChanged();
}
});
}
return barrierStyleComboBox;
}
/**
* This method initializes barrierHeightSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getBarrierHeightSlider()
{
if (barrierHeightSlider == null)
{
barrierHeightSlider = new SegmentSlider(0, 50, 0, 0.001, side.getBarrierHeight(), "Height", "", "BarrierHeight", true, false);
barrierHeightSlider.setBounds(52, 25, 50, 290);
barrierHeightSlider.addSliderListener(this);
}
return barrierHeightSlider;
}
/**
* This method initializes sideStartWidthSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getSideStartWidthSlider()
{
if (sideStartWidthSlider == null)
{
sideStartWidthSlider = new SegmentSlider(0, 100, 0, 0.001, side.getSideStartWidth(), "Width", "Start", "SideStartWidth", true, false);
sideStartWidthSlider.setBounds(358, 25, 50, 290);
sideStartWidthSlider.addSliderListener(this);
}
return sideStartWidthSlider;
}
/**
* This method initializes borderWidthSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getBorderWidthSlider()
{
if (borderWidthSlider == null)
{
borderWidthSlider = new SegmentSlider(0, 5, 0, 0.001, side.getBorderWidth(), "Width", "", "BorderWidth", true, false);
borderWidthSlider.setBounds(720, 25, 50, 290);
borderWidthSlider.addSliderListener(this);
}
return borderWidthSlider;
}
/**
* This method initializes sideEndWidthSlider
*
* @return gui.SegmentSlider
*/
private SegmentSlider getSideEndWidthSlider()
{
if (sideEndWidthSlider == null)
{
sideEndWidthSlider = new SegmentSlider(0, 100, 0, 0.001, side.getSideEndWidth(), "Width", "End", "SideEndWidth", true, false);
sideEndWidthSlider.setBounds(413, 25, 50, 290);
sideEndWidthSlider.addSliderListener(this);
}
return sideEndWidthSlider;
}
/**
* This method initializes barrierWidthSlider
*
* @return gui.segment.SegmentSlider
*/
private SegmentSlider getBarrierWidthSlider()
{
if (barrierWidthSlider == null)
{
barrierWidthSlider = new SegmentSlider(0, 50, 0, 0.001, side.getBarrierWidth(), "Width", "", "BarrierWidth", true, false);
barrierWidthSlider.setBounds(107, 25, 50, 290);
barrierWidthSlider.addSliderListener(this);
}
return barrierWidthSlider;
}
/**
* This method initializes borderHeightSlider
*
* @return gui.segment.SegmentSlider
*/
private SegmentSlider getBorderHeightSlider()
{
if (borderHeightSlider == null)
{
borderHeightSlider = new SegmentSlider(0, 5, 0, 0.001, side.getBorderHeight(), "Height", "", "BorderHeight", true, false);
borderHeightSlider.setBounds(665, 25, 50, 290);
borderHeightSlider.addSliderListener(this);
}
return borderHeightSlider;
}
public void update()
{
}
/**
* @return Returns the titleLabel.
*/
public String getTitle()
{
return titleLabel.getText();
}
/**
* @param titleLabel
* The titleLabel to set.
*/
public void setTitle(String title)
{
this.titleLabel.setText(title);
}
private void addSurface(Vector<String> surfaceVector, String surface)
{
// add this surface if it's not found in default list
if (surface != null)
{
boolean found = false;
for (int i = 0; i < surfaceVector.size(); i++)
{
if (surfaceVector.elementAt(i).equals(surface))
{
found = true;
break;
}
}
if (!found)
{
surfaceVector.add(surface);
Collections.sort(surfaceVector);
}
}
}
public void setSide(Segment segment, SegmentSide side)
{
this.side = side;
// update side
String surface = this.side.getSideSurface();
addSurface(sideSurfaceVector, surface);
if (surface != null)
this.getSideSurfaceComboBox().setSelectedItem(surface);
else
this.getSideSurfaceComboBox().setSelectedIndex(-1);
String bankingType = this.side.getSideBankingType();
if (bankingType == null || bankingType.isEmpty())
bankingType = "none";
this.getSideBankingTypeComboBox().setSelectedItem(bankingType);
this.getSideStartWidthSlider().setValue(side.getSideStartWidth());
this.getSideEndWidthSlider().setValue(side.getSideEndWidth());
// update border
surface = this.side.getBorderSurface();
addSurface(borderSurfaceVector, surface);
if (surface != null && !surface.isEmpty())
this.getBorderSurfaceComboBox().setSelectedItem(surface);
else
this.getBorderSurfaceComboBox().setSelectedIndex(-1);
String style = side.getBorderStyle();
if (style == null || style.isEmpty())
style = "none";
getBorderStyleComboBox().setSelectedItem(style);
switch (style)
{
case "none":
if (parent.editorFrame.getInteractiveFixes())
{
String inheritedStyle = getBorderStyle(segment, side);
if (inheritedStyle == null || inheritedStyle.isEmpty())
inheritedStyle = "none";
switch (inheritedStyle)
{
case "none":
break;
case "plan":
checkBorderPlan(segment, side);
break;
case "wall":
break;
case "curb":
break;
}
}
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderHeightSlider().setEnabled(false);
getBorderWidthSlider().setValue(side.getBorderWidth());
getBorderWidthSlider().setEnabled(false);
break;
case "plan":
if (parent.editorFrame.getInteractiveFixes())
{
checkBorderPlan(segment, side);
}
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValueFrozen(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
case "wall":
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
case "curb":
getBorderHeightSlider().setEnabled(true);
getBorderHeightSlider().setValue(side.getBorderHeight());
getBorderWidthSlider().setEnabled(true);
getBorderWidthSlider().setValue(side.getBorderWidth());
break;
}
// update barrier
surface = this.side.getBarrierSurface();
addSurface(barrierSurfaceVector, surface);
if (surface != null)
this.getBarrierSurfaceComboBox().setSelectedItem(surface);
else
this.getBarrierSurfaceComboBox().setSelectedIndex(-1);
this.getBarrierHeightSlider().setValue(side.getBarrierHeight());
this.getBarrierWidthSlider().setValue(side.getBarrierWidth());
style = side.getBarrierStyle();
if (style == null || style.isEmpty())
style = "none";
getBarrierStyleComboBox().setSelectedItem(style);
switch (style)
{
case "none":
if (parent.editorFrame.getInteractiveFixes())
{
String inheritedStyle = getBarrierStyle(segment, side);
if (inheritedStyle == null || inheritedStyle.isEmpty())
inheritedStyle = "none";
switch (inheritedStyle)
{
case "none":
break;
case "no barrier":
checkBarrierNoBarrier(segment, side);
break;
case "wall":
checkBarrierWall(segment, side);
break;
case "fence":
checkBarrierFence(segment, side);
break;
case "fence1":
checkBarrierFence(segment, side);
break;
case "plan":
case "curb":
checkBarrierInvalid(segment, side);
break;
}
}
getBarrierSurfaceComboBox().setSelectedIndex(-1);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierHeightSlider().setEnabled(false);
getBarrierWidthSlider().setValue(side.getBarrierWidth());
getBarrierWidthSlider().setEnabled(false);
break;
case "no barrier":
if (parent.editorFrame.getInteractiveFixes())
{
checkBarrierNoBarrier(segment, side);
}
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValueFrozen(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case "wall":
if (parent.editorFrame.getInteractiveFixes())
{
checkBarrierWall(segment, side);
}
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValue(side.getBarrierWidth());
break;
case "fence":
if (parent.editorFrame.getInteractiveFixes())
{
checkBarrierFence(segment, side);
}
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case "plan":
case "curb":
if (parent.editorFrame.getInteractiveFixes())
{
checkBarrierInvalid(segment, side);
}
break;
}
this.validate();
this.repaint();
}
private void checkBorderPlan(Segment segment, SegmentSide side)
{
// fix up bad value (height should be 0)
if (getBorderHeight(segment, side) != 0)
{
String[] options = { "Set height to 0.0", "Set style to wall", "Set style to curb", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBorderStyleText(segment, side) + " with " +
getBorderHeightText(segment, side) + " " + getBorderWidthText(segment, side) + " " + getBorderSurfaceText(segment, side),
"Invalid Border Height", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[3]))
{
case 0: // set height to 0
side.setBorderHeight(0);
break;
case 1: // set style to wall
side.setBorderStyle("wall");
getBorderStyleComboBox().setSelectedItem(side.getBorderStyle());
break;
case 2: // set style to curb
side.setBorderStyle("curb");
getBorderStyleComboBox().setSelectedItem(side.getBorderStyle());
break;
case 3: // ignore
// nothing
break;
}
}
}
private void checkBarrierInvalid(Segment segment, SegmentSide side)
{
// fix up bad value (plan and curb are not a valid style)
String[] options = { "Set style to none", "Set style to no barrier", "Set style to fence", "Set style to wall", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierWidthText(segment, side) + getBarrierHeightText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Style", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[4]))
{
case 0: // none
side.setBarrierStyle(null);
side.setBarrierSurface(null);
side.setBarrierHeight(Double.NaN);
side.setBarrierWidth(Double.NaN);
getBarrierSurfaceComboBox().setSelectedIndex(-1);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierHeightSlider().setEnabled(false);
getBarrierWidthSlider().setValue(side.getBarrierWidth());
getBarrierWidthSlider().setEnabled(false);
break;
case 1: // no barrier
side.setBarrierStyle("no barrier");
side.setBarrierSurface(null);
side.setBarrierHeight(0.0);
side.setBarrierWidth(0.0);
getBarrierSurfaceComboBox().setSelectedIndex(-1);
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValueFrozen(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case 2: // fence
side.setBarrierStyle("fence");
// fix up bad value (width should be 0)
getBarrierStyleComboBox().setSelectedItem(side.getBarrierStyle());
checkBarrierFence(segment, side);
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case 3: // wall
side.setBarrierStyle("wall");
getBarrierStyleComboBox().setSelectedItem(side.getBarrierStyle());
checkBarrierWall(segment, side);
getBarrierHeightSlider().setEnabled(true);
getBarrierHeightSlider().setValue(side.getBarrierHeight());
getBarrierWidthSlider().setEnabled(true);
getBarrierWidthSlider().setValueFrozen(side.getBarrierWidth());
break;
case 4: // ignore
// nothing
break;
}
}
private void checkBarrierWall(Segment segment, SegmentSide side)
{
// fix up bad value (width should not be 0)
if (getBarrierWidth(segment, side) == 0)
{
String[] options1 = { "Set width to " + SegmentSide.DEFAULT_BARRIER_WALL_WIDTH, "Set style to fence", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierWidthText(segment, side) + getBarrierHeightText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Width", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options1, options1[2]))
{
case 0: // set width to default
side.setBarrierWidth(SegmentSide.DEFAULT_BARRIER_WALL_WIDTH);
break;
case 1: // set style to fence
side.setBarrierStyle("fence");
getBarrierStyleComboBox().setSelectedItem(side.getBarrierStyle());
break;
case 2: // ignore
// nothing
break;
}
}
if (getBarrierHeight(segment, side) == 0)
{
String[] options1 = { "Set height to " + SegmentSide.DEFAULT_BARRIER_WALL_HEIGHT, "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierHeightText(segment, side) + getBarrierWidthText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Height", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options1, options1[1]))
{
case 0: // set height
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_WALL_HEIGHT);
break;
case 1: // ignore
// nothing
break;
}
}
}
private void checkBarrierFence(Segment segment, SegmentSide side)
{
// fix up bad value (width should be 0)
if (getBarrierWidth(segment, side) != 0)
{
String[] options = { "Set width to 0.0", "Set style to wall", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierWidthText(segment, side) + getBarrierHeightText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Width", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2]))
{
case 0: // set width to 0
side.setBarrierWidth(0);
break;
case 1: // set style to wall
side.setBarrierStyle("wall");
getBarrierStyleComboBox().setSelectedItem(side.getBarrierStyle());
break;
case 2: // ignore
// nothing
break;
}
}
// fix up bad value (width should not be 0)
if (getBarrierHeight(segment, side) == 0)
{
String[] options = { "Set height to not be 0.0", "Set style to plan", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierWidthText(segment, side) + getBarrierHeightText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Height", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2]))
{
case 0: // set width to 0
side.setBarrierHeight(SegmentSide.DEFAULT_BARRIER_FENCE_HEIGHT);
break;
case 1: // set style to plan
side.setBarrierStyle("plan");
getBarrierStyleComboBox().setSelectedItem(side.getBarrierStyle());
break;
case 2: // ignore
// nothing
break;
}
}
}
private void checkBarrierNoBarrier(Segment segment, SegmentSide side)
{
// fix up bad values (height should be 0)
if (getBarrierHeight(segment, side) != 0)
{
String[] options = { "Set height to 0.0", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierHeightText(segment, side) + getBarrierWidthText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Height", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]))
{
case 0: // set height to 0
side.setBarrierHeight(0);
break;
case 1: // ignore
// nothing
break;
}
}
// fix up bad values (width should be 0)
if (getBarrierWidth(segment, side) != 0)
{
String[] options = { "Set width to 0.0", "Ignore" };
switch (JOptionPane.showOptionDialog(null, "Found " + side.getName() + getBarrierStyleText(segment, side) + " with" +
getBarrierWidthText(segment, side) + getBarrierHeightText(segment, side) + getBarrierSurfaceText(segment, side),
"Invalid Barrier Width", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]))
{
case 0: // set width to 0
side.setBarrierWidth(0);
break;
case 1: // ignore
// nothing
break;
}
}
}
private double getBarrierHeight(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBarrierHeight()))
{
return side.getBarrierHeight();
}
return side.isRight() ? segment.getValidRightBarrierHeight(parent.editorFrame) : segment.getValidLeftBarrierHeight(parent.editorFrame);
}
private String getBarrierHeightText(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBarrierHeight()))
{
return " height " + side.getBarrierHeight();
}
return " inherited height " + getBarrierHeight(segment, side);
}
private double getBarrierWidth(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBarrierWidth()))
{
return side.getBarrierWidth();
}
return side.isRight() ? segment.getValidRightBarrierWidth(parent.editorFrame) : segment.getValidLeftBarrierWidth(parent.editorFrame);
}
private String getBarrierWidthText(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBarrierWidth()))
{
return " width " + side.getBarrierWidth();
}
return " inherited width " + getBarrierWidth(segment, side);
}
private String getBarrierSurface(Segment segment, SegmentSide side)
{
if (side.getBarrierSurface() != null && !side.getBarrierSurface().isEmpty())
{
return side.getBarrierSurface();
}
return side.isRight() ? segment.getValidRightBarrierSurface(parent.editorFrame) : segment.getValidLeftBarrierSurface(parent.editorFrame);
}
private String getBarrierSurfaceText(Segment segment, SegmentSide side)
{
if (side.getBarrierSurface() != null && !side.getBarrierSurface().isEmpty())
{
return " surface \"" + side.getBarrierSurface() + "\"";
}
return " inherited surface \"" + getBarrierSurface(segment, side) + "\"";
}
private String getBarrierStyle(Segment segment, SegmentSide side)
{
if (side.getBarrierStyle() != null && !side.getBarrierStyle().isEmpty())
{
return side.getBarrierStyle();
}
return side.isRight() ? segment.getValidRightBarrierStyle(parent.editorFrame) : segment.getValidLeftBarrierStyle(parent.editorFrame);
}
private String getBarrierStyleText(Segment segment, SegmentSide side)
{
if (side.getBarrierStyle() != null && !side.getBarrierStyle().isEmpty())
{
return " barrier style \"" + side.getBarrierStyle() + "\"";
}
return " inherited barrier style \"" + getBarrierStyle(segment, side) + "\"";
}
private double getBorderHeight(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBorderHeight()))
{
return side.getBorderHeight();
}
return side.isRight() ? segment.getValidRightBorderHeight(parent.editorFrame) : segment.getValidLeftBorderHeight(parent.editorFrame);
}
private String getBorderHeightText(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBorderHeight()))
{
return " height " + side.getBorderHeight();
}
return " inherited height " + getBorderHeight(segment, side);
}
private double getBorderWidth(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBorderWidth()))
{
return side.getBorderWidth();
}
return side.isRight() ? segment.getValidRightBorderWidth(parent.editorFrame) : segment.getValidLeftBorderWidth(parent.editorFrame);
}
private String getBorderWidthText(Segment segment, SegmentSide side)
{
if (!Double.isNaN(side.getBorderWidth()))
{
return " width " + side.getBorderWidth();
}
return " inherited width " + getBorderWidth(segment, side);
}
private String getBorderSurface(Segment segment, SegmentSide side)
{
if (side.getBorderSurface() != null && !side.getBorderSurface().isEmpty())
{
return side.getBorderSurface();
}
return side.isRight() ? segment.getValidRightBorderSurface(parent.editorFrame) : segment.getValidLeftBorderSurface(parent.editorFrame);
}
private String getBorderSurfaceText(Segment segment, SegmentSide side)
{
if (side.getBorderSurface() != null && !side.getBorderSurface().isEmpty())
{
return " surface \"" + side.getBorderSurface() + "\"";
}
return " inherited surface \"" + getBorderSurface(segment, side) + "\"";
}
private String getBorderStyle(Segment segment, SegmentSide side)
{
if (side.getBorderStyle() != null && !side.getBorderStyle().isEmpty())
{
return side.getBorderStyle();
}
return side.isRight() ? segment.getValidRightBorderStyle(parent.editorFrame) : segment.getValidLeftBorderStyle(parent.editorFrame);
}
private String getBorderStyleText(Segment segment, SegmentSide side)
{
if (side.getBorderStyle() != null && !side.getBorderStyle().isEmpty())
{
return " border style \"" + side.getBorderStyle() + "\"";
}
return " inherited border style \"" + getBorderStyle(segment, side) + "\"";
}
/*
* (non-Javadoc)
*
* @see gui.segment.SliderListener#valueChanged(gui.segment.SegmentSlider)
*/
public void sliderChanged(SegmentSlider slider)
{
Interpreter line = new Interpreter();
String command = "";
try
{
line.set("side", side);
String method = slider.getMethod();
if (Double.isNaN(slider.getValue()))
command = "side.set" + method + "(Double.NaN)";
else
command = "side.set" + method + "(" + slider.getValue() + ")";
line.eval(command);
side = (SegmentSide) line.get("side");
} catch (EvalError e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
parent.update();
}
public void checkBoxChanged(SegmentSlider slider)
{
}
} // @jve:decl-index=0:visual-constraint="42,-30"