Package gov.nasa.arc.mct.fastplot.settings

Source Code of gov.nasa.arc.mct.fastplot.settings.LineSetupPanel

/*******************************************************************************
* Mission Control Technologies, Copyright (c) 2009-2012, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* The MCT platform is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* MCT includes source code licensed under additional open source licenses. See
* the MCT Open Source Licenses file included with this distribution or the About
* MCT Licenses dialog available at runtime from the MCT Help menu for additional
* information.
*******************************************************************************/
package gov.nasa.arc.mct.fastplot.settings;

import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.AxisOrientationSetting;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.PlotLineConnectionType;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.PlotLineDrawingFlags;
import gov.nasa.arc.mct.fastplot.bridge.PlotLineGlobalConfiguration;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ResourceBundle;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;


/**
* This class defines the UI for the Plot Configuration Panel
*/

public class LineSetupPanel extends PlotSettingsSubPanel {
  private static final long serialVersionUID = 4960389368454892861L;

  // Access bundle file where externalized strings are defined.
  private static final ResourceBundle BUNDLE =
                               ResourceBundle.getBundle("gov.nasa.arc.mct.fastplot.view.Bundle");

  private static final int BEHAVIOR_CELLS_X_PADDING = 18;
 
  /*
   * Plot line setup panel controls
   */
  private JLabel       drawLabel;
  private JRadioButton linesOnly;
  private JRadioButton markersAndLines;
  private JRadioButton markersOnly;
 
  private JLabel       connectionLineTypeLabel;
  private JRadioButton direct;
  private JRadioButton step;
 
  private PlotLineDrawingFlags cachedFlags;
  private PlotLineConnectionType cachedConnectionType;
 
  public LineSetupPanel() {
    drawLabel = new JLabel(BUNDLE.getString("Draw.label"));
    linesOnly = new JRadioButton(BUNDLE.getString("LinesOnly.label"));
    markersAndLines = new JRadioButton(BUNDLE.getString("MarkersAndLines.label"));
    markersOnly = new JRadioButton(BUNDLE.getString("MarkersOnly.label"));
   
    connectionLineTypeLabel = new JLabel(BUNDLE.getString("ConnectionLineType.label"));
    direct = new JRadioButton(BUNDLE.getString("Direct.label"));
    step = new JRadioButton(BUNDLE.getString("Step.label"));
    direct.setToolTipText(BUNDLE.getString("Direct.tooltip"));
    step.setToolTipText(BUNDLE.getString("Step.tooltip"));
   
    setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.ipady = 4;
    gbc.ipadx = BEHAVIOR_CELLS_X_PADDING;
    gbc.anchor = GridBagConstraints.WEST;
   
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth  = 1;
    gbc.gridheight = 1;
    gbc.fill = GridBagConstraints.NONE;
    add(drawLabel, gbc);
    gbc.gridy++;
    add(linesOnly, gbc);
    gbc.gridy++;
    add(markersAndLines, gbc);
    gbc.gridy++;
    add(markersOnly, gbc);
   
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.gridheight = 4;
    gbc.fill = GridBagConstraints.VERTICAL;
    add(new JSeparator(JSeparator.VERTICAL), gbc);
   
    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridwidth  = 1;
    gbc.gridheight = 1;
    gbc.fill = GridBagConstraints.NONE;
    add(connectionLineTypeLabel, gbc);
    // Order direct / step such that defined default goes first
    for (JComponent option :
      (PlotLineGlobalConfiguration.getDefaultConnectionType().equals(PlotLineConnectionType.DIRECT) ?
          new JComponent[] {direct,step} : new JComponent[] {step, direct})) {
      gbc.gridy++;
      add(option, gbc);
    }
       
    ButtonGroup drawGroup = new ButtonGroup();
    drawGroup.add(linesOnly);
    drawGroup.add(markersAndLines);
    drawGroup.add(markersOnly);

    ButtonGroup connectionGroup = new ButtonGroup();
    connectionGroup.add(direct);
    connectionGroup.add(step);

    ActionListener disabler = new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
         updateConnectionLineControls();
      }     
    };
   
    linesOnly.addActionListener(disabler);
    markersAndLines.addActionListener(disabler);
    markersOnly.addActionListener(disabler);

    for (Component c : getComponents()) {
      if (c instanceof AbstractButton) {
        ((AbstractButton) c).addActionListener(this); // Trigger callbacks for any action
      }
    }
  }
 
 
 
  private void updateConnectionLineControls() {
    boolean linesShowing = !markersOnly.isSelected();
     connectionLineTypeLabel.setEnabled(linesShowing);
     direct.setEnabled(linesShowing);
     step.setEnabled(linesShowing);
  }

  private PlotLineDrawingFlags getSelectedDrawingFlags() {
    boolean drawLines   = linesOnly.isSelected()   || markersAndLines.isSelected();
    boolean drawMarkers = markersOnly.isSelected() || markersAndLines.isSelected();
    return new PlotLineDrawingFlags(drawLines, drawMarkers);
  }
 
  private PlotLineConnectionType getSelectedConnectionType() {
    if (direct.isSelected()) {
      return PlotLineConnectionType.DIRECT;
    } else if (step.isSelected()) {
      return PlotLineConnectionType.STEP_X_THEN_Y;
    } else {
      return null; // TODO: Log the impossible state?
    }
  }


  @Override
  public void populate(PlotConfiguration settings) {
    settings.setPlotLineDraw(getSelectedDrawingFlags());
    settings.setPlotLineConnectionType(getSelectedConnectionType());
  }



  @Override
  public void reset(PlotConfiguration settings, boolean hard) {
    // TODO: Remove this when line settings are supported when Z axis is time
    for (Component c : getComponents()) {
      c.setEnabled(settings.getAxisOrientationSetting() != AxisOrientationSetting.Z_AXIS_AS_TIME);
    }
    setToolTipText(settings.getAxisOrientationSetting() == AxisOrientationSetting.Z_AXIS_AS_TIME ?
        "Line settings not currently supported when Z-Axis is time." : null);
   
    if (hard) {
      boolean drawLines   = settings.getPlotLineDraw().drawLine();
      boolean drawMarkers = settings.getPlotLineDraw().drawMarkers();
     
      linesOnly.setSelected(drawLines && !drawMarkers);
      markersOnly.setSelected(!drawLines && drawMarkers);
      markersAndLines.setSelected(drawLines && drawMarkers);
     
      cachedFlags = new PlotLineDrawingFlags(drawLines, drawMarkers);
      cachedConnectionType = settings.getPlotLineConnectionType();
     
      direct.setSelected(cachedConnectionType == PlotLineConnectionType.DIRECT);
      step.setSelected(cachedConnectionType == PlotLineConnectionType.STEP_X_THEN_Y);
    }   
  }



  @Override
  public boolean isDirty() {
    PlotLineDrawingFlags selected = getSelectedDrawingFlags();
    if (cachedFlags == null || selected == null) return false;
    return cachedFlags.drawLine()    != selected.drawLine()    ||
           cachedFlags.drawMarkers() != selected.drawMarkers() ||
           cachedConnectionType      != getSelectedConnectionType();
  }

  @Override
  public boolean isValidated() {
    return true;
  }
}
TOP

Related Classes of gov.nasa.arc.mct.fastplot.settings.LineSetupPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.