package usda.weru.sweep.gui;

import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;

import com.blogspot.gyfus.LoadingCircle;
import de.schlichtherle.truezip.file.TFile;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.openide.util.Exceptions;
import usda.weru.sweep.data.TreatFileData;
import usda.weru.util.LoadProperties;
import usda.weru.util.Util;
import usda.weru.util.wepsFileChooser2.WepsFileChooser2;
import usda.weru.weps.gui.ConfigPanel_n;
import usda.weru.worldwind.shapes.ell.WepsEllipse;
import usda.weru.worldwind.shapes.gon.WepsPolygon;
import usda.weru.worldwind.shapes.rect.WepsRectangle;
import usda.weru.worldwind.util.NameAnnotation;
import usda.weru.worldwind.util.SweepConfig;
import usda.weru.worldwind.util.TangentPlane;
import usda.weru.worldwind.shapes.WepsShapeHandler;

/**
 * This class handles the first panel in the sweep process.  It is designed to take
 * in an arbitrary polygon defining the user's area of interest and generate the
 * minimum bounding rectangle of said region.
 * 
 * As the first panel in the sweep process, it has been designed as a gui with the
 * intent of guiding the user through defining their AoI and continuing to the next
 * tab.
 * 
 * @author jonathanhornbaker
 */
public class TreatmentPanel extends javax.swing.JPanel implements SweepMasterPanel.SweepSubPanel
{
    public static final long serialVersionUID = 1234561612L;
    
    private boolean updateLock = false;
    
    private SweepMasterPanel parent;
    
    private TangentPlane tanPlane;
    
    private String path;
    
    public TreatFileData data;
    
    Map treatData = new HashMap();
    
    
    private List<NameAnnotation> tempNames = new ArrayList<NameAnnotation>();
    
    /**
     * Creates new form AoIPanel
     */
    public TreatmentPanel(SweepMasterPanel par) {
        initComponents();
        activateLoadingCircle(true);
        parent = par;
        treatSoilInit();
    }

    public void activateLoadingCircle(boolean bool) {
        loadingText.setVisible(bool);
    }

    
    /**
     * Initialized the custom parts of the Area of Interest panel.  Should only
     * be called once during construction.
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    private void treatSoilInit()
    {
        
    }
    
    /**
     * 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 Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        JP_location = new javax.swing.JPanel();
        shapeText = new javax.swing.JTextField();
        treatmentText = new javax.swing.JTextField();
        fileChoose = new javax.swing.JButton();
        editButton = new javax.swing.JButton();
        JP_WorldWindHolder = new javax.swing.JPanel();
        JTB_toolbar = new javax.swing.JToolBar();
        JB_drawPolygon = new javax.swing.JToggleButton();
        JB_drawRectangle = new javax.swing.JToggleButton();
        JB_drawCircle = new javax.swing.JToggleButton();
        JB_insert = new javax.swing.JToggleButton();
        JB_stop = new javax.swing.JButton();
        JB_delete = new javax.swing.JButton();
        JB_intersect = new javax.swing.JButton();
        JB_merge = new javax.swing.JButton();
        JB_polyline = new javax.swing.JToggleButton();
        JB_cutArc = new javax.swing.JToggleButton();
        JB_stripStart = new javax.swing.JToggleButton();
        JB_labels = new javax.swing.JCheckBox();
        loadingText = new javax.swing.JLabel();

        shapeText.setText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.shapeText.text")); // NOI18N
        shapeText.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                shapeTextActionPerformed(evt);
            }
        });

        treatmentText.setText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.treatmentText.text")); // NOI18N
        treatmentText.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                treatmentTextActionPerformed(evt);
            }
        });

        fileChoose.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/folder.gif"))); // NOI18N
        fileChoose.setName("CD-LocalSDMDBLocation"); // NOI18N
        fileChoose.setPreferredSize(new java.awt.Dimension(35, 19));
        fileChoose.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fileChooseActionPerformed(evt);
            }
        });

        editButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(editButton, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.editButton.text")); // NOI18N
        editButton.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.editButton.toolTipText")); // NOI18N
        editButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout JP_locationLayout = new javax.swing.GroupLayout(JP_location);
        JP_location.setLayout(JP_locationLayout);
        JP_locationLayout.setHorizontalGroup(
            JP_locationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(JP_locationLayout.createSequentialGroup()
                .addComponent(shapeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(JP_locationLayout.createSequentialGroup()
                .addComponent(treatmentText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(editButton, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(1, 1, 1)
                .addComponent(fileChoose, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        JP_locationLayout.setVerticalGroup(
            JP_locationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(JP_locationLayout.createSequentialGroup()
                .addComponent(shapeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(JP_locationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(treatmentText, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
                    .addComponent(editButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(fileChoose, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(0, 119, Short.MAX_VALUE))
        );

        JP_WorldWindHolder.setLayout(new java.awt.BorderLayout());

        JTB_toolbar.setRollover(true);

        JB_drawPolygon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/drawPolygon.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_drawPolygon, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawPolygon.text_1")); // NOI18N
        JB_drawPolygon.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawPolygon.toolTipText")); // NOI18N
        JB_drawPolygon.setFocusable(false);
        JB_drawPolygon.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_drawPolygon.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_drawPolygon.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_drawPolygonActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_drawPolygon);

        JB_drawRectangle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/drawRectangle.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_drawRectangle, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawRectangle.text_1")); // NOI18N
        JB_drawRectangle.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawRectangle.toolTipText")); // NOI18N
        JB_drawRectangle.setActionCommand(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawRectangle.actionCommand")); // NOI18N
        JB_drawRectangle.setFocusable(false);
        JB_drawRectangle.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_drawRectangle.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_drawRectangle.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_drawRectangleActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_drawRectangle);

        JB_drawCircle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/drawCircle.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_drawCircle, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawCircle.text_1")); // NOI18N
        JB_drawCircle.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_drawCircle.toolTipText")); // NOI18N
        JB_drawCircle.setFocusable(false);
        JB_drawCircle.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_drawCircle.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_drawCircle.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_drawCircleActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_drawCircle);

        JB_insert.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/addVertex.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_insert, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_insert.text_1")); // NOI18N
        JB_insert.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_insert.toolTipText")); // NOI18N
        JB_insert.setFocusable(false);
        JB_insert.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_insert.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_insert.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_insertActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_insert);

        JB_stop.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/stopPolygon.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_stop, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stop.text")); // NOI18N
        JB_stop.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stop.toolTipText")); // NOI18N
        JB_stop.setMaximumSize(new java.awt.Dimension(32, 32));
        JB_stop.setMinimumSize(new java.awt.Dimension(32, 32));
        JB_stop.setPreferredSize(new java.awt.Dimension(32, 32));
        JB_stop.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_stopActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_stop);

        JB_delete.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/deletePolygon.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_delete, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_delete.text")); // NOI18N
        JB_delete.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_delete.toolTipText")); // NOI18N
        JB_delete.setMaximumSize(new java.awt.Dimension(32, 32));
        JB_delete.setMinimumSize(new java.awt.Dimension(32, 32));
        JB_delete.setPreferredSize(new java.awt.Dimension(32, 32));
        JB_delete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_deleteActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_delete);

        JB_intersect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/Intersect.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_intersect, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_intersect.text")); // NOI18N
        JB_intersect.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_intersect.toolTipText")); // NOI18N
        JB_intersect.setFocusable(false);
        JB_intersect.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_intersect.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_intersect.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_intersectActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_intersect);

        JB_merge.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/Merge.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_merge, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_merge.text")); // NOI18N
        JB_merge.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_merge.toolTipText")); // NOI18N
        JB_merge.setFocusable(false);
        JB_merge.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_merge.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_merge.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_mergeActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_merge);

        JB_polyline.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/drawPolyline.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_polyline, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_polyline.text")); // NOI18N
        JB_polyline.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_polyline.toolTipText")); // NOI18N
        JB_polyline.setFocusable(false);
        JB_polyline.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_polyline.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_polyline.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_polylineActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_polyline);

        JB_cutArc.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/RemoveArc.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_cutArc, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_cutArc.text")); // NOI18N
        JB_cutArc.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_cutArc.toolTipText")); // NOI18N
        JB_cutArc.setFocusable(false);
        JB_cutArc.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_cutArc.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_cutArc.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_cutArcActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_cutArc);

        JB_stripStart.setIcon(new javax.swing.ImageIcon(getClass().getResource("/usda/weru/resources/StrpField.png"))); // NOI18N
        org.openide.awt.Mnemonics.setLocalizedText(JB_stripStart, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stripStart.text")); // NOI18N
        JB_stripStart.setToolTipText(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stripStart.toolTipText")); // NOI18N
        JB_stripStart.setFocusable(false);
        JB_stripStart.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_stripStart.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_stripStart.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_stripStartActionPerformed(evt);
            }
        });
        JTB_toolbar.add(JB_stripStart);
        JB_stripStart.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stripStart.AccessibleContext.accessibleName")); // NOI18N
        JB_stripStart.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_stripStart.AccessibleContext.accessibleDescription")); // NOI18N

        JB_labels.setSelected(true);
        org.openide.awt.Mnemonics.setLocalizedText(JB_labels, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_labels.text")); // NOI18N
        JB_labels.setActionCommand(org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.JB_labels.actionCommand")); // NOI18N
        JB_labels.setFocusable(false);
        JB_labels.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        JB_labels.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        JB_labels.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_labelsActionPerformed(evt);
            }
        });

        loadingText.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        loadingText.setForeground(new java.awt.Color(255, 0, 0));
        org.openide.awt.Mnemonics.setLocalizedText(loadingText, org.openide.util.NbBundle.getMessage(TreatmentPanel.class, "TreatmentPanel.loadingText.text")); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(JP_WorldWindHolder, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(JB_labels)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(JP_location, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(124, 124, 124))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(JTB_toolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 395, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 219, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(loadingText)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(16, 16, 16)
                .addComponent(JTB_toolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(JP_location, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(JB_labels))
                .addComponent(JP_WorldWindHolder, javax.swing.GroupLayout.DEFAULT_SIZE, 2, Short.MAX_VALUE)
                .addGap(7, 7, 7)
                .addComponent(loadingText))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void JB_deleteActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_JB_deleteActionPerformed
    {//GEN-HEADEREND:event_JB_deleteActionPerformed
        if(!JB_drawPolygon.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_cutArc.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected())
            parent.deleteSelction();
    }//GEN-LAST:event_JB_deleteActionPerformed

    private void JB_stopActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_JB_stopActionPerformed
    {//GEN-HEADEREND:event_JB_stopActionPerformed
        System.out.println("TreatSoilPanel.JB_stopActionPerformed");
        parent.stop();
    }//GEN-LAST:event_JB_stopActionPerformed

    private void JB_intersectActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_JB_intersectActionPerformed
    {//GEN-HEADEREND:event_JB_intersectActionPerformed
        if(!JB_drawPolygon.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_cutArc.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected()  )
            parent.intersectCurrentShapes();
    }//GEN-LAST:event_JB_intersectActionPerformed

    private void JB_stripStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_stripStartActionPerformed
        if(JB_stripStart.isSelected() && parent.getStripper()==null && (!JB_drawPolygon.isSelected() && !JB_cutArc.isSelected() && !JB_polyline.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected() ))
            parent.startStrip();
        else if(JB_stripStart.isSelected() && (JB_drawPolygon.isSelected() || JB_cutArc.isSelected() || JB_polyline.isSelected() || JB_insert.isSelected() || JB_drawCircle.isSelected() || JB_drawRectangle.isSelected() ))
            JB_stripStart.doClick();
        else if(!JB_stripStart.isSelected() && parent.getStripper() != null)
            JB_stripStart.doClick();
    }//GEN-LAST:event_JB_stripStartActionPerformed

    private void JB_cutArcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_cutArcActionPerformed
        if(JB_cutArc.isSelected() && parent.getCutter()==null && (!JB_drawPolygon.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected() ))
            parent.startCut();
        else if(JB_cutArc.isSelected() && (JB_drawPolygon.isSelected() || JB_stripStart.isSelected() || JB_polyline.isSelected() || JB_insert.isSelected() || JB_drawCircle.isSelected() || JB_drawRectangle.isSelected() ))
            JB_cutArc.doClick();
        else if(!JB_cutArc.isSelected() && parent.getCutter() != null)
            JB_cutArc.doClick();
    }//GEN-LAST:event_JB_cutArcActionPerformed

    private void JB_polylineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_polylineActionPerformed
        if(JB_polyline.isSelected() && parent.getSplitter()==null && (!JB_drawPolygon.isSelected() && !JB_cutArc.isSelected() && !JB_stripStart.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected() ))
            parent.startSplit();
        else if(JB_polyline.isSelected() && (JB_drawPolygon.isSelected() || JB_cutArc.isSelected() || JB_stripStart.isSelected() || JB_insert.isSelected() || JB_drawCircle.isSelected() || JB_drawRectangle.isSelected() ))
            JB_polyline.doClick();
        else if(!JB_polyline.isSelected() && parent.getSplitter() != null)
            JB_polyline.doClick();
    }//GEN-LAST:event_JB_polylineActionPerformed

    private void JB_mergeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_mergeActionPerformed
        if(!JB_drawPolygon.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_cutArc.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected() )
            parent.unionCurrentShapes();
    }//GEN-LAST:event_JB_mergeActionPerformed

    private void JB_insertActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_insertActionPerformed
        if(JB_insert.isSelected() && parent.getAddingVertex() == false && (!JB_drawPolygon.isSelected() && !JB_cutArc.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected() ))
            parent.primeInsertion();
        else if(JB_insert.isSelected() && (JB_drawPolygon.isSelected() || JB_cutArc.isSelected() || JB_stripStart.isSelected() || JB_polyline.isSelected() || JB_drawCircle.isSelected() || JB_drawRectangle.isSelected() ))
            JB_insert.doClick();
        else if(!JB_insert.isSelected() && parent.getAddingVertex() == true)
            JB_insert.doClick();
    }//GEN-LAST:event_JB_insertActionPerformed

    private void JB_drawCircleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_drawCircleActionPerformed
        if(JB_drawCircle.isSelected() && parent.getAddingCircle() == false && (!JB_drawPolygon.isSelected() && !JB_cutArc.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_insert.isSelected() && !JB_drawRectangle.isSelected()))
            parent.createShape(new WepsEllipse(SweepConfig.userAttributes));
        else if(JB_drawCircle.isSelected() && (JB_drawPolygon.isSelected() || JB_cutArc.isSelected() || JB_stripStart.isSelected() || JB_polyline.isSelected() || JB_insert.isSelected() || JB_drawRectangle.isSelected()))
            JB_drawCircle.doClick();
        else if(!JB_drawCircle.isSelected() && parent.getAddingCircle() == true)
            JB_drawCircle.doClick();
    }//GEN-LAST:event_JB_drawCircleActionPerformed

    private void JB_drawRectangleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_drawRectangleActionPerformed
        if(JB_drawRectangle.isSelected() && parent.getAddingRec() == false && (!JB_drawPolygon.isSelected() && !JB_cutArc.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected()))
            parent.createShape(new WepsRectangle(SweepConfig.userAttributes));
        else if(JB_drawRectangle.isSelected() && (JB_drawPolygon.isSelected() || JB_cutArc.isSelected() || JB_stripStart.isSelected() || JB_polyline.isSelected() || JB_insert.isSelected() || JB_drawCircle.isSelected()))
            JB_drawRectangle.doClick();
        else if(!JB_drawRectangle.isSelected() && parent.getAddingRec() == true)
            JB_drawRectangle.doClick();
    }//GEN-LAST:event_JB_drawRectangleActionPerformed

    private void JB_drawPolygonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_drawPolygonActionPerformed
        if(JB_drawPolygon.isSelected() && parent.getAddingPoly() == false && (!JB_cutArc.isSelected() && !JB_stripStart.isSelected() && !JB_polyline.isSelected() && !JB_insert.isSelected() && !JB_drawCircle.isSelected() && !JB_drawRectangle.isSelected()))
            parent.createShape(new WepsPolygon(SweepConfig.userAttributes));
        else if(JB_drawPolygon.isSelected() && (JB_cutArc.isSelected() || JB_stripStart.isSelected() || JB_polyline.isSelected() || JB_insert.isSelected() || JB_drawCircle.isSelected() || JB_drawRectangle.isSelected()))
            JB_drawPolygon.doClick();
        else if(!JB_drawPolygon.isSelected() && parent.getAddingPoly() == true)
            JB_drawPolygon.doClick();
    }//GEN-LAST:event_JB_drawPolygonActionPerformed

    private void JB_labelsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JB_labelsActionPerformed
       if(JB_labels.isSelected()){
           System.out.println("checkbox is being selected");
            for(int i=0; i<parent.storage.oldPos.size(); i++){
                parent.storage.nameAns.get(i).setPosition(parent.storage.oldPos.get(i));
            }
            
            parent.storage.oldPos.clear();
       }
       else{
           System.out.println("checkbox is being deselected");
           for(NameAnnotation na: parent.storage.nameAns){
                System.out.println("trying to hide NA: "+na.getText());
                parent.storage.oldPos.add(na.hideNA());
            }
       }
        parent.getWorldWind().redraw();
    }//GEN-LAST:event_JB_labelsActionPerformed

    private void shapeTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shapeTextActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_shapeTextActionPerformed

    private void fileChooseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileChooseActionPerformed
        if(parent.storage.currentShapes.size() == 0 ){
            JOptionPane.showMessageDialog(this, "Please select a treatment shape "
                    + "before trying to edit its .treat file.", "Shape not found"
                            , JOptionPane.INFORMATION_MESSAGE);  
            //fileChoose.doClick();
            return;
        }
        
        ConfigPanel_n wepsConfig = new ConfigPanel_n();                    
        wepsConfig.propertyLoader = new LoadProperties();
        
        wepsConfig.propertyLoader.setupPropertyHashtable(getRootPane());
        System.out.println("file check 1");
        Object o = evt.getSource();
        if (o instanceof JButton) {	
            JButton jb = (JButton) o;
            JTextField relatedField = null;
            TFile curFil = null;
            JPanel jp = (JPanel) jb.getParent();
            for (Object jtf : jp.getComponents()) {
                if (jtf instanceof JTextField) {
                    System.out.println("file check 1");
                    String name = ((JTextField) jtf).getName();
                    if (jb.getName().equals(name)) {
                        System.out.println("file check 2");
                        curFil = new TFile(Util.parse(((JTextField) jtf).getText()));
                        relatedField = (JTextField)jtf;
                        if (curFil == null) {
                            System.out.println("file check 3");
                            curFil = new TFile(".");
                        }
                        break;
                    }
                }
            }

            WepsFileChooser2 wfc = new WepsFileChooser2(jb.getName(), WepsFileChooser2.Action.Select);
            if (curFil !=null && curFil.exists()) {
                System.out.println("file check 4");
                wfc.setCurrentDirectory(curFil.isDirectory() ? curFil : curFil.getParentFile());
            } else if (curFil !=null && curFil.getParentFile() != null && curFil.getParentFile().exists()) {
                if (curFil.getParentFile().isDirectory()) {
                    System.out.println("file check 5");
                    wfc.setCurrentDirectory(curFil.getParentFile());
                }
            } else {
                System.out.println("file check 6");
                wfc.setDefaultCurrentDirectory(jb.getName());
            }
            if (wfc.showDialog(this) == WepsFileChooser2.APPROVE_OPTION) {
                System.out.println("file check 7");
                TFile install = new TFile(".").getCanOrAbsFile();
                TFile selected = new TFile(wfc.getSelectedFile());
                path = selected.getPath();
                selected = Util.resolveFileAsRelativeChildOrAbsolute(install, selected);
                parent.storage.currentShapes.get(0).getShape().setTreatment(path);
                this.treatmentText.setText("Treatment: "+path+" ");
                
                wepsConfig.putChange(jb.getName(), path);
                wepsConfig.propertyLoader.loadData(jb.getName(), path);
                if(relatedField != null) {
                    System.out.println("file check 8");
                    //System.out.println("Setting field to: " + path);
                    relatedField.setText(path);
                    
                }
            }
        }
        
                  
    }//GEN-LAST:event_fileChooseActionPerformed

    private void treatmentTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_treatmentTextActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_treatmentTextActionPerformed

    private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed
        if(parent.storage.currentShapes.size() == 0 ){
            JOptionPane.showMessageDialog(this, "Please select a treatment shape "
                    + "before trying to edit its .treat file.", "Shape not found"
                            , JOptionPane.INFORMATION_MESSAGE);  
        }
        else if(parent.storage.currentShapes.get(0).getShape().getTreatment()==null){
            JOptionPane.showMessageDialog(this, "Please make sure a valid .treat file "
                    + "has been selected before trying to edit one.", "File not found"
                            , JOptionPane.INFORMATION_MESSAGE);
        }
        else{

            data = new TreatFileData(new TFile(path));
            try {
                data.readTreat();
            } catch (ParseException ex) {
                Exceptions.printStackTrace(ex);
            }
            
            //we want a block to open our own file editor as in soilpanel
            //fill a hashmap of values from .treat file
            
            treatData = data.getMap();
            System.out.println("data = "+treatData.toString());
            treatEditor editor = new treatEditor(this);
            editor.setSize(750, 550);
            editor.setVisible(true);
            editor.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        }       
    }//GEN-LAST:event_editButtonActionPerformed

    /*public void updateTreat(treatEditor sl) {
        System.out.println("updating treat from editor");
        System.out.println(("string = \""+sl.JTF_layerBD0.getText()+"\""));
        if(!sl.JTF_layerBD0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYBULKD, Double.parseDouble(sl.JTF_layerBD0.getText()));
        if(!sl.JTF_layerSand0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYSANDC, Double.parseDouble(sl.JTF_layerSand0.getText()));
        if(!sl.JTF_layerVFSand0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYVFSAN, Double.parseDouble(sl.JTF_layerVFSand0.getText()));
        if(!sl.JTF_layerSilt0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYSILTC, Double.parseDouble(sl.JTF_layerSilt0.getText()));
        if(!sl.JTF_layerClay0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYCLAYC, Double.parseDouble(sl.JTF_layerClay0.getText()));
        if(!sl.JTF_layerRock0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYROCKV, Double.parseDouble(sl.JTF_layerRock0.getText()));
        if(!sl.JTF_layerAggDen0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYAGGRD, Double.parseDouble(sl.JTF_layerAggDen0.getText()));
        if(!sl.JTF_layerAggStab0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYAGGRS, Double.parseDouble(sl.JTF_layerAggStab0.getText()));
        if(!sl.JTF_layerAggGMD0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYERGMD, Double.parseDouble(sl.JTF_layerAggGMD0.getText()));
        if(!sl.JTF_layerAggMin0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYAGGNS, Double.parseDouble(sl.JTF_layerAggMin0.getText()));
        if(!sl.JTF_layerAggMax0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYAGGXS, Double.parseDouble(sl.JTF_layerAggMax0.getText()));
        if(!sl.JTF_layerAggGSD0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYERGSD, Double.parseDouble(sl.JTF_layerAggGSD0.getText()));
        if(!sl.JTF_wiltingPoint0.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYWILTP, Double.parseDouble(sl.JTF_wiltingPoint0.getText()));
        if(!sl.JTF_waterContent.getText().equals(""))
            layer.setData(SweepSoilLayer.SOILLAYWATCN, Double.parseDouble(sl.JTF_waterContent.getText()));
        //layer.setData(SweepSoilLayer.SOILLAYWATCN, sl.JTF_layerAggDen0.getText());
        //data.setLayer(0, layer);
       // data.writeSoil();
       
       //write to treat file somehow
    }*/
    
    /**
     * Grabs the worldwind panel for display on this tab.
     */
    @Override
    public void acceptWorldWind()
    {
        JP_WorldWindHolder.add(parent.getWWPanel());
    }    
    
    /**
     * When we get a new Key Listener, we want to make sure all the sub components
     * get it as well.
     * @param in 
     */
    @Override
    public void addKeyListener(KeyListener in)
    {
        super.addKeyListener(in);
        JB_cutArc.addKeyListener(in);
        JB_delete.addKeyListener(in);
        JB_drawCircle.addKeyListener(in);
        JB_drawPolygon.addKeyListener(in);
        JB_drawRectangle.addKeyListener(in);
        JB_insert.addKeyListener(in);
        JB_intersect.addKeyListener(in);
        JB_polyline.addKeyListener(in);
        JB_stop.addKeyListener(in);
        JB_stripStart.addKeyListener(in);
        JP_WorldWindHolder.addKeyListener(in);
        JP_location.addKeyListener(in);
        JTB_toolbar.addKeyListener(in);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    public javax.swing.JToggleButton JB_cutArc;
    private javax.swing.JButton JB_delete;
    public javax.swing.JToggleButton JB_drawCircle;
    public javax.swing.JToggleButton JB_drawPolygon;
    public javax.swing.JToggleButton JB_drawRectangle;
    public javax.swing.JToggleButton JB_insert;
    private javax.swing.JButton JB_intersect;
    public javax.swing.JCheckBox JB_labels;
    private javax.swing.JButton JB_merge;
    public javax.swing.JToggleButton JB_polyline;
    private javax.swing.JButton JB_stop;
    public javax.swing.JToggleButton JB_stripStart;
    private javax.swing.JPanel JP_WorldWindHolder;
    private javax.swing.JPanel JP_location;
    private javax.swing.JToolBar JTB_toolbar;
    private javax.swing.JButton editButton;
    private javax.swing.JButton fileChoose;
    private javax.swing.JLabel loadingText;
    public javax.swing.JTextField shapeText;
    public javax.swing.JTextField treatmentText;
    // End of variables declaration//GEN-END:variables
}
