Create a simpler appearance builder for a simplified UI.

This commit is contained in:
bkuker 2012-12-13 15:23:12 -05:00
parent 5a8833738c
commit ee95d6998a
2 changed files with 127 additions and 64 deletions

View File

@ -0,0 +1,77 @@
package net.sf.openrocket.appearance;
import net.sf.openrocket.util.Color;
public class SimpleAppearanceBuilder extends AppearanceBuilder {
public SimpleAppearanceBuilder() {
super();
}
public SimpleAppearanceBuilder(Appearance a) {
super(a);
}
public Color getColor() {
return getDiffuse();
}
public void setColor(final Color c) {
batch(new Runnable() {
@Override
public void run() {
setAmbient(c);
setDiffuse(c);
}
});
}
public void setShine(final int s) {
batch(new Runnable() {
@Override
public void run() {
setShininess(s);
int c = (int) (s * 2.55);
setSpecular(new net.sf.openrocket.util.Color(c, c, c));
}
});
}
public int getShine() {
return getShininess();
}
private Color oldColor = null;
@Override
public void setImage(final String image) {
batch(new Runnable() {
@Override
public void run() {
if (getImage() == null && image != null) {
oldColor = getColor();
setColor(new Color(255, 255, 255));
} else if (getImage() != null && image == null && oldColor != null) {
setColor(oldColor);
}
SimpleAppearanceBuilder.super.setImage(image);
}
});
}
public double getScaleX() {
return 1.0 / super.getScaleU();
}
public void setScaleX(double scaleU) {
super.setScaleU(1.0 / scaleU);
}
public double getScaleY() {
return 1.0 / super.getScaleV();
}
public void setScaleY(double scaleV) {
super.setScaleV(1.0 / scaleV);
}
}

View File

@ -6,6 +6,7 @@ import java.awt.event.ActionListener;
import java.lang.reflect.Method;
import java.util.EventObject;
import javax.swing.DefaultBoundedRangeModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
@ -14,19 +15,21 @@ import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.appearance.AppearanceBuilder;
import net.sf.openrocket.appearance.Decal.EdgeMode;
import net.sf.openrocket.appearance.SimpleAppearanceBuilder;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.BooleanModel;
import net.sf.openrocket.gui.adaptors.DecalModel;
import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.adaptors.IntegerModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.ColorIcon;
import net.sf.openrocket.gui.components.StyledLabel;
@ -46,7 +49,7 @@ import net.sf.openrocket.util.StateChangeListener;
public class AppearancePanel extends JPanel {
private static final Translator trans = Application.getTranslator();
private AppearanceBuilder ab;
private SimpleAppearanceBuilder ab;
private final static UnitGroup UNIT_FOR_SCALES = new UnitGroup();
static {
@ -108,16 +111,19 @@ public class AppearancePanel extends JPanel {
public AppearancePanel(final OpenRocketDocument document, final RocketComponent c) {
super(new MigLayout("fill", "[150][grow][150][grow]"));
ab = new AppearanceBuilder(c.getAppearance());
ab = new SimpleAppearanceBuilder(c.getAppearance());
net.sf.openrocket.util.Color figureColor = c.getColor();
if (figureColor == null) {
figureColor = Application.getPreferences().getDefaultColor(c.getClass());
}
final JButton figureColorButton = new JButton(new ColorIcon(figureColor));
final JButton diffuseColorButton = new JButton(new ColorIcon(ab.getDiffuse()));
/*final JButton diffuseColorButton = new JButton(new ColorIcon(ab.getDiffuse()));
final JButton ambientColorButton = new JButton(new ColorIcon(ab.getAmbient()));
final JButton specularColorButton = new JButton(new ColorIcon(ab.getSpecular()));
final JButton specularColorButton = new JButton(new ColorIcon(ab.getSpecular()));*/
final JButton colorButton = new JButton(new ColorIcon(ab.getAmbient()));
final JComboBox textureDropDown = new JComboBox( new DecalModel(this,document,ab));;
@ -125,9 +131,10 @@ public class AppearancePanel extends JPanel {
@Override
public void stateChanged(EventObject e) {
figureColorButton.setIcon(new ColorIcon(c.getColor()));
diffuseColorButton.setIcon(new ColorIcon(ab.getDiffuse()));
/*diffuseColorButton.setIcon(new ColorIcon(ab.getDiffuse()));
ambientColorButton.setIcon(new ColorIcon(ab.getAmbient()));
specularColorButton.setIcon(new ColorIcon(ab.getSpecular()));
specularColorButton.setIcon(new ColorIcon(ab.getSpecular()));*/
colorButton.setIcon(new ColorIcon(ab.getColor()));
c.setAppearance(ab.getAppearance());
}
});
@ -144,9 +151,10 @@ public class AppearancePanel extends JPanel {
});
figureColorButton.addActionListener(new ColorActionListener(c, "Color"));
diffuseColorButton.addActionListener(new ColorActionListener(ab, "Diffuse"));
colorButton.addActionListener(new ColorActionListener(ab, "Color"));
/*diffuseColorButton.addActionListener(new ColorActionListener(ab, "Diffuse"));
ambientColorButton.addActionListener(new ColorActionListener(ab, "Ambient"));
specularColorButton.addActionListener(new ColorActionListener(ab, "Specular"));
specularColorButton.addActionListener(new ColorActionListener(ab, "Specular"));*/
BooleanModel mDefault = new BooleanModel(c.getAppearance() == null);
BooleanModel fDefault = new BooleanModel(c.getColor() == null);
@ -213,7 +221,7 @@ public class AppearancePanel extends JPanel {
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
{// Texture Header Row
add(new StyledLabel(trans.get("AppearanceCfg.lbl.Appearance"), Style.BOLD));
add(new StyledLabel(trans.get("AppearanceCfg.lbl.Appearance"), Style.BOLD), "wrap");
final JCheckBox materialDefault = new JCheckBox(mDefault);
materialDefault.addActionListener(new ActionListener() {
@ -226,11 +234,6 @@ public class AppearancePanel extends JPanel {
}
}
});
materialDefault.setText(trans.get("AppearanceCfg.lbl.Usedefault"));
add(materialDefault);
JButton setMDefault = new JButton(trans.get("AppearanceCfg.but.savedefault"));
mDefault.addEnableComponent(setMDefault, false);
add(setMDefault, "span 2, align right, wrap");
}
{// Texture File
@ -241,34 +244,49 @@ public class AppearancePanel extends JPanel {
add(p, "span 3, growx, wrap");
}
{ // Diffuse
/*{ // Diffuse
add(new JLabel(trans.get("AppearanceCfg.lbl.color.diffuse")));
mDefault.addEnableComponent(diffuseColorButton, false);
add(diffuseColorButton);
}*/
{ // Color
add(new JLabel("Color"));
mDefault.addEnableComponent(colorButton, false);
add(colorButton);
}
{ // Scale
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.scale")));
add(new JLabel("x:"), "split 4");
JSpinner scaleU = new JSpinner(new DoubleModel(ab, "ScaleU",UNIT_FOR_SCALES).getSpinnerModel());
JSpinner scaleU = new JSpinner(new DoubleModel(ab, "ScaleX",UNIT_FOR_SCALES).getSpinnerModel());
scaleU.setEditor(new SpinnerEditor(scaleU));
mDefault.addEnableComponent(scaleU, false);
add(scaleU, "w 40");
add(new JLabel("y:"));
JSpinner scaleV = new JSpinner(new DoubleModel(ab, "ScaleV",UNIT_FOR_SCALES).getSpinnerModel());
JSpinner scaleV = new JSpinner(new DoubleModel(ab, "ScaleY",UNIT_FOR_SCALES).getSpinnerModel());
scaleV.setEditor(new SpinnerEditor(scaleV));
mDefault.addEnableComponent(scaleV, false);
add(scaleV, "wrap, w 40");
}
{ // Ambient
add(new JLabel(trans.get("AppearanceCfg.lbl.color.ambient")));
mDefault.addEnableComponent(ambientColorButton, false);
add(ambientColorButton);
{// Placeholder
add(new JLabel(trans.get("AppearanceCfg.lbl.shine")));
JSlider shine = new JSlider(new DefaultBoundedRangeModel(ab.getShine(), 0, 0, 100){{
addChangeListener(new ChangeListener() {
@Override
public void stateChanged(final ChangeEvent e) {
ab.setShine( ((DefaultBoundedRangeModel)e.getSource()).getValue());
}
});
}});
mDefault.addEnableComponent(shine, false);
add(shine, "w 100");
}
{ // Offset
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.offset")));
@ -284,36 +302,16 @@ public class AppearancePanel extends JPanel {
mDefault.addEnableComponent(offsetV, false);
add(offsetV, "wrap, w 40");
}
{ // Specular
add(new JLabel(trans.get("AppearanceCfg.lbl.color.specular")));
mDefault.addEnableComponent(specularColorButton, false);
add(specularColorButton);
{ // Repeat
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.repeat")));
EdgeMode[] list = new EdgeMode[EdgeMode.values().length + 1];
System.arraycopy(EdgeMode.values(), 0, list, 1, EdgeMode.values().length);
JComboBox combo = new JComboBox(new EnumModel<EdgeMode>(ab, "EdgeMode", list));
mDefault.addEnableComponent(combo, false);
add(combo);
}
{ // Center
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.center")));
add(new JLabel("x:"), "split 4");
JSpinner centerU = new JSpinner(new DoubleModel(ab, "CenterU").getSpinnerModel());
centerU.setEditor(new SpinnerEditor(centerU));
mDefault.addEnableComponent(centerU, false);
add(centerU, "w 40");
add(new JLabel("y:"));
JSpinner centerV = new JSpinner(new DoubleModel(ab, "CenterV").getSpinnerModel());
centerV.setEditor(new SpinnerEditor(centerV));
mDefault.addEnableComponent(centerV, false);
add(centerV, "wrap, w 40");
}
{ // Shine
add(new JLabel(trans.get("AppearanceCfg.lbl.shine")));
IntegerModel shineModel = new IntegerModel(ab, "Shininess", 0, 128);
JSpinner shine = new JSpinner(shineModel.getSpinnerModel());
mDefault.addEnableComponent(shine, false);
add(shine, "w 50");
}
{ // Rotation
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.rotation")));
@ -328,18 +326,6 @@ public class AppearancePanel extends JPanel {
add(bs, "w 100, wrap");
}
{// Placeholder
add(new JLabel(""), "span 2");
}
{ // Repeat
add(new JLabel(trans.get("AppearanceCfg.lbl.texture.repeat")));
EdgeMode[] list = new EdgeMode[EdgeMode.values().length + 1];
System.arraycopy(EdgeMode.values(), 0, list, 1, EdgeMode.values().length);
JComboBox combo = new JComboBox(new EnumModel<EdgeMode>(ab, "EdgeMode", list));
mDefault.addEnableComponent(combo, false);
add(combo);
}
}