diff --git a/core/src/net/sf/openrocket/appearance/SimpleAppearanceBuilder.java b/core/src/net/sf/openrocket/appearance/SimpleAppearanceBuilder.java new file mode 100644 index 000000000..0575069d8 --- /dev/null +++ b/core/src/net/sf/openrocket/appearance/SimpleAppearanceBuilder.java @@ -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); + } +} diff --git a/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java b/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java index 37c628edf..cbdd76ce5 100644 --- a/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java +++ b/core/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java @@ -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(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(ab, "EdgeMode", list)); - mDefault.addEnableComponent(combo, false); - add(combo); - } }