package gov.nasa.arc.mct.fastplot.settings; import java.awt.Component; import java.util.ArrayList; import java.util.List; public class PlotSettingsPanel extends PlotSettingsSubPanel { private static final long serialVersionUID = -7171700637608907253L; private List<PlotSettingsSubPanel> subPanels = new ArrayList<PlotSettingsSubPanel>(); private boolean dirty = false; private boolean valid = true; private final Runnable callback = new Runnable() { @Override public void run() { updateState(); fireCallbacks(); } }; private void updateState() { dirty = false; valid = true; for (PlotSettingsSubPanel subPanel : subPanels) { dirty |= subPanel.isDirty(); valid &= subPanel.isValidated(); } } /** * Add a sub panel which is used to formulate settings. * Note that this does not add the subPanel visually * @param subPanel */ public void addSubPanel(PlotSettingsSubPanel subPanel) { if (!subPanels.contains(subPanel)) { subPanels.add(subPanel); subPanel.addCallback(callback); } } @Override public Component add(Component comp) { if (comp instanceof PlotSettingsSubPanel) { addSubPanel((PlotSettingsSubPanel) comp); } return super.add(comp); } /* (non-Javadoc) * @see java.awt.Container#add(java.awt.Component, int) */ @Override public Component add(Component comp, int arg1) { if (comp instanceof PlotSettingsSubPanel) { addSubPanel((PlotSettingsSubPanel) comp); } return super.add(comp, arg1); } /* (non-Javadoc) * @see java.awt.Container#add(java.awt.Component, java.lang.Object, int) */ @Override public void add(Component comp, Object arg1, int arg2) { if (comp instanceof PlotSettingsSubPanel) { addSubPanel((PlotSettingsSubPanel) comp); } super.add(comp, arg1, arg2); } /* (non-Javadoc) * @see java.awt.Container#add(java.awt.Component, java.lang.Object) */ @Override public void add(Component comp, Object arg1) { if (comp instanceof PlotSettingsSubPanel) { addSubPanel((PlotSettingsSubPanel) comp); } super.add(comp, arg1); } /* (non-Javadoc) * @see java.awt.Container#add(java.lang.String, java.awt.Component) */ @Override public Component add(String arg0, Component comp) { if (comp instanceof PlotSettingsSubPanel) { addSubPanel((PlotSettingsSubPanel) comp); } return super.add(arg0, comp); } /* (non-Javadoc) * @see gov.nasa.arc.mct.fastplot.settings.PlotSettingsPopulator#populate(gov.nasa.arc.mct.fastplot.settings.PlotSettings) */ @Override public void populate(PlotConfiguration settings) { for (PlotSettingsSubPanel subPanel : subPanels) { subPanel.populate(settings); } updateState(); } /* (non-Javadoc) * @see gov.nasa.arc.mct.fastplot.settings.PlotSettingsPopulator#reset(gov.nasa.arc.mct.fastplot.settings.PlotSettings) */ @Override public void reset(PlotConfiguration settings, boolean hard) { for (PlotSettingsSubPanel subPanel : subPanels) { subPanel.reset(settings, hard); } updateState(); } @Override public boolean isDirty() { updateState(); return dirty; } @Override public boolean isValidated() { updateState(); return valid; } }