package gov.nasa.arc.mct.fastplot.settings; import gov.nasa.arc.mct.fastplot.view.PlotControlsLayout; import gov.nasa.arc.mct.fastplot.view.PlotControlsLayout.ResizersScrollPane; import gov.nasa.arc.mct.fastplot.view.PlotViewManifestation; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JPanel; public class PlotSettingsControlContainer extends JPanel { private static final long serialVersionUID = 8930533587430928800L; private PlotViewManifestation managedView; public PlotSettingsControlContainer(PlotViewManifestation managedView) { this.managedView = managedView; final PlotSettingsSubPanel panel = new PlotSettingsControlArea(managedView); panel.reset(managedView.getPlot(), true); setLayout(new GridLayout(1,1)); PlotControlsLayout controlsLayout = new PlotControlsLayout(); PlotControlsLayout.ResizersScrollPane scroller = new ResizersScrollPane(panel); scroller.setBorder(BorderFactory.createEmptyBorder()); JPanel paddableOverallPanel = new JPanel(controlsLayout); paddableOverallPanel.add(scroller, PlotControlsLayout.MIDDLE); paddableOverallPanel.add(createApplyButtonPanel(panel), PlotControlsLayout.LOWER); add(paddableOverallPanel); } // Apply and Reset buttons at bottom of the Plot Settings Control Panel private JPanel createApplyButtonPanel(final PlotSettingsSubPanel panel) { final JButton okButton = new JButton("Apply");//BUNDLE.getString("Apply.label")); final JButton resetButton = new JButton("Reset");//BUNDLE.getString("Reset.label")); final Runnable callback = new Runnable() { @Override public void run() { PlotSettings settings = new PlotSettings(); settings.loadFrom(managedView); panel.populate(settings); panel.reset(settings, false); okButton.setEnabled(panel.isDirty() && panel.isValidated()); resetButton.setEnabled(panel.isDirty()); } }; okButton.setEnabled(false); resetButton.setEnabled(false); panel.addCallback(callback); okButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { PlotSettings settings = new PlotSettings(); settings.loadFrom(managedView); panel.populate(settings); settings.persist(managedView); managedView.setupPlot(settings); panel.reset(settings, true); callback.run(); } }); resetButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { PlotSettings settings = new PlotSettings(); settings.loadFrom(managedView); panel.reset(settings, true); callback.run(); // Disable apply reset } }); JPanel okButtonPadded = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 7)); okButtonPadded.add(okButton); okButtonPadded.add(resetButton); JPanel okPanel = new JPanel(); okPanel.setLayout(new BorderLayout()); okPanel.add(okButtonPadded, BorderLayout.EAST); // Instrument okPanel.setName("okPanel"); okButton.setName("okButton"); okButtonPadded.setName("okButtonPadded"); // Set the panel color to a nice shade of gray okButtonPadded.setOpaque(false); okPanel.setBackground(Color.DARK_GRAY); //TODO: Externalize return okPanel; } }