//
// GetAreaGUI.java
//

/*
This source file is part of the edu.wisc.ssec.mcidas package and is
Copyright (C) 1998 - 2017 by Tom Whittaker, Tommy Jasmin, Tom Rink,
Don Murray, James Kelly, Bill Hibbard, Dave Glowacki, Curtis Rueden
and others.
 
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 edu.wisc.ssec.mcidas.adde;
// Created on August 29, 2000, 8:45 AM

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.text.*;
import java.io.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Properties;
import java.util.Vector;
import edu.wisc.ssec.mcidas.*;
import edu.wisc.ssec.mcidas.AreaDirectory;
import edu.wisc.ssec.mcidas.adde.*;
import edu.wisc.ssec.mcidas.adde.AddeServerInfo;

/**
 * A GUI wrapper for whatever class/method tries to
 * get image data via ADDE, but needs a way to let the
 * user explore the availability of data.
 *
 * Possible defaults are written into the GetAreaGUI.properties
 * file, and when the user indicates "use my defaults", these are
 * employed when ever the correct combo of server/group/descr are
 * chosen.  
 *
 * @author tomw
 * @version 0.1
 */
public class GetAreaGUI extends JPanel {
  AddeServerInfo asi;
  String[] sl;
  String selectedServer, selectedGroup, selectedDescr, selectedDateTime;
  // note that 'descr' and 'dataset' are the same thing...
  
  String coordType;
  String actionButtonString;
  String userName, projectNumber;
  boolean serverUpdated, groupUpdated, descrUpdated, multipleImages;
  ActionListener al = null;
  int baseNumLines, baseNumEles;
  double resLat, resLon;
  int[] bandListIndex;
  String[] bandList;
  String selectedBand, selectedUnit;
  int selectedBandIndex;
  String[][][] calInfo = null;
  boolean doingRes;
  NumberFormat nf3;
  Properties dataProp;
  StringBuffer serverList;
  AreaDirectory [][] ad;
  int areaIndex;
  String[] bandNames;
  AddeSatBands asb;
  boolean closeOnAction = true;
  boolean useDefaults = false;
  boolean gotUserDefaults = false;
  String propFile;
  String cmdout=null;
  ArrayList imageList = null;
  JDialog dialog;

  /** 
  * @param s is the label for the action button
  *
  */
  public GetAreaGUI(String s) {
    this ((Frame)null, false, s, false, true, true);
  }
  
  /** 
  * @param s is the label for the action button
  * @param multi is true if multiple selection mode is to be used 
  *  (this does not work yet!!)
  *
  */
  public GetAreaGUI(String s, boolean multi) {
    this((Frame) null, false, s, multi, true, true);
  }
  
  /** 
  * @param s is the label for the action button
  * @param multi is true if multiple selection mode is to be used 
  *  (this does not work yet!!)
  * @param coa is true if the Dialog should close the window after
  *  the actionPerformed is done.
  *
  */
  public GetAreaGUI(String s, boolean multi, boolean coa) {
    this((Frame) null, false, s, multi, coa, true);
  }

  /** 
  * @param s is the label for the action button
  * @param multi is true if multiple selection mode is to be used 
  *  (this does not work yet!!)
  * @param coa is true if the Dialog should close the window after
  *  the actionPerformed is done.
  * @param modal is true if this should be a modal dialog
  *
  */
  public GetAreaGUI(String s, boolean multi, boolean coa, boolean modal) {
    this((Frame) null, modal, s, multi, coa, true);
  }
  /** 
  * @param owner is the top-level Frame that owns this
  * @param modal is true if this should be a modal dialog
  * @param s is the label for the action button
  * @param multi is true if multiple selection mode is to be used 
  *  (this does not work yet!!)
  * @param coa is true if the Dialog should close the window after
  *  the actionPerformed is done.
  *
  */
  public GetAreaGUI(Frame owner, boolean modal, String s, boolean multi,
                    boolean coa) {
    this(owner, modal, s, multi, coa, true);
  }

  /** 
  * @param owner is the top-level Frame that owns this
  * @param modal is true if this should be a modal dialog
  * @param s is the label for the action button
  * @param multi is true if multiple selection mode is to be used 
  *  (this does not work yet!!)
  * @param coa is true if the Dialog should close the window after
  *  the actionPerformed is done.
  * @param dodialog is true if this should pop up a Dialog interface
  * box.  If this is false, then owner and modal may be null.
  *
  */
  public GetAreaGUI(Frame owner, boolean modal, String s, boolean multi, boolean coa, boolean dodialog) {

    setupGUI(s, multi, coa, owner, modal, dodialog);
  }
    
  private void setupGUI(String s, boolean multi, boolean coa, Frame parent, boolean modal, boolean dod) {

    serverUpdated = false;
    groupUpdated = false;
    descrUpdated = false;
    bandNames = null;
    closeOnAction = coa;
    selectedUnit = " ";
    selectedBand = " ";
    selectedBandIndex = -1;
    doingRes = false;
    asb = null;
    multipleImages = multi;
    nf3 = NumberFormat.getNumberInstance();
    nf3.setMaximumFractionDigits(3);
    actionButtonString = s;
    asi = new AddeServerInfo();
    String[] sla = asi.getServerList();
    dataProp = new Properties();
    try {
      String path = System.getProperty("user.home");
      propFile =
          path+System.getProperty("file.separator")+"GetAreaGUI.properties";
      FileInputStream fi = new FileInputStream(propFile);
      dataProp.load(fi);
      fi.close();
    } catch (Exception e) {;}
    
    String usl = (String) dataProp.get("user|server|list");
    serverList = new StringBuffer();
    ArrayList als = new ArrayList();
    for (int i=0; i -2 && LMagValue < 2) LMagValue = 1;
    LMagSlider.setValue(LMagValue+50);
    if (doingRes) {
      double v = resLat/LMagValue;
      if (LMagValue < 0) v = -(resLat * LMagValue);
      LMagLabel.setText("Line Resolution = "+nf3.format(v));
    } else {
      LMagLabel.setText("Line Magnification = "+LMagValue);
    }
    // need to set slider, too
  }
    /** fetch the current line magnification factor
     * @return the line magnification factor
     */
  public int getLinMag() {
    return LMagValue;
  }
  
    /** set the element magnification factor.  This call should be made after a call
     * to setLineMag()
     * @param m The element magnification factor (-50 thru +50).
     * Values of -1, 0, and 1 are treated as 1.
     */
  public void setEleMag(int m) {
    EMagValue = m;
    if (EMagValue > -2 && EMagValue < 2) EMagValue = 1;
    EMagSlider.setValue(EMagValue+50);
    if (doingRes) {
      double v = resLon/EMagValue;
      if (EMagValue < 0) v = -(resLon * EMagValue);
      EMagLabel.setText("Element Resolution = "+nf3.format(v));
    } else {
      EMagLabel.setText("Element Magnification = "+EMagValue);
    }
  }
  /** get the Element magnification
  *
  * @return element magnification factor
  */
  public int getEleMag() {
    return EMagValue;
  }
  
    /** define the coodinate type for the centered location values
     * @param c coordinate = "E" for earth, "I" for image, "S" for radar
     * station
     */
  public void setCoordType(String c) {
    LatLonButton.setSelected(false);
    LinEleButton.setSelected(false);
    IDButton.setSelected(false);
    if (c.equalsIgnoreCase("E")) LatLonButton.setSelected(true);
    if (c.equalsIgnoreCase("I")) LinEleButton.setSelected(true);
    if (c.equalsIgnoreCase("S")) IDButton.setSelected(true);
    setLocButtonLabel();
    // need to set slider, too
  }

    /** fetch the current coordinate type
     * @return coordinate type value ("E", "I", or "S")
     */
  public String getCoordType() {
    return coordType;
  }
  
    /** define the location(s) for the coodinate type.  It is assumed that you will
     * call setCoordType() and then setLocationString() with consistent values.
     * @param c The coordinate locations. If two values, separate by
     * one of more blanks.  For Earth coordinate, the latitude
     * and longitude (e.g., "43.1234 -89.2313"); for Image
     * coordinates, the line and element (e.g., "12345 23412"),
     * and for Radar Stations, the station name (e.g., "KMKX").
     */
  public void setLocationString(String c) {
    
    String locOne = " ";
    String locTwo = " ";
    if (c != null) {
      StringTokenizer st = new StringTokenizer(c," ");
      locOne = st.nextToken();
      
      if (st.hasMoreTokens() ) {
        locTwo = st.nextToken();
      }
    }
    LatLineText.setText(locOne);
    LonEleText.setText(locTwo);
  }
  
    /** fetch the current locatoin string
     * @return The value of the location string(s) as a single string
     * with one blank space between values (if more than one)
     */
  public String getLocationString() {
    String loc = LatLineText.getText() + " " + LonEleText.getText();
    return loc;
  }
  
    /** define the satellite band number to use
     * @param c the band number (as a String)
     */
  public void setBand(String c) {
  }
    /** fetch the current band number
     * @return the currently selected band number
     */
  public String getBand() {
    return selectedBand;
  }
  
    /** define the size of the image to get
     * @param c The number of lines and number of elements, in a string
     * with one or more blank spaces between (e.g., "480 640")
     *
     */
  public void setNumLinesEles(String c) {
    if (c == null || c.trim().length() < 3) {
      NumLinesText.setText(" ");
      NumElesText.setText(" ");
      baseNumLines = -1;
      baseNumEles = -1;
      return;
    }
    StringTokenizer st = new StringTokenizer(c," ");
    String lin = st.nextToken();
    String ele = st.nextToken();
    NumLinesText.setText(lin);
    NumElesText.setText(ele);
    baseNumLines = Integer.parseInt(lin.trim());
    baseNumEles = Integer.parseInt(ele.trim());
  }
  
    /** fetch the number of lines and elements defined
     * @return the number of lines and elements, as a String with one
     * blank between values (e.g., "480 640")
     */
  public String getNumLinesEles() {
    String s = NumLinesText.getText() + " " + NumElesText.getText();
    return s;
  }
  
  /* get the day of the index-th selected item
  */
  public String getDay(int index) {
    Object [] vals = DateTimeList.getSelectedValues();
    selectedDateTime = (String) vals[index];
    String day = null;
    if (selectedDateTime != null) {
      int i = selectedDateTime.indexOf("/");
      if (i > 0) {
        day = selectedDateTime.substring(0,i).trim();
      }
    }
    return day;
    
  }

  /** return the day of the selected image
  * @return the day in the format:  yyyy-mm-dd
  */
  public String getDay() {
    selectedDateTime = (String) DateTimeList.getSelectedValue();
    String day = null;
    if (selectedDateTime != null) {
      int i = selectedDateTime.indexOf("/");
      if (i > 0) {
        day = selectedDateTime.substring(0,i).trim();
      }
    }
    return day;
    
  }

  /** set the day
  *
  * @param d the day in the form:  yyyy-mm-dd
  */
  public void setDay (String d) {
    setDateTime(d,getTime());
  }
  
  /** get the time of the index-th selected image
  */
  public String getTime(int index) {
    Object [] vals = DateTimeList.getSelectedValues();
    selectedDateTime = (String) vals[index];
    String time = null;
    if (selectedDateTime != null) {
      int i = selectedDateTime.indexOf("/");
      if (i > 0) {
        time = selectedDateTime.substring(i+1).trim();
      }
    }
    return time;
  }

  /** get the time of the selected image
  *
  * @return the time in the format:  hh:mm:ss
  */
  public String getTime() {
    selectedDateTime = (String) DateTimeList.getSelectedValue();
    String time = null;
    if (selectedDateTime != null) {
      int i = selectedDateTime.indexOf("/");
      if (i > 0) {
        time = selectedDateTime.substring(i+1).trim();
      }
    }
    return time;
  }
  /** set the time 
  *
  * @param t is the time in the format:  hh:mm:ss
  */
  public void setTime(String t) {
    setDateTime(getDay(), t);
  }
  
  public void setDateTime(String d, String t) {
    selectedDateTime = d+" / "+t;
    return;
  }
  
    /** define the units of the data to get
     * @param c the name of the Units (e.g., "BRIT")
     */
  public void setUnit(String c) {
    //UnitText.setText(c);
  }
    /** fetch the name of the units defined
     * @return the name of the units
     */
  public String getUnit() {
    //return UnitText.getText();
    return selectedUnit;
  }
  
    /** define the calibration type to use (e.g., "VISSR")
     * @param c the calibration type
     */
  public void setCal (String c) {
    calText = c;
  }
    /** fetch the current Calibration type
     * @return the current calibration type
     */
  public String getCal() {
    return calText;
  }
  
    /** define whether the "documentation block" will be returned with the data.
     * @param v set to 'true' to return the history documentation.
     */
  public void setDoc (String v) {
    if (v != null && v.indexOf("1")>-1) {
//      DocBox.setSelected(true);
    } else {
      //DocBox.setSelected(false);
    }
    
  }
    /** fetch the state of the doc request switch
     * @return the state of the doc request switch
     */
  public String getDoc() {
//    if (DocBox.isSelected()) {
      return "1";
//    } else {
//      return null;
    //}
  }
  
    /** define a user name (required by some ADDE servers for accounting).  If given,
     * this will be included in all requests generated by GetAreaGUI.
     * @param c The user's ADDE identifier (e.g., "jack")
     */
  public void setUserName (String c) {
    userName = c;
  }
    /** fetch the currently defined user name
     * @return the currently defined user name
     */
  public String getUserName() {
    return userName;
  }
  
    /** define a project number, which is required by some ADDE servers
     * @param c The project number to use (e.g., "12345")
     */
  public void setProjectNumber (String c) {
    projectNumber = c;;
  }
    /** fetch the currently defined project number
     * @return the project number value
     */
  public String getProjectNumber() {
    return projectNumber;
  }
  
  
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the FormEditor.
     */
  private void initComponents() {//GEN-BEGIN:initComponents
            PanelSGD = new javax.swing.JPanel();
            PanelSG = new javax.swing.JPanel();
            PanelServer = new javax.swing.JPanel();
            ServerLabel = new javax.swing.JLabel();
            ServerSelector = new javax.swing.JComboBox();
            PanelGroup = new javax.swing.JPanel();
            jLabel2 = new javax.swing.JLabel();
            GroupSelector = new javax.swing.JComboBox();
            PanelDescr = new javax.swing.JPanel();
            jLabel3 = new javax.swing.JLabel();
            DescrSelector = new javax.swing.JComboBox();
            PanelListMag = new javax.swing.JPanel();
            PanelMag = new javax.swing.JPanel();
            jPanel13 = new javax.swing.JPanel();
            jPanel9 = new javax.swing.JPanel();
            LMagSlider = new javax.swing.JSlider();
            LMagLabel = new javax.swing.JLabel();
            jPanel10 = new javax.swing.JPanel();
            EMagLabel = new javax.swing.JLabel();
            EMagSlider = new javax.swing.JSlider();
            DateTimeLabel = new javax.swing.JLabel();
            PanelList = new javax.swing.JPanel();
            DateTimeScrollPanel = new javax.swing.JScrollPane();
            String [] prompt = {"Date-times of available","images will appear here"};
            DateTimeList =  new javax.swing.JList(prompt);
            LinesElesPanel = new javax.swing.JPanel();
            SizeLabel = new javax.swing.JLabel();
            jPanel7 = new javax.swing.JPanel();
            NumLinesLabel = new javax.swing.JLabel();
            NumLinesText = new javax.swing.JTextField();
            NumElesLabel = new javax.swing.JLabel();
            NumElesText = new javax.swing.JTextField();
            userDefaultsCheckBox = new javax.swing.JCheckBox();
            PanelBandUnit = new javax.swing.JPanel();
            BandPanel = new javax.swing.JPanel();
            BandLabel = new javax.swing.JLabel();
            BandBox = new javax.swing.JComboBox();
            UnitsPanel = new javax.swing.JPanel();
            UnitLabel = new javax.swing.JLabel();
            UnitBox = new javax.swing.JComboBox();
            UserActionPanel = new javax.swing.JPanel();
            userActionButton = new javax.swing.JButton();
            PanelStatus = new javax.swing.JPanel();
            statusLabel = new javax.swing.JTextField();
            PanelLoc = new javax.swing.JPanel();
            jPanel11 = new javax.swing.JPanel();
            PlaceLabel = new javax.swing.JLabel();
            LatLonButton = new javax.swing.JRadioButton();
            LinEleButton = new javax.swing.JRadioButton();
            IDButton = new javax.swing.JRadioButton();
            jPanel12 = new javax.swing.JPanel();
            LatLineLabel = new javax.swing.JLabel();
            LonEleLabel = new javax.swing.JLabel();
            LatLineText = new javax.swing.JTextField();
            LonEleText = new javax.swing.JTextField();
            
            setLayout(new java.awt.GridBagLayout());
            java.awt.GridBagConstraints gridBagConstraints1;
            
            setFont(new java.awt.Font("SansSerif", 0, 10));
            
            PanelSGD.setLayout(new java.awt.BorderLayout());
            
            PanelSGD.setMaximumSize(new java.awt.Dimension(500, 160));
            PanelServer.setLayout(new java.awt.GridLayout(2, 1));
            
            PanelServer.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
            PanelServer.setPreferredSize(new java.awt.Dimension(180, 45));
            ServerLabel.setText("Server");
            ServerLabel.setToolTipText("Select an ADDE Server from the list");
            ServerLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            PanelServer.add(ServerLabel);
            
            ServerSelector.setToolTipText("Select an ADDE Server from the list");
            ServerSelector.setBackground(java.awt.Color.lightGray);
            ServerSelector.setEditable(true);
            ServerSelector.setActionCommand("serverSelected");
            replaceList(ServerSelector, sl, "Select ADDE server");
            ServerSelector.setSelectedIndex(0);
            ServerSelector.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    ServerSelectorActionPerformed(evt);
                }
            });
            
            PanelServer.add(ServerSelector);
            
            PanelSG.add(PanelServer);
          
          PanelGroup.setLayout(new java.awt.GridLayout(2, 1));
            
            PanelGroup.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
            PanelGroup.setPreferredSize(new java.awt.Dimension(160, 45));
            jLabel2.setText("Dataset");
            jLabel2.setToolTipText("Select a dataset from the list");
            jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            PanelGroup.add(jLabel2);
            
            GroupSelector.setToolTipText("Select an ADDE data group from the list");
            GroupSelector.setBackground(java.awt.Color.lightGray);
            GroupSelector.setActionCommand("groupSelected");
            GroupSelector.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    GroupSelectorActionPerformed(evt);
                }
            });
            
            PanelGroup.add(GroupSelector);
            
            PanelSG.add(PanelGroup);
          
          PanelSGD.add(PanelSG, java.awt.BorderLayout.NORTH);
        
        PanelDescr.setLayout(new java.awt.BorderLayout());
          
          PanelDescr.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
          PanelDescr.setMaximumSize(new java.awt.Dimension(400, 50));
          jLabel3.setText("Data Type");
          jLabel3.setToolTipText("Select a Data Type; available dates and times will appear below");
          jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          PanelDescr.add(jLabel3, java.awt.BorderLayout.NORTH);
          
          DescrSelector.setToolTipText("Select an ADDE dataset; available dates and times will appear below");
          DescrSelector.setBackground(java.awt.Color.lightGray);
          DescrSelector.setName("descrType");
          DescrSelector.setActionCommand("descrSelected");
          DescrSelector.setMaximumSize(new java.awt.Dimension(500, 20));
          DescrSelector.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  DescrSelectorActionPerformed(evt);
              }
          });
          
          PanelDescr.add(DescrSelector, java.awt.BorderLayout.SOUTH);
          
          PanelSGD.add(PanelDescr, java.awt.BorderLayout.SOUTH);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
              gridBagConstraints1.gridx = 0;
              gridBagConstraints1.gridy = 0;
              gridBagConstraints1.insets = new java.awt.Insets(2, 0, 2, 0);
              add(PanelSGD, gridBagConstraints1);
              
              PanelListMag.setLayout(new java.awt.GridBagLayout());
              java.awt.GridBagConstraints gridBagConstraints2;
              
              PanelListMag.setMinimumSize(new java.awt.Dimension(400, 150));
              PanelMag.setLayout(new java.awt.BorderLayout(10, 5));
              
              jPanel13.setLayout(new java.awt.BorderLayout(10, 0));
              
              jPanel13.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
              jPanel9.setLayout(new java.awt.BorderLayout());
              
              LMagSlider.setToolTipText("Slide to set line magnification factor");
              LMagSlider.addChangeListener(new javax.swing.event.ChangeListener() {
                  public void stateChanged(javax.swing.event.ChangeEvent evt) {
                      LMagSliderStateChanged(evt);
                  }
              });
              
              jPanel9.add(LMagSlider, java.awt.BorderLayout.SOUTH);
              
              LMagLabel.setText("Line Magnification");
              LMagLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
              jPanel9.add(LMagLabel, java.awt.BorderLayout.NORTH);
              
              jPanel13.add(jPanel9, java.awt.BorderLayout.NORTH);
            
            jPanel10.setLayout(new java.awt.BorderLayout());
              
              EMagLabel.setText("Element Magnification");
              EMagLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
              jPanel10.add(EMagLabel, java.awt.BorderLayout.NORTH);
              
              EMagSlider.setToolTipText("Slide to select element magnification factor");
              EMagSlider.addChangeListener(new javax.swing.event.ChangeListener() {
                  public void stateChanged(javax.swing.event.ChangeEvent evt) {
                      EMagSliderStateChanged(evt);
                  }
              });
              
              jPanel10.add(EMagSlider, java.awt.BorderLayout.SOUTH);
              
              jPanel13.add(jPanel10, java.awt.BorderLayout.SOUTH);
            
            PanelMag.add(jPanel13, java.awt.BorderLayout.NORTH);
          
          gridBagConstraints2 = new java.awt.GridBagConstraints();
        gridBagConstraints2.gridx = 0;
        gridBagConstraints2.gridy = 0;
        gridBagConstraints2.gridheight = 3;
        gridBagConstraints2.insets = new java.awt.Insets(5, 5, 5, 5);
        gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTH;
        PanelListMag.add(PanelMag, gridBagConstraints2);
        
        DateTimeLabel.setText("List of available Date / Times");
        gridBagConstraints2 = new java.awt.GridBagConstraints();
        gridBagConstraints2.gridx = 1;
        gridBagConstraints2.gridy = 0;
        gridBagConstraints2.anchor = java.awt.GridBagConstraints.SOUTH;
        PanelListMag.add(DateTimeLabel, gridBagConstraints2);
        
        PanelList.setLayout(new java.awt.BorderLayout(0, 10));
            
            PanelList.setPreferredSize(new java.awt.Dimension(180, 150));
            PanelList.setMinimumSize(new java.awt.Dimension(180, 150));
            DateTimeScrollPanel.setPreferredSize(new java.awt.Dimension(180, 150));
            DateTimeScrollPanel.setMinimumSize(new java.awt.Dimension(180, 150));
            DateTimeList.setToolTipText("Click on the date-time you want");
            DateTimeList.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
            DateTimeList.setName("");
            DateTimeList.setVisibleRowCount(10);
            if( multipleImages) {
              DateTimeList.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            } else {
              DateTimeList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
            }
            DateTimeList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
                public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                    DateTimeListValueChanged(evt);
                }
            });
            
            DateTimeScrollPanel.setViewportView(DateTimeList);
            
            PanelList.add(DateTimeScrollPanel, java.awt.BorderLayout.CENTER);
          
          gridBagConstraints2 = new java.awt.GridBagConstraints();
        gridBagConstraints2.gridx = 1;
        gridBagConstraints2.gridy = 1;
        gridBagConstraints2.gridheight = 4;
        gridBagConstraints2.insets = new java.awt.Insets(0, 3, 0, 0);
        gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTH;
        PanelListMag.add(PanelList, gridBagConstraints2);
        
        LinesElesPanel.setLayout(new java.awt.BorderLayout());
          
          LinesElesPanel.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
          SizeLabel.setText("Size of Image to Get");
          SizeLabel.setToolTipText("Enter the number of lines and elements for the image you want (def=480 x 640)");
          SizeLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          LinesElesPanel.add(SizeLabel, java.awt.BorderLayout.NORTH);
          
          jPanel7.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
            
            NumLinesLabel.setText("Lines:");
            NumLinesLabel.setToolTipText("Enter the number of image lines you want");
            jPanel7.add(NumLinesLabel);
            
            NumLinesText.setToolTipText("Enter number of lines (def=480)");
            NumLinesText.setColumns(5);
            NumLinesText.setText(" ");
            jPanel7.add(NumLinesText);
            
            NumElesLabel.setText("       Elements:");
            NumElesLabel.setToolTipText("Enter the number of image Elements you want");
            jPanel7.add(NumElesLabel);
            
            NumElesText.setToolTipText("Enter number of elements (def=640)");
            NumElesText.setColumns(5);
            NumElesText.setText(" ");
            jPanel7.add(NumElesText);
            
            LinesElesPanel.add(jPanel7, java.awt.BorderLayout.SOUTH);
          
          gridBagConstraints2 = new java.awt.GridBagConstraints();
        gridBagConstraints2.gridx = 0;
        gridBagConstraints2.gridy = 3;
        gridBagConstraints2.insets = new java.awt.Insets(2, 0, 2, 0);
        PanelListMag.add(LinesElesPanel, gridBagConstraints2);
        
        userDefaultsCheckBox.setToolTipText("Check this box to use your defaults for size and location");
        userDefaultsCheckBox.setSelected(false);
        userDefaultsCheckBox.setText("Use my defaults");
        userDefaultsCheckBox.setAlignmentX(0.5F);
        userDefaultsCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                userDefaultsCheckBoxActionPerformed(evt);
            }
        });
        
        gridBagConstraints2 = new java.awt.GridBagConstraints();
        gridBagConstraints2.gridx = 0;
        gridBagConstraints2.gridy = 4;
        gridBagConstraints2.anchor = java.awt.GridBagConstraints.NORTH;
        PanelListMag.add(userDefaultsCheckBox, gridBagConstraints2);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
          gridBagConstraints1.gridx = 0;
          gridBagConstraints1.gridy = 1;
          add(PanelListMag, gridBagConstraints1);
          
          PanelBandUnit.setLayout(new java.awt.GridBagLayout());
          java.awt.GridBagConstraints gridBagConstraints3;
          
          PanelBandUnit.setPreferredSize(new java.awt.Dimension(500, 75));
          PanelBandUnit.setMinimumSize(new java.awt.Dimension(300, 75));
          BandPanel.setLayout(new java.awt.BorderLayout());
          
          BandPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
          BandLabel.setText("Channel");
          BandLabel.setToolTipText("Select channel from list");
          BandLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          BandLabel.setAlignmentX(0.5F);
          BandPanel.add(BandLabel, java.awt.BorderLayout.NORTH);
          
          BandBox.setToolTipText("Select a band/channel number from the list or enter one");
          BandBox.setActionCommand("bandBoxChanged");
          BandBox.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  BandBoxActionPerformed(evt);
              }
          });
          
          BandPanel.add(BandBox, java.awt.BorderLayout.WEST);
          
          gridBagConstraints3 = new java.awt.GridBagConstraints();
        gridBagConstraints3.gridx = 0;
        gridBagConstraints3.gridy = 0;
        gridBagConstraints3.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints3.ipady = 5;
        gridBagConstraints3.insets = new java.awt.Insets(0, 5, 0, 5);
        PanelBandUnit.add(BandPanel, gridBagConstraints3);
        
        UnitsPanel.setLayout(new java.awt.BorderLayout());
          
          UnitsPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
          UnitLabel.setText("Unit");
          UnitLabel.setToolTipText("Select unit from list after selecting Band");
          UnitLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          UnitsPanel.add(UnitLabel, java.awt.BorderLayout.NORTH);
          
          UnitBox.setToolTipText("Select a unit from the list or enter a units code");
          UnitBox.setActionCommand("unitBoxChanged");
          UnitBox.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  UnitBoxActionPerformed(evt);
              }
          });
          
          UnitsPanel.add(UnitBox, java.awt.BorderLayout.WEST);
          
          gridBagConstraints3 = new java.awt.GridBagConstraints();
        gridBagConstraints3.gridx = 1;
        gridBagConstraints3.gridy = 0;
        gridBagConstraints3.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gridBagConstraints3.ipadx = 2;
        gridBagConstraints3.ipady = 5;
        gridBagConstraints3.insets = new java.awt.Insets(0, 4, 0, 4);
        PanelBandUnit.add(UnitsPanel, gridBagConstraints3);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
        gridBagConstraints1.gridx = 0;
        gridBagConstraints1.gridy = 2;
        add(PanelBandUnit, gridBagConstraints1);
        
        userActionButton.setToolTipText("Click button to "+actionButtonString);
        userActionButton.setText(actionButtonString);
        userActionButton.setActionCommand("user_action");
        userActionButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                userActionButtonActionPerformed(evt);
            }
        });
        
        UserActionPanel.add(userActionButton);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
        gridBagConstraints1.gridx = 0;
        gridBagConstraints1.gridy = 5;
        add(UserActionPanel, gridBagConstraints1);
        
        statusLabel.setEditable(false);
        statusLabel.setColumns(40);
        statusLabel.setForeground(java.awt.Color.white);
        statusLabel.setText("First pick an ADDE server");
        statusLabel.setBackground(java.awt.Color.black);
        statusLabel.setPreferredSize(new java.awt.Dimension(440, 20));
        statusLabel.setMinimumSize(new java.awt.Dimension(100, 20));
        statusLabel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                statusLabelActionPerformed(evt);
            }
        });
        
        PanelStatus.add(statusLabel);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
          gridBagConstraints1.gridx = 0;
          gridBagConstraints1.gridy = 7;
          add(PanelStatus, gridBagConstraints1);
          
          PanelLoc.setLayout(new java.awt.BorderLayout());
          
          PanelLoc.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
          jPanel11.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 0));
          
          PlaceLabel.setText("Location:");
          jPanel11.add(PlaceLabel);
          
          LatLonButton.setToolTipText("Click to select lat/lon coordinates");
          LatLonButton.setSelected(true);
          LatLonButton.setLabel("Lat/Lon");
          LatLonButton.setActionCommand("LatLonButt");
          LatLonButton.addChangeListener(new javax.swing.event.ChangeListener() {
              public void stateChanged(javax.swing.event.ChangeEvent evt) {
                  LatLonButtonStateChanged(evt);
              }
          });
          
          jPanel11.add(LatLonButton);
          
          LinEleButton.setToolTipText("Click to select line/element coordinates");
          LinEleButton.setLabel("Line/Ele");
          LinEleButton.setActionCommand("LineEleButt");
          LinEleButton.addChangeListener(new javax.swing.event.ChangeListener() {
              public void stateChanged(javax.swing.event.ChangeEvent evt) {
                  LinEleButtonStateChanged(evt);
              }
          });
          
          jPanel11.add(LinEleButton);
          
          IDButton.setToolTipText("Click to select a station ID (Note: RADAR DATA ONLY!)");
          IDButton.setText("Stn ID");
          IDButton.setActionCommand("IDButt");
          IDButton.addChangeListener(new javax.swing.event.ChangeListener() {
              public void stateChanged(javax.swing.event.ChangeEvent evt) {
                  IDButtonStateChanged(evt);
              }
          });
          
          jPanel11.add(IDButton);
          
          PanelLoc.add(jPanel11, java.awt.BorderLayout.NORTH);
        
        jPanel12.setLayout(new java.awt.GridLayout(2, 2, 5, 0));
          
          LatLineLabel.setText("Latitude");
          LatLineLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          jPanel12.add(LatLineLabel);
          
          LonEleLabel.setText("Longitude");
          LonEleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
          jPanel12.add(LonEleLabel);
          
          LatLineText.setToolTipText("Enter latitude or line coordinate or Radar Station ID");
          LatLineText.setText("Lat or line or stn ID value");
          jPanel12.add(LatLineText);
          
          LonEleText.setToolTipText("Enter longitude or element coordinate value");
          LonEleText.setText("Long or Element value");
          jPanel12.add(LonEleText);
          
          PanelLoc.add(jPanel12, java.awt.BorderLayout.SOUTH);
        
        gridBagConstraints1 = new java.awt.GridBagConstraints();
      gridBagConstraints1.gridx = 0;
      gridBagConstraints1.gridy = 3;
      add(PanelLoc, gridBagConstraints1);
      
  }//GEN-END:initComponents

  private void statusLabelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_statusLabelActionPerformed
      // Add your handling code here:
  }//GEN-LAST:event_statusLabelActionPerformed

  private void userDefaultsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_userDefaultsCheckBoxActionPerformed
// Add your handling code here:
    useDefaults = userDefaultsCheckBox.isSelected();
  }//GEN-LAST:event_userDefaultsCheckBoxActionPerformed
    
  private void BandBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_BandBoxActionPerformed
    // Add your handling code here:
    int i = BandBox.getSelectedIndex();
    if (i > 0) {
      replaceList(UnitBox,calInfo[1][i-1],"Select Unit");
      int bi = bandListIndex[i-1];
      selectedBand = bandList[i-1];
      selectedBandIndex = i-1;
    
      if (!useDefaults || !gotUserDefaults) {
        double clat = ad[areaIndex][bi].getCenterLatitude();
        double clon = ad[areaIndex][bi].getCenterLongitude();
        if (! (Double.isNaN(clat) || Double.isNaN(clon)) ) {
          setCoordType("E");
          setLocationString(clat+" "+clon);
        }

        resLat = ad[areaIndex][bi].getCenterLatitudeResolution();
        resLon = ad[areaIndex][bi].getCenterLongitudeResolution();

        // if we have resolution data, change the sliders...
        if (! (Double.isNaN(resLat) || Double.isNaN(resLon)) ) {
          doingRes = true;
        }
        setLineMag(1);
        setEleMag(1);

        int nlines= ad[areaIndex][bi].getLines();
        int neles = ad[areaIndex][bi].getElements();
        setNumLinesEles(nlines+" "+neles);
        
        if (useDefaults) gotUserDefaults = true;
      }   
    }
  }//GEN-LAST:event_BandBoxActionPerformed
  
  private void UnitBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UnitBoxActionPerformed
    // Add your handling code here:
    int unitIndex = UnitBox.getSelectedIndex();
    if (unitIndex > 0 && selectedBandIndex >= 0) 
       selectedUnit = calInfo[0][selectedBandIndex][unitIndex - 1];
    
  }//GEN-LAST:event_UnitBoxActionPerformed
  
  private void DateTimeListValueChanged (javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_DateTimeListValueChanged
    
    selectedDateTime = (String) DateTimeList.getSelectedValue();
    if (selectedDateTime == null) return;
    
    areaIndex = DateTimeList.getSelectedIndex();
    
    double clat = ad[areaIndex][0].getCenterLatitude();
    double clon = ad[areaIndex][0].getCenterLongitude();
    
    if (!useDefaults || !gotUserDefaults) {
      
      if (!(Double.isNaN(clat) || Double.isNaN(clon)) ) {
        setCoordType("E");
        setLocationString(clat+" "+clon);
      }

      resLat = ad[areaIndex][0].getCenterLatitudeResolution();
      resLon = ad[areaIndex][0].getCenterLongitudeResolution();

      // if we have resolution data, change the sliders...
      if (! (Double.isNaN(resLat) || Double.isNaN(resLon)) ) {
        doingRes = true;
      }
      setLineMag(1);
      setEleMag(1);

      int nlines= ad[areaIndex][0].getLines();
      int neles = ad[areaIndex][0].getElements();
      setNumLinesEles(nlines+" "+neles);

      if (useDefaults) gotUserDefaults = true;
    }
    
    ArrayList arrayBandList = new ArrayList();
    ArrayList arrayBandIndex = new ArrayList();
    ArrayList arrayCalInfo = new ArrayList();
    asb = new AddeSatBands(asi.getBandNames());
    String[][] ci;
    String[] bandInfo = null;
    
    for (int na=0; na 0) {
            ci = new String[2][vbnum];
            for (int j=0; j0 && bn < bandInfo.length) {
            bandListNames[ks] = bandList[ks]+" - "+bandInfo[bn];
          }
        }
        
        bandListIndex[ks] = ( (Integer) arrayBandIndex.get(ks)).intValue();
        ci = (String[][]) arrayCalInfo.get(ks);
        int nc = ci[0].length;
        calInfo[0][ks] = ci[0];
        calInfo[1][ks] = ci[1];
      }

      if (bandList.length == 1) {
        replaceList(BandBox,bandListNames,null);
        replaceList(UnitBox,calInfo[1][0],"Select Unit");
        selectedBand = bandList[0];
        selectedBandIndex = 0;
      } else {
        replaceList(BandBox, bandListNames, "Select band");
        replaceList(UnitBox, null, " ");
        selectedBand = bandList[0];
        selectedBandIndex = 1;
      }
    }
    status("Set the other parameters you want");
  }//GEN-LAST:event_DateTimeListValueChanged
  
  public synchronized void status(String m) {
    /*
    String mt = m.trim();
    int k = (mt.length() > 80) ? 80 : mt.length();
    statusLabel.setText(mt.substring(0,k));
    System.out.println("Status:"+mt.substring(0,k));
     */
    statusLabel.setText(m);
    //System.out.println("Status:"+m);
    statusLabel.validate();
  }
  
  public void addActionListener(ActionListener o) {
    al = o;
  }

  public void removeActionListener(ActionListener o) {
    if (o == al) al = null;
  }

  private void userActionButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_userActionButtonActionPerformed
    // Add your handling code here:
    status("Processing...please wait...");

    String prop = getServer()+"|"+getGroup()+"|"+getDescr();
    dataProp.put(prop+"|CoordType",getCoordType());
    dataProp.put(prop+"|Location",getLocationString());
    dataProp.put(prop+"|Size",getNumLinesEles());
    dataProp.put(prop+"|Mag",getMag());
    if (getUserName() != null) 
           dataProp.put(getServer()+"|UserName",getUserName());
    if (getProjectNumber() != null) 
           dataProp.put(getServer()+"|ProjectNumber",getProjectNumber());
    if (serverList != null) dataProp.put("user|server|list",serverList.toString());
    
    try {
      FileOutputStream fo = new FileOutputStream(propFile);
      dataProp.save(fo,"GetAreaGUI");
      fo.close();
    } catch (Exception es) {;}
   
    String loc = " ";
    if (coordType.equals("E")) {
      loc = "&latlon=";
    } else if (coordType.equals("I")) {
      loc = "&linele=";
    } else if (coordType.equals("S")) {
      loc = "&id=";
    }
      
    String up = getUserName();
    if (up == null || up.length() < 2) {
      up = " ";
    } else {
      up = "&user="+getUserName()+"&proj="+getProjectNumber();
    }
    
    String un = getUnit();
    if (un == null || un.length()<3) un="BRIT";
    imageList = new ArrayList();
    
    if (multipleImages) {
      int numimages = DateTimeList.getSelectedIndices().length;
      StringBuffer cmdbuf = new StringBuffer();

      for (int i=0; i 0) && (dl != null) ) {
          selectedDescr = dl[i-1];  // there was a header in the combo box
          status("Getting dates and times from server...may take a while!!");
          asi.setSelectedDataset( selectedDescr );
          String[] times = asi.getDateTimeList();
          ad = asi.getAreaDirectories();
          DateTimeList.setListData(times);
          DateTimeList.revalidate();
          status("Now pick a day & time from the list, or set a Position number");
          String prop = getServer()+"|"+getGroup()+"|"+getDescr();
          String pp = (String) dataProp.get(prop+"|CoordType");
          gotUserDefaults = false;
          if (pp != null) {setCoordType(pp); gotUserDefaults = true;}
          pp = (String) dataProp.get(prop+"|Location");
          if (pp != null) {setLocationString(pp); gotUserDefaults = true;}
          pp = (String) dataProp.get(prop+"|Size");
          if (pp != null) {setNumLinesEles(pp); gotUserDefaults = true;}
          pp = (String) dataProp.get(prop+"|Mag");
          if (pp != null) {setMag(pp); gotUserDefaults = true;}
        }
      }
    };
    
    tdsap.start();
    doingRes = false;
    setLineMag(1);
    setEleMag(1);
    setCoordType("E");
    setLocationString(null);
    setNumLinesEles(null);
    
    String[] ld = {"Day and times for","selected dataset will","appear here"};
    DateTimeList.setListData(ld);
    DateTimeList.revalidate();
    
  }//GEN-LAST:event_DescrSelectorActionPerformed
  
  private void GroupSelectorActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_GroupSelectorActionPerformed
    // Add your handling code here:
    if (serverUpdated) return;
    areaIndex = -1;
    Thread tgsap = new Thread() {
      public void run() {
        selectedGroup = (String) GroupSelector.getSelectedItem();
        asi.setSelectedGroup( selectedGroup );
        bandNames = asi.getBandNames();
        String[] dl = asi.getDatasetListDescriptions();
        groupUpdated = true;
        replaceList(DescrSelector, dl, "Select Dataset");
        groupUpdated = false;
        status("Now choose a Dataset from the list");
        replaceList(UnitBox, null, "        ");
        replaceList(BandBox, null, "        ");
      }
    };
    tgsap.start();
    DateTimeList.removeAll();
    String[] ld = {"Day and times for","selected dataset will","appear here"};
    DateTimeList.setListData(ld);
    DateTimeList.revalidate();
    
  }//GEN-LAST:event_GroupSelectorActionPerformed
  
  private void ServerSelectorActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ServerSelectorActionPerformed
    
    Thread tssap = new Thread() {
      public void run() {
        serverUpdated = true;
        replaceList(GroupSelector, null, "Please wait...");
        status("Reading information from server...");
        selectedServer = (String) ServerSelector.getSelectedItem();
        int sstat = -1;
        while (sstat == -1) {
          // first see if a user name & proj number have been set...
          String un = getUserName();
          if (un == null || un.length() < 2) {
            un = (String) dataProp.get(selectedServer+"|UserName");
            String pn = (String) dataProp.get(selectedServer+"|ProjectNumber");
            if (un != null) {
              setUserName(un);
              setProjectNumber(pn);
              String ups = "user="+un+"&proj="+pn;
              asi.setUserIDandProjString(ups);
            }
          } else {
            String ups = "user="+un+"&proj="+getProjectNumber();
            asi.setUserIDandProjString(ups);
          }
          // now see if the Server can be found and read from...
          sstat = asi.setSelectedServer(selectedServer, "image");
          if (sstat == -1) {
            String pus = JOptionPane.showInputDialog(
            "User ID and project number required by this server!\nPlease enter them here (eg., jack 1234)");
            if (pus != null) {
              StringTokenizer stp = new StringTokenizer(pus," ");
              if (stp.countTokens() != 2) continue;
              setUserName(stp.nextToken());
              setProjectNumber(stp.nextToken());
            } else {
              sstat = -5;
            }
          }
        }
        
        if (sstat >= 0) {
          if (ServerSelector.getSelectedIndex() == -1) {
            // append server name onto list
            ServerSelector.addItem(selectedServer);
            // and onto properties list
            serverList.append(","+selectedServer);
          }
          String[] gl = asi.getGroupList();
          String prompt;
          if (gl == null) {
            GroupSelector.setEditable(true);
            prompt = "Enter the group name";
          } else {
            GroupSelector.setEditable(false);
            prompt = "Select group";
          }
          replaceList(GroupSelector, gl, prompt);
          serverUpdated = false;
          status("Now - "+prompt+" to use...");
        } else {
          status("Pick a different server!");
          serverUpdated = false;
        }
      }
    };
    tssap.start();
    areaIndex = -1;
    DescrSelector.removeAllItems();
    DateTimeList.removeAll();
    
    String[] ld = {"Day and times for","selected dataset will","appear here"};
    DateTimeList.setListData(ld);
    DateTimeList.revalidate();
    DescrSelector.revalidate();
    // Add your handling code here:
  }//GEN-LAST:event_ServerSelectorActionPerformed
  
  private synchronized void replaceList(JComboBox b, String[] s, String first) {
    if (b.getItemCount() > 0) b.removeAllItems();
    if (first != null) b.addItem(first);
    if (s != null) {
      for (int i=0; i < s.length; i++) {
        b.addItem(s[i].trim());
      }
    }
    b.setSelectedIndex(0);
    b.revalidate();
  }
    
    /**
     * @param args the command line arguments
     */
    public static void main (String args[]) {
      GetAreaGUI gag = new GetAreaGUI ("avoid pain", false, false);
      gag.setUserName("tomw");
      gag.setProjectNumber("1234");
      gag.show();
      
    }
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel PanelSGD;
    private javax.swing.JPanel PanelSG;
    private javax.swing.JPanel PanelServer;
    private javax.swing.JLabel ServerLabel;
    private javax.swing.JComboBox ServerSelector;
    private javax.swing.JPanel PanelGroup;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JComboBox GroupSelector;
    private javax.swing.JPanel PanelDescr;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JComboBox DescrSelector;
    private javax.swing.JPanel PanelListMag;
    private javax.swing.JPanel PanelMag;
    private javax.swing.JPanel jPanel13;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JSlider LMagSlider;
    private javax.swing.JLabel LMagLabel;
    private javax.swing.JPanel jPanel10;
    private javax.swing.JLabel EMagLabel;
    private javax.swing.JSlider EMagSlider;
    private javax.swing.JLabel DateTimeLabel;
    private javax.swing.JPanel PanelList;
    private javax.swing.JScrollPane DateTimeScrollPanel;
    private javax.swing.JList DateTimeList;
    private javax.swing.JPanel LinesElesPanel;
    private javax.swing.JLabel SizeLabel;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JLabel NumLinesLabel;
    private javax.swing.JTextField NumLinesText;
    private javax.swing.JLabel NumElesLabel;
    private javax.swing.JTextField NumElesText;
    private javax.swing.JCheckBox userDefaultsCheckBox;
    private javax.swing.JPanel PanelBandUnit;
    private javax.swing.JPanel BandPanel;
    private javax.swing.JLabel BandLabel;
    private javax.swing.JComboBox BandBox;
    private javax.swing.JPanel UnitsPanel;
    private javax.swing.JLabel UnitLabel;
    private javax.swing.JComboBox UnitBox;
    private javax.swing.JPanel UserActionPanel;
    private javax.swing.JButton userActionButton;
    private javax.swing.JPanel PanelStatus;
    private javax.swing.JTextField statusLabel;
    private javax.swing.JPanel PanelLoc;
    private javax.swing.JPanel jPanel11;
    private javax.swing.JLabel PlaceLabel;
    private javax.swing.JRadioButton LatLonButton;
    private javax.swing.JRadioButton LinEleButton;
    private javax.swing.JRadioButton IDButton;
    private javax.swing.JPanel jPanel12;
    private javax.swing.JLabel LatLineLabel;
    private javax.swing.JLabel LonEleLabel;
    private javax.swing.JTextField LatLineText;
    private javax.swing.JTextField LonEleText;
    // End of variables declaration//GEN-END:variables
    private javax.swing.ButtonGroup buttGroupLoc;
    private int LMagValue, EMagValue;
    private String calText = null;
}

 

Ads help maintain this website.