package SesameGUI;

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.text.NumberFormat;
import java.awt.event.ActionEvent;



public class PreviewWavePanel extends JPanel
	{
	public PreviewWavePanel()
		{
    dlg = null;
    FILTER = false;   
    traceWidth = 920;
    traceHeight = 110;
		initGUI();
		}

	private void initGUI()
		{
		setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

		zPanel = new SpectrumView();
		nsPanel = new SpectrumView();
		ewPanel = new SpectrumView();
    zPanel_f = new SpectrumView();
		nsPanel_f = new SpectrumView();
		ewPanel_f = new SpectrumView();
		jLabel3 = new JLabel();
		jLabel4 = new JLabel();
		jLabel5 = new JLabel();
    jLabel3_f = new JLabel();
		jLabel4_f = new JLabel();
		jLabel5_f = new JLabel();

		max3 = new JLabel();
		o3 = new JLabel();
		min3 = new JLabel();
		min1 = new JLabel();
		o1 = new JLabel();
		max1 = new JLabel();
		min2 = new JLabel();
		o2 = new JLabel();
		max2 = new JLabel();
    max3_f = new JLabel();
		o3_f = new JLabel();
		min3_f = new JLabel();
		min1_f = new JLabel();
		o1_f = new JLabel();
		max1_f = new JLabel();
		min2_f = new JLabel();
		o2_f = new JLabel();
		max2_f = new JLabel();
		jLabel6 = new JLabel();
    jLabel7 = new JLabel();
		scale = new ScaleLabel(zPanel);

     zPanel_f.setVisible(false);
	   nsPanel_f.setVisible(false);
	   ewPanel_f.setVisible(false);
     jLabel3_f.setVisible(false);
	   jLabel4_f.setVisible(false);
	   jLabel5_f.setVisible(false);
     o3_f.setVisible(false);
		 min3_f.setVisible(false);
		 min1_f.setVisible(false);
		 o1_f.setVisible(false);
		 max1_f.setVisible(false);
     max2_f.setVisible(false);
     max3_f.setVisible(false);
		 min2_f.setVisible(false);
		 o2_f.setVisible(false);

     numchan = 3;

		zPanel.setBackground(java.awt.Color.white);
		zPanel.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    zPanel.setShowLegend(false);
		add(zPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5, traceWidth, traceHeight));

		nsPanel.setBackground(java.awt.Color.white);
		nsPanel.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    nsPanel.setShowLegend(false);
		add(nsPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5 + traceHeight, traceWidth, traceHeight));

		ewPanel.setBackground(java.awt.Color.white);
		ewPanel.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    ewPanel.setShowLegend(false);
		add(ewPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5 + traceHeight*2, traceWidth, traceHeight));

    zPanel_f.setBackground(java.awt.Color.white);
		zPanel_f.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    zPanel_f.setShowLegend(false);
		add(zPanel_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5 + traceHeight*3, traceWidth, traceHeight));

		nsPanel_f.setBackground(java.awt.Color.white);
		nsPanel_f.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    nsPanel_f.setShowLegend(false);
		add(nsPanel_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5 + traceHeight*4, traceWidth, traceHeight));

		ewPanel_f.setBackground(java.awt.Color.white);
		ewPanel_f.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    ewPanel_f.setShowLegend(false);
		add(ewPanel_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 5 + traceHeight*5, traceWidth, traceHeight));

		jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel3.setText("V");
		jLabel3.setForeground(java.awt.Color.black);
		add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5, 40, 20));

		jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel4.setText("NS");
		jLabel4.setForeground(java.awt.Color.black);
		add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5 + traceHeight, 40, 20));

		jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel5.setText("EW");
		jLabel5.setForeground(java.awt.Color.black);
		add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5 + traceHeight*2, 40, 20));

 	  jLabel3_f.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel3_f.setText("Z_Fil");
		jLabel3_f.setForeground(java.awt.Color.black);
		add(jLabel3_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5 + traceHeight*3, 60, 20));

		jLabel4_f.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel4_f.setText("NS_Fil");
		jLabel4_f.setForeground(java.awt.Color.black);
		add(jLabel4_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5 + traceHeight*4, 60, 20));

		jLabel5_f.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel5_f.setText("EW_Fil");
		jLabel5_f.setForeground(java.awt.Color.black);
		add(jLabel5_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(40 + traceWidth, traceHeight/2 - 5 + traceHeight*5, 60, 20));

		max3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max3.setText("");
		max3.setForeground(java.awt.Color.black);
		add(max3, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*2, 30, -1));

    max3_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max3_f.setText("");
		max3_f.setForeground(java.awt.Color.black);
		add(max3_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*5, 30, -1));


		o3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o3.setText("0");
		o3.setForeground(java.awt.Color.black);
		add(o3, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight/2 - 5 + traceHeight*2 , 30, -1));

    o3_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o3_f.setText("0");
		o3_f.setForeground(java.awt.Color.black);
		add(o3_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight/2 - 5 + traceHeight*5 , 30, -1));


		min3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min3.setForeground(java.awt.Color.black);
		min3.setText("");
		add(min3, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*3 - 10, 30, -1));

		min3_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min3_f.setForeground(java.awt.Color.black);
		min3_f.setText("");
		add(min3_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*6 - 10, 30, -1));

		min1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min1.setText("");
		min1.setForeground(java.awt.Color.black);
		add(min1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight - 10, 30, -1));

		min1_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min1_f.setText("");
		min1_f.setForeground(java.awt.Color.black);
		add(min1_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*4 - 10, 30, -1));

		o1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o1.setText("0");
		o1.setForeground(java.awt.Color.black);
		add(o1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight/2 - 5, 30, -1));

		o1_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o1_f.setText("0");
		o1_f.setForeground(java.awt.Color.black);
		add(o1_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*3 + traceHeight/2 - 5, 30, -1));

		max1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max1.setText("");
		max1.setForeground(java.awt.Color.black);
		add(max1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 30, -1));

		max1_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max1_f.setText("");
		max1_f.setForeground(java.awt.Color.black);
		add(max1_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*3, 30, -1));

		min2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min2.setText("");
		min2.setForeground(java.awt.Color.black);
		add(min2, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*2 - 10, 30, -1));

		min2_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		min2_f.setText("");
		min2_f.setForeground(java.awt.Color.black);
		add(min2_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*5 - 10, 30, -1));

		o2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o2.setText("0");
		o2.setForeground(java.awt.Color.black);
		add(o2, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight/2 - 5 + traceHeight, 30, -1));

		o2_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		o2_f.setText("0");
		o2_f.setForeground(java.awt.Color.black);
		add(o2_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight/2 - 5 + traceHeight*4, 30, -1));

		max2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max2.setText("");
		max2.setForeground(java.awt.Color.black);
		add(max2, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight, 30, -1));

		max2_f.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		max2_f.setText("");
		max2_f.setForeground(java.awt.Color.black);
		add(max2_f, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, traceHeight*4, 30, -1));

		jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jLabel6.setText("Time in seconds");
		jLabel6.setForeground(java.awt.Color.black);
		add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(traceWidth/2 - 50, traceHeight*numchan + 40, 200 , -1));

    jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
		jLabel7.setText("");
		jLabel7.setForeground(java.awt.Color.black);
		add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, traceHeight*numchan + 40, 230, -1));

		scale.setOpaque(false);
		add(scale, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 10+traceHeight*numchan, traceWidth, 20));
		
				addMouseListener(
		    new java.awt.event.MouseAdapter()
			    {
			    public void mousePressed(java.awt.event.MouseEvent evt)
				    {
				    System.out.println("Mouse pressed");
				    }
			  
			    });

	    addKeyListener(
		  new java.awt.event.KeyAdapter() {
		     public void keyTyped(java.awt.event.KeyEvent evt) {
		        System.out.println("keytyped");
		       if( evt.getKeyChar()== evt.VK_DELETE )
		         zPanel.DeletedWindow(0);
		     }
		  }
		);
		}

	public void EnableWindowSelection(boolean enable)
		{
        zPanel.EnableWindowSelection(enable);
        nsPanel.EnableWindowSelection(enable);
        ewPanel.EnableWindowSelection(enable);
        if (FILTER) 
        {
         zPanel_f.EnableWindowSelection(enable);
         nsPanel_f.EnableWindowSelection(enable);
         ewPanel_f.EnableWindowSelection(enable);
        }
		}



	public void selectedWindow(int i)
		{
		zPanel.setSelectedWindow(i);
		zPanel.repaint();
		nsPanel.setSelectedWindow(i);
		nsPanel.repaint();
		ewPanel.setSelectedWindow(i);
		ewPanel.repaint();
    if (FILTER) 
    {
    zPanel_f.setSelectedWindow(i);
		zPanel_f.repaint();
		nsPanel_f.setSelectedWindow(i);
		nsPanel_f.repaint();
		ewPanel_f.setSelectedWindow(i);
		ewPanel_f.repaint();
    }

    if (dlg != null)
      dlg.selectedWindow (i);
		}

	public void repaintNotify(int x, int y, int x1, int y1)
		{
		zPanel.repaint(x, y, x1, y1);
		nsPanel.repaint(x, y, x1, y1);
		ewPanel.repaint(x, y, x1, y1);
    if (FILTER) 
    {
    zPanel_f.repaint(x, y, x1, y1);
		nsPanel_f.repaint(x, y, x1, y1);
		ewPanel_f.repaint(x, y, x1, y1);
    }
		}

	public void repaintNotify()
		{
    this.repaint();
/*		zPanel.repaint();
		nsPanel.repaint();
		ewPanel.repaint();

if ( FILTER) 
    {
    zPanel_f.repaint();
		nsPanel_f.repaint();
		ewPanel_f.repaint();
    }

		scale.repaint();*/
		}

  public void setMaxMinLabel() 
  {
    
    if (zPanel.getSpectrum() != null)
      {
      double     div;

      div = CalcFactor (zPanel.getSpectrum().getYMax ());

      if (zPanel.getSpectrum().getYMax () > 100.0)
        {
        jLabel7.setText(zPanel.getSpectrum().getUnits().concat(new String (" * ").concat(Integer.toString((int)div))));

        max1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMax () / div)));
        min1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMin () / div)));

        min2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMin () / div)));
        max2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMax () / div)));

        min3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMin () / div)));
        max3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMax () / div)));
        }
      else if (zPanel.getSpectrum().getYMax () < 10.0)
        {
        jLabel7.setText(zPanel.getSpectrum().getUnits().concat(new String (" / ").concat(Integer.toString((int)div))));

        max1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMax () * div)));
        min1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMin () * div)));

        min2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMin () * div)));
        max2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMax () * div)));

        min3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMin () * div)));
        max3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMax () * div)));
        }
      else
        {
        jLabel7.setText(zPanel.getSpectrum().getUnits());

        max1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMax ())));
        min1.setText(Integer.toString((int)(zPanel.getSpectrum().getYMin ())));

        min2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMin ())));
        max2.setText(Integer.toString((int)(nsPanel.getSpectrum().getYMax ())));

        min3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMin ())));
        max3.setText(Integer.toString((int)(ewPanel.getSpectrum().getYMax ())));

        }
      }

    }
    
public void setMaxMinLabelFilter() 
  {   
    if (zPanel.getSpectrum() != null)
      {
      double     div;

      div = CalcFactor (zPanel.getSpectrum().getYMax ());

      if (zPanel.getSpectrum().getYMax () > 100.0)
        {
           max1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMax () / div)));
           min1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMin () / div)));

           min2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMin () / div)));
           max2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMax () / div)));

           min3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMin () / div)));
           max3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMax () / div)));
        }
      else if (zPanel.getSpectrum().getYMax () < 10.0)
        {

          max1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMax () * div)));
          min1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMin () * div)));

          min2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMin () * div)));
          max2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMax () * div)));

          min3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMin () * div)));
          max3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMax () * div)));
         }
      else
        {
        
           max1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMax ())));
           min1_f.setText(Integer.toString((int)(zPanel_f.getSpectrum().getYMin ())));

           min2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMin ())));
           max2_f.setText(Integer.toString((int)(nsPanel_f.getSpectrum().getYMax ())));

           min3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMin ())));
           max3_f.setText(Integer.toString((int)(ewPanel_f.getSpectrum().getYMax ())));

        }
      }

//		scale.repaint();
		}

    public double CalcFactor (double v)
    {
    double    ret = 1.0;
    double    p;

    if (v > 100.0)
      {
      p = v;
      
      while (p > 100.0)
        {
        ret = ret * 10.0;
        p = v / ret;
        }
      }
    else if (v < 10.0)
      {
      p = v;
      
      while (p < 10.0)
        {
        ret = ret * 10.0;
        p = v * ret;
        }
      }
   
    return ret;
    }

    public boolean loadWaveOnly(String waveFileName) {
        return load(waveFileName,null);
    }
    
    public boolean loadWaveOnlyFilter(String waveFileName) {
        resetFilter ();
        return loadFilter(waveFileName,null);
    }
    
	public boolean loadWave(String waveFileName , String windowFileName)
		{
          if( load(waveFileName,windowFileName) ) {
            plot();
            return true;
          }
          return false;
		}


    public boolean load(String waveFileName, String windowFileName)
		{
        reset();
        AbstractFileReader		reader;

        Spectrum		s1 , s2 , s3;
        Windows			ws;

        s1 = new Spectrum();
        s2 = new Spectrum();
        s3 = new Spectrum();

        s1.getSpectraVisualProperties().setLineColor(Color.black);
        s2.getSpectraVisualProperties().setLineColor(Color.red);
        s3.getSpectraVisualProperties().setLineColor(Color.blue);

        ws = new Windows();

        WindowFileReader		wrdr;

        s1.setWindows(ws);
        s2.setWindows(ws);
        s3.setWindows(ws);

        wrdr = new WindowFileReader(windowFileName , waveFileName , s1);

        if (waveFileName.toUpperCase().indexOf("SAF") != -1)	// SAF file
          reader = new SAFFileReader (waveFileName , s1 , s2 , s3);
        else
          reader = new GSEFileReader (waveFileName , s1 , s2 , s3);

        if (reader.read())
        	{
          wrdr.read();
          HorizontalScale scaleX;
          VerticalScale scaleY1 , scaleY2 , scaleY3;
          scaleX = new HorizontalScale(zPanel);
          scaleY1 = new VerticalScale(zPanel);
          scaleY2 = new VerticalScale(nsPanel);
          scaleY3 = new VerticalScale(ewPanel);
          setScale(scaleX, scaleY1, scaleY2, scaleY3);
          zSpectrum = s1;
          nsSpectrum = s2;
          ewSpectrum = s3;
          zPanel.addSpectrum(zSpectrum);
          nsPanel.addSpectrum(nsSpectrum);
          ewPanel.addSpectrum(ewSpectrum);
          jLabel3.setText(zSpectrum.getName ());
          jLabel4.setText(nsSpectrum.getName ());
          jLabel5.setText(ewSpectrum.getName ());
          this.setMaxMinLabel();
          return true;
        	}

        return false;
		}

public boolean loadFilter(String waveFileName, String windowFileName)
		{
        AbstractFileReader		reader;

        Spectrum		s1 , s2 , s3;
        Windows			ws;

        s1 = new Spectrum();
        s2 = new Spectrum();
        s3 = new Spectrum();

		s1.getSpectraVisualProperties().setLineColor(Color.black);
		s2.getSpectraVisualProperties().setLineColor(Color.red);
		s3.getSpectraVisualProperties().setLineColor(Color.blue);

        ws = new Windows();

        WindowFileReader		wrdr;

        s1.setWindows(ws);
        s2.setWindows(ws);
        s3.setWindows(ws);

//        wrdr = new WindowFileReader(windowFileName , waveFileName , s1);

        if (waveFileName.toUpperCase().indexOf("SAF") != -1)	// SAF file
		reader = new SAFFileReader (waveFileName , s1 , s2 , s3);
        else
		reader = new GSEFileReader (waveFileName , s1 , s2 , s3);

        if (reader.read())
        	{
	//		wrdr.read();
			//HorizontalScale scaleX;
			VerticalScale scaleY1 , scaleY2 , scaleY3;
			//scaleX = new HorizontalScale(zPanel_f);
			scaleY1 = new VerticalScale(zPanel_f);
      scaleY2 = new VerticalScale(nsPanel_f);
      scaleY3 = new VerticalScale(ewPanel_f);
			setScaleFilter(zPanel.getScaleX(), scaleY1, scaleY2, scaleY3);
			zSpectrum_f = s1;
			nsSpectrum_f = s2;
			ewSpectrum_f = s3;
			zPanel_f.addSpectrum(zSpectrum_f);
			nsPanel_f.addSpectrum(nsSpectrum_f);
			ewPanel_f.addSpectrum(ewSpectrum_f);
			jLabel3_f.setText(zSpectrum_f.getName ()+"_Fil");
			jLabel4_f.setText(nsSpectrum_f.getName ()+"_Fil");
			jLabel5_f.setText(ewSpectrum_f.getName ()+"_Fil");
      this.setMaxMinLabelFilter();
            return true;
        	}

        return false;
		}

    public void plot() {
        //setLocationall();
        repaint();
    }
    
    public void loadWindowfile(String waveFileName,String windowFileName) {
        WindowFileReader wrdr= new WindowFileReader(windowFileName , waveFileName , zPanel.getSpectrum());
        wrdr.read();
        Windows winds = zPanel.getWindows();
        nsPanel.getSpectrum().setWindows(winds);
        ewPanel.getSpectrum().setWindows(winds);
        if ( FILTER ) 
        {
        zPanel_f.getSpectrum().setWindows(winds);
        nsPanel_f.getSpectrum().setWindows(winds);
        ewPanel_f.getSpectrum().setWindows(winds);          
        }
    }
    
    
    public void setWindows(Windows winds) {
        winds.recalc(zPanel.getSpectrum().getSamplingRate());
        zPanel.getSpectrum().setWindows(winds);
        nsPanel.getSpectrum().setWindows(winds);
        ewPanel.getSpectrum().setWindows(winds);
        if ( FILTER ) 
        {
        zPanel_f.getSpectrum().setWindows(winds);
        nsPanel_f.getSpectrum().setWindows(winds);
        ewPanel_f.getSpectrum().setWindows(winds);
        }
    }
    
    private void setScale(Scale scaleX, Scale scaleY1, Scale scaleY2, Scale scaleY3)
		{
		zPanel.setMargins(false);
		zPanel.setScaleX(scaleX);
		zPanel.setScaleY(scaleY1);
		zPanel.setParentPanel(this);

		nsPanel.setMargins(false);
		nsPanel.setScaleX(scaleX);
		nsPanel.setScaleY(scaleY2);
		nsPanel.setParentPanel(this);

		ewPanel.setMargins(false);
		ewPanel.setScaleX(scaleX);
		ewPanel.setScaleY(scaleY3);
		ewPanel.setParentPanel(this);
		}

  private void setScaleFilter(Scale scaleX, Scale scaleY1, Scale scaleY2, Scale scaleY3)
		{
    zPanel_f.setMargins(false);
		zPanel_f.setScaleX(scaleX);
		zPanel_f.setScaleY(scaleY1);
		zPanel_f.setParentPanel(this);

		nsPanel_f.setMargins(false);
		nsPanel_f.setScaleX(scaleX);
		nsPanel_f.setScaleY(scaleY2);
		nsPanel_f.setParentPanel(this);

		ewPanel_f.setMargins(false);
		ewPanel_f.setScaleX(scaleX);
		ewPanel_f.setScaleY(scaleY3);
		ewPanel_f.setParentPanel(this);
		}

    public void reset ()
	{
	HorizontalScale scaleX;
	VerticalScale scaleY1 , scaleY2 , scaleY3;
	scaleX = new HorizontalScale(zPanel);
	scaleY1 = new VerticalScale(zPanel);
  scaleY2 = new VerticalScale(nsPanel);
  scaleY3 = new VerticalScale(ewPanel);
	setScale(scaleX, scaleY1, scaleY2, scaleY3);
	zPanel.setSelectedWindow(0);
	nsPanel.setSelectedWindow(0);
	ewPanel.setSelectedWindow(0);
	zPanel.addSpectrum(null);
	nsPanel.addSpectrum(null);
	ewPanel.addSpectrum(null);
  setShowFilter(false);
  zPanel_f.setSelectedWindow(0);
	nsPanel_f.setSelectedWindow(0);
	ewPanel_f.setSelectedWindow(0);
	zPanel_f.addSpectrum(null);
	nsPanel_f.addSpectrum(null);
	ewPanel_f.addSpectrum(null);
	repaintNotify();
	}

    public void resetFilter()
      {
      zPanel_f.setSelectedWindow(0);
      nsPanel_f.setSelectedWindow(0);
      ewPanel_f.setSelectedWindow(0);
      zPanel_f.addSpectrum(null);
      nsPanel_f.addSpectrum(null);
      ewPanel_f.addSpectrum(null);
      }

    public void setWindowLength(double val) {
        zPanel.setWindowLength(val);
        nsPanel.setWindowLength(val);
        ewPanel.setWindowLength(val);
        if (FILTER) 
        {
          zPanel_f.setWindowLength(val);
          nsPanel_f.setWindowLength(val);
          ewPanel_f.setWindowLength(val);
        }
    }
    
    public void setSpaceBetweenWindows(double val) {
        zPanel.setSpaceBetweenWindows(val);
        nsPanel.setSpaceBetweenWindows(val);
        ewPanel.setSpaceBetweenWindows(val);
        if ( FILTER ) 
        {
          zPanel_f.setSpaceBetweenWindows(val);
          nsPanel_f.setSpaceBetweenWindows(val);
          ewPanel_f.setSpaceBetweenWindows(val);
        }
    }
    
    public Windows getWindows() {
        return zPanel.getWindows();
    }
    
    public void setFrame(JFrameSesame frame) {
       zPanel.setFrame(frame);
       nsPanel.setFrame(frame);
       ewPanel.setFrame(frame);
       if ( FILTER ) 
       {
        zPanel_f.setFrame(frame);
        nsPanel_f.setFrame(frame);
        ewPanel_f.setFrame(frame);
       }
    }

    public void setDlg (GuiWindow3 dlg3)
    {
    dlg = dlg3;
    }
        
    public SpectrumView getZpanel() {
        return zPanel;
    }
    
    public SpectrumView getNSpanel() {
        return nsPanel;
    }
    
    public SpectrumView getEWpanel() {
        return ewPanel;
    }
    
    public void paintComponent(Graphics g)
		{
		super.paintComponent(g);
    traceWidth = this.getWidth() - 149;
    if( FILTER )
    traceHeight = this.getHeight()/numchan - 20;
    else
    traceHeight = this.getHeight()/numchan - 40;
    setLocationall();
    }

    public void setShowFilter(boolean f) 
    {
      FILTER = f;
      if (FILTER) {
       numchan = 6; 
      zPanel_f.setVisible(true);
	    nsPanel_f.setVisible(true);
	    ewPanel_f.setVisible(true);
      jLabel3_f.setVisible(true);
	    jLabel4_f.setVisible(true);
	    jLabel5_f.setVisible(true);
      o3_f.setVisible(true);
		  min3_f.setVisible(true);
		  min1_f.setVisible(true);
		  o1_f.setVisible(true);
		  max1_f.setVisible(true);
      max2_f.setVisible(true);
      max3_f.setVisible(true);
		  min2_f.setVisible(true);
		  o2_f.setVisible(true);
      } else 
      {
        numchan = 3;
        zPanel_f.setVisible(false);
	     nsPanel_f.setVisible(false);
	     ewPanel_f.setVisible(false);
       jLabel3_f.setVisible(false);
	     jLabel4_f.setVisible(false);
	     jLabel5_f.setVisible(false);
       o3_f.setVisible(false);
	  	 min3_f.setVisible(false);
		   min1_f.setVisible(false);
		   o1_f.setVisible(false);
		   max1_f.setVisible(false);
       max2_f.setVisible(false);
       max3_f.setVisible(false);
		   min2_f.setVisible(false);
		   o2_f.setVisible(false);
      }

    }

    private void setLocationall() {
    zPanel.setSize(traceWidth, traceHeight);
    nsPanel.setBounds(40, 5 + traceHeight,traceWidth, traceHeight);
    ewPanel.setBounds(40, 5 + traceHeight*2,traceWidth, traceHeight);
    jLabel3.setLocation(40 + traceWidth, traceHeight/2 - 5);
    jLabel4.setLocation(40 + traceWidth, traceHeight/2 - 5+traceHeight);
    jLabel5.setLocation(40 + traceWidth, traceHeight/2 - 5+traceHeight*2);
    o1.setLocation(0, traceHeight/2 - 5);
    o2.setLocation(0, traceHeight/2 - 5 + traceHeight);
    o3.setLocation(0, traceHeight/2 - 5 + traceHeight*2);
    min1.setLocation(0, traceHeight - 10);
    min2.setLocation(0, traceHeight*2 - 10);
    min3.setLocation(0, traceHeight*3 - 10);
    max2.setLocation(0, traceHeight);
    max3.setLocation(0, traceHeight*2);
    if (FILTER) {
    o1_f.setLocation(0, traceHeight/2 - 5 + traceHeight*3);
    o2_f.setLocation(0, traceHeight/2 - 5 + traceHeight*4);
    o3_f.setLocation(0, traceHeight/2 - 5 + traceHeight*5);
    max1_f.setLocation(0, traceHeight*3);
    max2_f.setLocation(0, traceHeight*4);
    max3_f.setLocation(0, traceHeight*5);
    min1_f.setLocation(0, traceHeight*4 - 10);
    min2_f.setLocation(0, traceHeight*5 - 10);
    min3_f.setLocation(0, traceHeight*6 - 10);
    zPanel_f.setBounds(40, 5 + traceHeight*3,traceWidth, traceHeight);
    nsPanel_f.setBounds(40, 5 + traceHeight*4,traceWidth, traceHeight);
    ewPanel_f.setBounds(40, 5 + traceHeight*5,traceWidth, traceHeight);
    jLabel3_f.setLocation(40 + traceWidth, traceHeight/2 - 5+traceHeight*3);
    jLabel4_f.setLocation(40 + traceWidth, traceHeight/2 - 5+traceHeight*4);
    jLabel5_f.setLocation(40 + traceWidth, traceHeight/2 - 5+traceHeight*5);
    }
    jLabel6.setLocation(traceWidth/2 - 50, traceHeight*numchan + 40);
    jLabel7.setLocation(10, traceHeight*numchan + 40);
    scale.setLocation(40, 10+traceHeight*numchan);
  }
    private Spectrum	zSpectrum;
    private Spectrum	nsSpectrum;
    private Spectrum 	ewSpectrum;
	private SpectrumView zPanel;
	private SpectrumView nsPanel;
	private SpectrumView ewPanel;
	private JLabel jLabel3;
	private JLabel jLabel4;
	private JLabel jLabel5;
	private JLabel max3;
	private JLabel o3;
	private JLabel min3;
	private JLabel min1;
	private JLabel o1;
	private JLabel max1;
	private JLabel min2;
	private JLabel o2;
	private JLabel max2;
  private JLabel max3_f;
  private JLabel o3_f;
	private JLabel min3_f;
	private JLabel min1_f;
	private JLabel o1_f;
	private JLabel max1_f;
	private JLabel min2_f;
	private JLabel o2_f;
	private JLabel max2_f;
	private JLabel jLabel6;
  private JLabel jLabel7;
	private ScaleLabel scale;

  private GuiWindow3 dlg;
  private SpectrumView zPanel_f;
	private SpectrumView nsPanel_f;
	private SpectrumView ewPanel_f;
  private boolean FILTER;
  private JLabel jLabel3_f;
	private JLabel jLabel4_f;
	private JLabel jLabel5_f;
  private int traceWidth;
  private int traceHeight;
  private int numchan;
  private Spectrum	zSpectrum_f;
  private Spectrum	nsSpectrum_f;
  private Spectrum 	ewSpectrum_f;


	}
