//
// GMCWidget.java
//

/*
VisAD system for interactive analysis and visualization of numerical
data.  Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom
Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and
Tommy Jasmin.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/

package visad.browser;

import java.awt.*;
import java.awt.event.*;
import java.util.StringTokenizer;

/**
 * A widget that allows users to control graphics mode parameters.
 */
public class GMCWidget extends Widget implements ActionListener, ItemListener {

  Checkbox scale;
  Checkbox point;
  Checkbox texture;
  TextField lineWidth;
  TextField pointSize;

  boolean gmcScaleEnable;
  boolean gmcPointMode;
  boolean gmcTextureEnable;
  float gmcLineWidth;
  float gmcPointSize;
  int gmcTransparencyMode;
  int gmcProjectionPolicy;
  int gmcPolygonMode;
  boolean gmcMissingTransparent;
  int gmcCurvedSize;

  /**
   * Constructs a new GMCWidget.
   */
  public GMCWidget() {
    // lay out components with GridBagLayout
    GridBagLayout gridbag = new GridBagLayout();
    setLayout(gridbag);

    // construct GUI components
    scale = new Checkbox("Enable scale", gmcScaleEnable);
    point = new Checkbox("Point mode", gmcPointMode);
    texture = new Checkbox("Texture mapping", gmcTextureEnable);
    lineWidth = new TextField(Convert.shortString(gmcLineWidth));
    pointSize = new TextField(Convert.shortString(gmcPointSize));

    // add listeners
    scale.addItemListener(this);
    point.addItemListener(this);
    texture.addItemListener(this);
    lineWidth.addActionListener(this);
    pointSize.addActionListener(this);

    // lay out Components
    addComponent(scale, gridbag, 0, 0, 1, 1, 0.0, 0.0);
    addComponent(point, gridbag, 1, 0, 1, 1, 0.0, 0.0);
    addComponent(texture, gridbag, 2, 0, 2, 1, 0.0, 0.0);
    addComponent(new Label("Line width:"), gridbag, 0, 1, 1, 1, 0.0, 0.0);
    addComponent(lineWidth, gridbag, 1, 1, 1, 1, 1.0, 0.0);
    addComponent(new Label("Point size:"), gridbag, 2, 1, 1, 1, 0.0, 0.0);
    addComponent(pointSize, gridbag, 3, 1, 1, 1, 1.0, 0.0);
  }

  /**
   * Gets the value of the line width text field.
   */
  public float getLineWidth() {
    return gmcLineWidth;
  }

  /**
   * Programmatically sets the line width text field.
   */
  public void setLineWidth(float lw) {
    gmcLineWidth = lw;
    lineWidth.setText(Convert.shortString(lw));
  }

  /**
   * Gets the value of the point size text field.
   */
  public float getPointSize() {
    return gmcPointSize;
  }
  
  /**
   * Programmatically sets the point size text field.
   */
  public void setPointSize(float ps) {
    gmcPointSize = ps;
    pointSize.setText(Convert.shortString(ps));
  }

  /**
   * Gets the value of the point mode checkbox;
   */
  public boolean getPointMode() {
    return gmcPointMode;
  }
  
  /**
   * Programmatically sets the point mode checkbox.
   */
  public void setPointMode(boolean pm) {
    gmcPointMode = pm;
    point.setState(pm);
  }

  /**
   * Gets the value of the texture enable checkbox.
   */
  public boolean getTextureEnable() {
    return gmcTextureEnable;
  }
  
  /**
   * Programmatically sets the texture mapping checkbox.
   */
  public void setTextureEnable(boolean tm) {
    gmcTextureEnable = tm;
    texture.setState(tm);
  }

  /**
   * Gets the value of the scale enable checkbox.
   */
  public boolean getScaleEnable() {
    return gmcScaleEnable;
  }
  
  /**
   * Programmatically sets the scale enabled checkbox.
   */
  public void setScaleEnable(boolean se) {
    gmcScaleEnable = se;
    scale.setState(se);
  }

  /**
   * Gets the transparency mode.
   */
  public int getTransparencyMode() {
    return gmcTransparencyMode;
  }

  /**
   * Sets the transparency mode.
   */
  public void setTransparencyMode(int tm) {
    gmcTransparencyMode = tm;
  }

  /**
   * Gets the projection policy.
   */
  public int getProjectionPolicy() {
    return gmcProjectionPolicy;
  }

  /**
   * Sets the projection policy.
   */
  public void setProjectionPolicy(int pp) {
    gmcProjectionPolicy = pp;
  }

  /**
   * Gets the polygon mode.
   */
  public int getPolygonMode() {
    return gmcPolygonMode;
  }

  /**
   * Sets the polygon mode.
   */
  public void setPolygonMode(int pm) {
    gmcPolygonMode = pm;
  }

  /**
   * Gets whether missing values are transparent.
   */
  public boolean getMissingTransparent() {
    return gmcMissingTransparent;
  }

  /**
   * Sets whether missing values are transparent.
   */
  public void setMissingTransparent(boolean mt) {
    gmcMissingTransparent = mt;
  }

  /**
   * Gets the curved size.
   */
  public int getCurvedSize() {
    return gmcCurvedSize;
  }

  /**
   * Sets the curved size.
   */
  public void setCurvedSize(int cs) {
    gmcCurvedSize = cs;
  }

  /**
   * Gets a string representing this widget's current state.
   */
  public String getSaveString() {
    return "" + gmcLineWidth + " " + gmcPointSize + " " + gmcPointMode + " " +
      gmcTextureEnable + " " + gmcScaleEnable + " " +
      gmcTransparencyMode + " " + gmcProjectionPolicy + " " +
      gmcPolygonMode + " " + gmcMissingTransparent + " " + gmcCurvedSize;
  }

  /**
   * Reconstructs this widget's state using the specified save string.
   */
  public void setSaveString(String save) {
    if (save == null) {
      if (DEBUG) System.err.println("Invalid save string");
      return;
    }
    StringTokenizer st = new StringTokenizer(save);
    int numTokens = st.countTokens();
    if (numTokens < 10) {
      System.out.println("Invalid save string");
      return;
    }

    // determine graphics mode settings
    float lw = Convert.getFloat(st.nextToken());
    float ps = Convert.getFloat(st.nextToken());
    boolean pm = Convert.getBoolean(st.nextToken());
    boolean te = Convert.getBoolean(st.nextToken());
    boolean se = Convert.getBoolean(st.nextToken());
    int tm = Convert.getInt(st.nextToken());
    int pp = Convert.getInt(st.nextToken());
    int pm2 = Convert.getInt(st.nextToken());
    boolean mt = Convert.getBoolean(st.nextToken());
    int cs = Convert.getInt(st.nextToken());

    // reset graphics mode settings
    setLineWidth(lw);
    setPointSize(ps);
    setPointMode(pm);
    setTextureEnable(te);
    setScaleEnable(se);
    setTransparencyMode(tm);
    setProjectionPolicy(pp);
    setPolygonMode(pm2);
    setMissingTransparent(mt);
    setCurvedSize(cs);
  }

  /**
   * Handles TextField changes.
   */
  public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    Object source = e.getSource();
    if (source == lineWidth) {
      float lw = Float.NaN;
      try {
        lw = Float.valueOf(lineWidth.getText()).floatValue();
      }
      catch (NumberFormatException exc) {
        lineWidth.setText(Convert.shortString(gmcLineWidth));
      }
      if (lw == lw) {
        setLineWidth(lw);
        scale.requestFocus();
        notifyListeners(new WidgetEvent(this));
      }
    }
    else if (source == pointSize) {
      float ps = Float.NaN;
      try {
        ps = Float.valueOf(pointSize.getText()).floatValue();
      }
      catch (NumberFormatException exc) {
        pointSize.setText(Convert.shortString(gmcPointSize));
      }
      if (ps == ps) {
        setPointSize(ps);
        scale.requestFocus();
        notifyListeners(new WidgetEvent(this));
      }
    }
  }

  /**
   * Handles Checkbox changes.
   */
  public void itemStateChanged(ItemEvent e) {
    Object source = e.getItemSelectable();
    boolean on = (e.getStateChange() == ItemEvent.SELECTED);
    if (source == scale) setScaleEnable(on);
    else if (source == point) setPointMode(on);
    else if (source == texture) setTextureEnable(on);
    notifyListeners(new WidgetEvent(this));
  }

  /**
   * Tests GMCWidget.
   */
  public static void main(String[] args) {
    new GMCWidget().testWidget();
  }

}

 

Ads help maintain this website.