From 744dbeb9c7ee52ab5cbdf26b3ec8514b2013bac5 Mon Sep 17 00:00:00 2001 From: Sibo Van Gool Date: Tue, 6 Jul 2021 21:04:51 +0200 Subject: [PATCH] [fixes #905] use of InsideColorComponentHandler --- .../document/OpenRocketDocument.java | 2 +- .../openrocket/file/GeneralRocketSaver.java | 2 +- .../importt/InsideAppearanceHandler.java | 6 +- .../savers/RocketComponentSaver.java | 7 +- .../openrocket/rocketcomponent/BodyTube.java | 48 +-------- .../rocketcomponent/InsideColorComponent.java | 47 +-------- .../InsideColorComponentHandler.java | 97 +++++++++++++++++++ .../openrocket/rocketcomponent/LaunchLug.java | 49 +--------- .../openrocket/rocketcomponent/NoseCone.java | 48 +-------- .../rocketcomponent/Transition.java | 53 ++-------- .../rocketcomponent/TubeFinSet.java | 49 +--------- .../gui/configdialog/AppearancePanel.java | 20 ++-- .../gui/figure3d/RealisticRenderer.java | 6 +- .../openrocket/gui/util/EditDecalHelper.java | 7 +- 14 files changed, 146 insertions(+), 295 deletions(-) create mode 100644 core/src/net/sf/openrocket/rocketcomponent/InsideColorComponentHandler.java diff --git a/core/src/net/sf/openrocket/document/OpenRocketDocument.java b/core/src/net/sf/openrocket/document/OpenRocketDocument.java index c5cdb94cc..022ad0902 100644 --- a/core/src/net/sf/openrocket/document/OpenRocketDocument.java +++ b/core/src/net/sf/openrocket/document/OpenRocketDocument.java @@ -293,7 +293,7 @@ public class OpenRocketDocument implements ComponentChangeListener { */ private boolean hasDecalInside(RocketComponent comp, DecalImage img) { if (comp instanceof InsideColorComponent) { - Appearance a = ((InsideColorComponent)comp).getInsideAppearance(); + Appearance a = ((InsideColorComponent)comp).getInsideColorComponentHandler().getInsideAppearance(); if (a == null) return false; Decal d = a.getTexture(); diff --git a/core/src/net/sf/openrocket/file/GeneralRocketSaver.java b/core/src/net/sf/openrocket/file/GeneralRocketSaver.java index 7e1a1827c..4a4ecbec6 100644 --- a/core/src/net/sf/openrocket/file/GeneralRocketSaver.java +++ b/core/src/net/sf/openrocket/file/GeneralRocketSaver.java @@ -163,7 +163,7 @@ public class GeneralRocketSaver { Appearance ap = c.getAppearance(); Appearance ap_in = null; if (c instanceof InsideColorComponent) - ap_in = ((InsideColorComponent)c).getInsideAppearance(); + ap_in = ((InsideColorComponent)c).getInsideColorComponentHandler().getInsideAppearance(); if ((ap == null) && (ap_in == null)) continue; if (ap != null) { diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/InsideAppearanceHandler.java b/core/src/net/sf/openrocket/file/openrocket/importt/InsideAppearanceHandler.java index 16c3e6753..37ec07d23 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/InsideAppearanceHandler.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/InsideAppearanceHandler.java @@ -24,13 +24,13 @@ public class InsideAppearanceHandler extends AppearanceHandler { if ("edgesSameAsInside".equals(element)) { boolean edgesSameAsInside = Boolean.parseBoolean(content); if (component instanceof InsideColorComponent) - ((InsideColorComponent)component).setEdgesSameAsInside(edgesSameAsInside); + ((InsideColorComponent)component).getInsideColorComponentHandler().setEdgesSameAsInside(edgesSameAsInside); return; } if ("insideSameAsOutside".equals(element)) { boolean insideSameAsOutside = Boolean.parseBoolean(content); if (component instanceof InsideColorComponent) - ((InsideColorComponent)component).setInsideSameAsOutside(insideSameAsOutside); + ((InsideColorComponent)component).getInsideColorComponentHandler().setInsideSameAsOutside(insideSameAsOutside); return; } @@ -40,6 +40,6 @@ public class InsideAppearanceHandler extends AppearanceHandler { @Override protected void setAppearance() { if ((component instanceof InsideColorComponent)) - ((InsideColorComponent)component).setInsideAppearance(builder.getAppearance()); + ((InsideColorComponent)component).getInsideColorComponentHandler().setInsideAppearance(builder.getAppearance()); } } diff --git a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java index 29664b387..1c4acc289 100644 --- a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java @@ -53,11 +53,12 @@ public class RocketComponentSaver { // Save inside appearance if (c instanceof InsideColorComponent) { - Appearance ap_in = ((InsideColorComponent)c).getInsideAppearance(); + InsideColorComponentHandler handler = ((InsideColorComponent)c).getInsideColorComponentHandler(); + Appearance ap_in = handler.getInsideAppearance(); if (ap_in != null) { elements.add(""); - elements.add("" + ((InsideColorComponent) c).isEdgesSameAsInside() + ""); - elements.add("" + ((InsideColorComponent) c).isInsideSameAsOutside() + ""); + elements.add("" + handler.isEdgesSameAsInside() + ""); + elements.add("" + handler.isInsideSameAsOutside() + ""); buildAppearanceElements(elements, ap_in); elements.add(""); } diff --git a/core/src/net/sf/openrocket/rocketcomponent/BodyTube.java b/core/src/net/sf/openrocket/rocketcomponent/BodyTube.java index 837dd5cf0..2a43e7279 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/BodyTube.java +++ b/core/src/net/sf/openrocket/rocketcomponent/BodyTube.java @@ -32,10 +32,7 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou private MotorConfigurationSet motors; - // Settings for inside/edge appearance - private Appearance insideAppearance = null; - private boolean insideSameAsOutside = true; - private boolean edgesSameAsInside = true; + private final InsideColorComponentHandler insideColorComponentHandler = new InsideColorComponentHandler(this); public BodyTube() { this(8 * DEFAULT_RADIUS, DEFAULT_RADIUS); @@ -459,48 +456,9 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou return ClusterConfiguration.SINGLE; } - @Override - public Appearance getInsideAppearance() { - return this.insideAppearance; - } @Override - public void setInsideAppearance(Appearance appearance) { - this.insideAppearance = appearance; - if (this.insideAppearance != null) { - Decal d = this.insideAppearance.getTexture(); - if (d != null) { - d.getImage().addChangeListener(new StateChangeListener() { - - @Override - public void stateChanged(EventObject e) { - fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); - } - - }); - } - } - // CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE? - fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); - } - - @Override - public boolean isEdgesSameAsInside() { - return this.edgesSameAsInside; - } - - @Override - public void setEdgesSameAsInside(boolean newState) { - this.edgesSameAsInside = newState; - } - - @Override - public boolean isInsideSameAsOutside() { - return this.insideSameAsOutside; - } - - @Override - public void setInsideSameAsOutside(boolean newState) { - this.insideSameAsOutside = newState; + public InsideColorComponentHandler getInsideColorComponentHandler() { + return this.insideColorComponentHandler; } } diff --git a/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponent.java b/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponent.java index 3605cc322..c964b902a 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponent.java +++ b/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponent.java @@ -19,50 +19,7 @@ import java.util.EventObject; */ public interface InsideColorComponent { /** - * Get the realistic inside appearance of this component. - * null = use the default for this material - * - * @return The component's realistic inner appearance, or null + * @return the InsideColorComponentHandler */ - Appearance getInsideAppearance(); - - /** - * Set the realistic inside appearance of this component. - * Use null for default. - * - * @param appearance the inner appearance to be set - */ - void setInsideAppearance(Appearance appearance); - - /** - * Checks whether the component uses for the edges the same appearance as the inside (return true) or as the - * outside (return false) - * - * @return true if edges should use the same appearance as the inside, - * false if edges should use the same appearance as the outside - */ - boolean isEdgesSameAsInside(); - - /** - * Sets the new state for edgesUseInsideAppearance to newState - * - * @param newState new edgesUseInsideAppearance value - */ - void setEdgesSameAsInside(boolean newState); - - /** - * Checks whether the component should use the same appearance for the inside as the outside (return true) or as the - * outside (return false) - * - * @return true if edges should use the same appearance as the inside, - * false if edges should use the same appearance as the outside - */ - boolean isInsideSameAsOutside(); - - /** - * Sets the new state for insideSameAsOutside to newState - * - * @param newState new edgesUseInsideAppearance value - */ - void setInsideSameAsOutside(boolean newState); + InsideColorComponentHandler getInsideColorComponentHandler(); } diff --git a/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponentHandler.java b/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponentHandler.java new file mode 100644 index 000000000..44f966418 --- /dev/null +++ b/core/src/net/sf/openrocket/rocketcomponent/InsideColorComponentHandler.java @@ -0,0 +1,97 @@ +package net.sf.openrocket.rocketcomponent; + +import net.sf.openrocket.appearance.Appearance; +import net.sf.openrocket.appearance.Decal; +import net.sf.openrocket.util.StateChangeListener; + +import java.util.EventObject; + +/** + * This component handles the necessary functionalities of an InsideColorComponent. + * + * @author Sibo Van Gool + */ +public class InsideColorComponentHandler { + private final RocketComponent component; + private Appearance insideAppearance = null; + private boolean insideSameAsOutside = true; + private boolean edgesSameAsInside = true; + + public InsideColorComponentHandler(RocketComponent component) { + this.component = component; + } + + /** + * Get the realistic inside appearance of this component. + * null = use the default for this material + * + * @return The component's realistic inner appearance, or null + */ + public Appearance getInsideAppearance() { + return this.insideAppearance; + } + + /** + * Set the realistic inside appearance of this component. + * Use null for default. + * + * @param appearance the inner appearance to be set + */ + public void setInsideAppearance(Appearance appearance) { + this.insideAppearance = appearance; + if (this.insideAppearance != null) { + Decal d = this.insideAppearance.getTexture(); + if (d != null) { + d.getImage().addChangeListener(new StateChangeListener() { + + @Override + public void stateChanged(EventObject e) { + component.fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); + } + + }); + } + } + component.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); + } + + /** + * Checks whether the component uses for the edges the same appearance as the inside (return true) or as the + * outside (return false) + * + * @return true if edges should use the same appearance as the inside, + * false if edges should use the same appearance as the outside + */ + public boolean isEdgesSameAsInside() { + return this.edgesSameAsInside; + } + + /** + * Sets the new state for edgesUseInsideAppearance to newState + * + * @param newState new edgesUseInsideAppearance value + */ + public void setEdgesSameAsInside(boolean newState) { + this.edgesSameAsInside = newState; + } + + /** + * Checks whether the component should use the same appearance for the inside as the outside (return true) or as the + * outside (return false) + * + * @return true if edges should use the same appearance as the inside, + * false if edges should use the same appearance as the outside + */ + public boolean isInsideSameAsOutside() { + return this.insideSameAsOutside; + } + + /** + * Sets the new state for insideSameAsOutside to newState + * + * @param newState new edgesUseInsideAppearance value + */ + public void setInsideSameAsOutside(boolean newState) { + this.insideSameAsOutside = newState; + } +} diff --git a/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java b/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java index cbd2bd28f..26a4a126c 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java +++ b/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java @@ -30,10 +30,7 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B private int instanceCount = 1; private double instanceSeparation = 0; // front-front along the positive rocket axis. i.e. [1,0,0]; - // Settings for inside/edge appearance - private Appearance insideAppearance = null; - private boolean insideSameAsOutside = true; - private boolean edgesSameAsInside = true; + private final InsideColorComponentHandler insideColorComponentHandler = new InsideColorComponentHandler(this); public LaunchLug() { super(AxialMethod.MIDDLE); @@ -289,47 +286,7 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B } @Override - public Appearance getInsideAppearance() { - return this.insideAppearance; - } - - @Override - public void setInsideAppearance(Appearance appearance) { - this.insideAppearance = appearance; - if (this.insideAppearance != null) { - Decal d = this.insideAppearance.getTexture(); - if (d != null) { - d.getImage().addChangeListener(new StateChangeListener() { - - @Override - public void stateChanged(EventObject e) { - fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); - } - - }); - } - } - // CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE? - fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); - } - - @Override - public boolean isEdgesSameAsInside() { - return this.edgesSameAsInside; - } - - @Override - public void setEdgesSameAsInside(boolean newState) { - this.edgesSameAsInside = newState; - } - - @Override - public boolean isInsideSameAsOutside() { - return this.insideSameAsOutside; - } - - @Override - public void setInsideSameAsOutside(boolean newState) { - this.insideSameAsOutside = newState; + public InsideColorComponentHandler getInsideColorComponentHandler() { + return this.insideColorComponentHandler; } } diff --git a/core/src/net/sf/openrocket/rocketcomponent/NoseCone.java b/core/src/net/sf/openrocket/rocketcomponent/NoseCone.java index 3ca204336..bc9855953 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/NoseCone.java +++ b/core/src/net/sf/openrocket/rocketcomponent/NoseCone.java @@ -20,10 +20,7 @@ import java.util.EventObject; public class NoseCone extends Transition implements InsideColorComponent { private static final Translator trans = Application.getTranslator(); - // Settings for inside/edge appearance - private Appearance insideAppearance = null; - private boolean insideSameAsOutside = true; - private boolean edgesSameAsInside = true; + private final InsideColorComponentHandler insideColorComponentHandler = new InsideColorComponentHandler(this); /********* Constructors **********/ public NoseCone() { @@ -145,48 +142,9 @@ public class NoseCone extends Transition implements InsideColorComponent { return trans.get("NoseCone.NoseCone"); } - @Override - public Appearance getInsideAppearance() { - return this.insideAppearance; - } @Override - public void setInsideAppearance(Appearance appearance) { - this.insideAppearance = appearance; - if (this.insideAppearance != null) { - Decal d = this.insideAppearance.getTexture(); - if (d != null) { - d.getImage().addChangeListener(new StateChangeListener() { - - @Override - public void stateChanged(EventObject e) { - fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); - } - - }); - } - } - // CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE? - fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); - } - - @Override - public boolean isEdgesSameAsInside() { - return this.edgesSameAsInside; - } - - @Override - public void setEdgesSameAsInside(boolean newState) { - this.edgesSameAsInside = newState; - } - - @Override - public boolean isInsideSameAsOutside() { - return this.insideSameAsOutside; - } - - @Override - public void setInsideSameAsOutside(boolean newState) { - this.insideSameAsOutside = newState; + public InsideColorComponentHandler getInsideColorComponentHandler() { + return this.insideColorComponentHandler; } } diff --git a/core/src/net/sf/openrocket/rocketcomponent/Transition.java b/core/src/net/sf/openrocket/rocketcomponent/Transition.java index 1d446a147..f8852c12a 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/Transition.java +++ b/core/src/net/sf/openrocket/rocketcomponent/Transition.java @@ -44,10 +44,7 @@ public class Transition extends SymmetricComponent implements InsideColorCompone // Used to cache the clip length private double clipLength = -1; - // Settings for inside/edge appearance - private Appearance insideAppearance = null; - private boolean insideSameAsOutside = true; - private boolean edgesSameAsInside = true; + private final InsideColorComponentHandler insideColorComponentHandler = new InsideColorComponentHandler(this); public Transition() { super(); @@ -607,6 +604,11 @@ public class Transition extends SymmetricComponent implements InsideColorCompone } + @Override + public InsideColorComponentHandler getInsideColorComponentHandler() { + return this.insideColorComponentHandler; + } + /** * An enumeration listing the possible shapes of transitions. * @@ -947,48 +949,5 @@ public class Transition extends SymmetricComponent implements InsideColorCompone } } - @Override - public Appearance getInsideAppearance() { - return this.insideAppearance; - } - @Override - public void setInsideAppearance(Appearance appearance) { - this.insideAppearance = appearance; - if (this.insideAppearance != null) { - Decal d = this.insideAppearance.getTexture(); - if (d != null) { - d.getImage().addChangeListener(new StateChangeListener() { - - @Override - public void stateChanged(EventObject e) { - fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); - } - - }); - } - } - // CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE? - fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); - } - - @Override - public boolean isEdgesSameAsInside() { - return this.edgesSameAsInside; - } - - @Override - public void setEdgesSameAsInside(boolean newState) { - this.edgesSameAsInside = newState; - } - - @Override - public boolean isInsideSameAsOutside() { - return this.insideSameAsOutside; - } - - @Override - public void setInsideSameAsOutside(boolean newState) { - this.insideSameAsOutside = newState; - } } diff --git a/core/src/net/sf/openrocket/rocketcomponent/TubeFinSet.java b/core/src/net/sf/openrocket/rocketcomponent/TubeFinSet.java index 92aca3409..4dd4843b6 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/TubeFinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/TubeFinSet.java @@ -28,10 +28,7 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable, private AngleMethod angleMethod = AngleMethod.FIXED; protected RadiusMethod radiusMethod = RadiusMethod.RELATIVE; - // Settings for inside/edge appearance - private Appearance insideAppearance = null; - private boolean insideSameAsOutside = true; - private boolean edgesSameAsInside = true; + private final InsideColorComponentHandler insideColorComponentHandler = new InsideColorComponentHandler(this); /** * Rotation angle of the first fin. Zero corresponds to the positive y-axis. @@ -458,49 +455,9 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable, } - @Override - public Appearance getInsideAppearance() { - return this.insideAppearance; - } @Override - public void setInsideAppearance(Appearance appearance) { - this.insideAppearance = appearance; - if (this.insideAppearance != null) { - Decal d = this.insideAppearance.getTexture(); - if (d != null) { - d.getImage().addChangeListener(new StateChangeListener() { - - @Override - public void stateChanged(EventObject e) { - fireComponentChangeEvent(ComponentChangeEvent.TEXTURE_CHANGE); - } - - }); - } - } - // CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE? - fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); + public InsideColorComponentHandler getInsideColorComponentHandler() { + return this.insideColorComponentHandler; } - - @Override - public boolean isEdgesSameAsInside() { - return this.edgesSameAsInside; - } - - @Override - public void setEdgesSameAsInside(boolean newState) { - this.edgesSameAsInside = newState; - } - - @Override - public boolean isInsideSameAsOutside() { - return this.insideSameAsOutside; - } - - @Override - public void setInsideSameAsOutside(boolean newState) { - this.insideSameAsOutside = newState; - } - } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java b/swing/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java index 9fb0f9fff..a0bee20fa 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/AppearancePanel.java @@ -35,6 +35,7 @@ import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.rocketcomponent.ComponentChangeEvent; import net.sf.openrocket.rocketcomponent.InsideColorComponent; +import net.sf.openrocket.rocketcomponent.InsideColorComponentHandler; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.GeneralUnit; @@ -187,7 +188,8 @@ public class AppearancePanel extends JPanel { } if (c instanceof InsideColorComponent) { - previousUserSelectedInsideAppearance = ((InsideColorComponent) c).getInsideAppearance(); + previousUserSelectedInsideAppearance = ((InsideColorComponent) c).getInsideColorComponentHandler() + .getInsideAppearance(); if (previousUserSelectedInsideAppearance == null) { previousUserSelectedInsideAppearance = new AppearanceBuilder() .getAppearance(); @@ -298,6 +300,8 @@ public class AppearancePanel extends JPanel { // Display a tabbed panel for choosing the outside and inside appearance, if the object is of type InsideColorComponent if (c instanceof InsideColorComponent) { + InsideColorComponentHandler handler = ((InsideColorComponent)c).getInsideColorComponentHandler(); + JTabbedPane tabbedPane = new JTabbedPane(); JPanel outsidePanel = new JPanel(new MigLayout("fill", "[150][grow][150][grow]")); JPanel insidePanel = new JPanel(new MigLayout("fill", "[150][grow][150][grow]")); @@ -312,7 +316,7 @@ public class AppearancePanel extends JPanel { add(tabbedPane, "span 4, growx, wrap"); // Checkbox to set edges the same as inside/outside - BooleanModel b = new BooleanModel(((InsideColorComponent) c).isEdgesSameAsInside()); + BooleanModel b = new BooleanModel(handler.isEdgesSameAsInside()); JCheckBox edges = new JCheckBox(b); edges.setText(trans.get("AppearanceCfg.lbl.EdgesSameAsInside")); edges.setToolTipText(trans.get("AppearanceCfg.lbl.ttip.EdgesSameAsInside")); @@ -321,7 +325,7 @@ public class AppearancePanel extends JPanel { edges.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - ((InsideColorComponent) c).setEdgesSameAsInside(edges.isSelected()); + handler.setEdgesSameAsInside(edges.isSelected()); c.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); } }); @@ -347,7 +351,8 @@ public class AppearancePanel extends JPanel { } else if (c instanceof InsideColorComponent) { builder = insideAb; - mDefault = new BooleanModel(((InsideColorComponent)c).getInsideAppearance() == null); + mDefault = new BooleanModel( + ((InsideColorComponent)c).getInsideColorComponentHandler().getInsideAppearance() == null); } else return; @@ -363,7 +368,7 @@ public class AppearancePanel extends JPanel { if (!insideBuilder) c.setAppearance(builder.getAppearance()); else - ((InsideColorComponent)c).setInsideAppearance(builder.getAppearance()); + ((InsideColorComponent)c).getInsideColorComponentHandler().setInsideAppearance(builder.getAppearance()); decalModel.refresh(); } }); @@ -403,14 +408,15 @@ public class AppearancePanel extends JPanel { // Custom inside color if (insideBuilder) { - BooleanModel b = new BooleanModel(((InsideColorComponent) c).isInsideSameAsOutside()); + InsideColorComponentHandler handler = ((InsideColorComponent)c).getInsideColorComponentHandler(); + BooleanModel b = new BooleanModel(handler.isInsideSameAsOutside()); JCheckBox customInside = new JCheckBox(b); customInside.setText(trans.get("AppearanceCfg.lbl.InsideSameAsOutside")); customInside.setToolTipText(trans.get("AppearanceCfg.lbl.ttip.InsideSameAsOutside")); customInside.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - ((InsideColorComponent) c).setInsideSameAsOutside(customInside.isSelected()); + handler.setInsideSameAsOutside(customInside.isSelected()); c.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); } }); diff --git a/swing/src/net/sf/openrocket/gui/figure3d/RealisticRenderer.java b/swing/src/net/sf/openrocket/gui/figure3d/RealisticRenderer.java index e799f886c..9b155748a 100644 --- a/swing/src/net/sf/openrocket/gui/figure3d/RealisticRenderer.java +++ b/swing/src/net/sf/openrocket/gui/figure3d/RealisticRenderer.java @@ -95,10 +95,10 @@ public class RealisticRenderer extends RocketRenderer { Appearance app = getAppearance(c); if (c instanceof InsideColorComponent) { Appearance innerApp = getInsideAppearance(c); - if (((InsideColorComponent) c).isInsideSameAsOutside()) innerApp = app; + if (((InsideColorComponent) c).getInsideColorComponentHandler().isInsideSameAsOutside()) innerApp = app; render(gl, geom, Surface.INSIDE, innerApp, true, alpha); - if (((InsideColorComponent) c).isEdgesSameAsInside()) + if (((InsideColorComponent) c).getInsideColorComponentHandler().isEdgesSameAsInside()) render(gl, geom, Surface.EDGES, innerApp, false, alpha); else render(gl, geom, Surface.EDGES, app, false, alpha); @@ -208,7 +208,7 @@ public class RealisticRenderer extends RocketRenderer { protected Appearance getInsideAppearance(RocketComponent c) { if (c instanceof InsideColorComponent) { - Appearance ret = ((InsideColorComponent)c).getInsideAppearance(); + Appearance ret = ((InsideColorComponent)c).getInsideColorComponentHandler().getInsideAppearance(); if (ret == null) { ret = DefaultAppearance.getDefaultAppearance(c); } diff --git a/swing/src/net/sf/openrocket/gui/util/EditDecalHelper.java b/swing/src/net/sf/openrocket/gui/util/EditDecalHelper.java index b6ed0c1a5..7fbf24e17 100644 --- a/swing/src/net/sf/openrocket/gui/util/EditDecalHelper.java +++ b/swing/src/net/sf/openrocket/gui/util/EditDecalHelper.java @@ -17,6 +17,7 @@ import net.sf.openrocket.gui.watcher.WatchEvent; import net.sf.openrocket.gui.watcher.WatchService; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.rocketcomponent.InsideColorComponent; +import net.sf.openrocket.rocketcomponent.InsideColorComponentHandler; import net.sf.openrocket.rocketcomponent.RocketComponent; import com.google.inject.Inject; @@ -143,11 +144,11 @@ public class EditDecalHelper { DecalImage newImage = doc.makeUniqueDecal(decal); if (component instanceof InsideColorComponent) { - InsideColorComponent c = ((InsideColorComponent)component); - AppearanceBuilder appearanceBuilder = new AppearanceBuilder(c.getInsideAppearance()); + InsideColorComponentHandler handler = ((InsideColorComponent)component).getInsideColorComponentHandler(); + AppearanceBuilder appearanceBuilder = new AppearanceBuilder(handler.getInsideAppearance()); appearanceBuilder.setImage(newImage); - c.setInsideAppearance(appearanceBuilder.getAppearance()); + handler.setInsideAppearance(appearanceBuilder.getAppearance()); } return newImage;