package graphics.carl;

// This application demonstrates graphics, lookup animation, timer,
// and interactive triggering of display events.
//  doug Lyon, 4/12/01


//package doug;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestDisplay extends javax.swing.JFrame {
  private javax.swing.JPanel panControls;
  private javax.swing.JPanel panDisplay;

  private javax.swing.JSlider sldTimerSet;
  private javax.swing.JSlider sld_nSet;
  private int tdelta;  //timer interval
//  Container c;
  int iOffset = 0;  // offset into index of color table
  ColorArray myLUT; // instance of color table class

  // Geometric array parameters

  boolean timerON = false;

  // Carl use paintComponent as in chapter 13!!!
  /* Note: JButtons and JLabels are flakey, don't show up on initialization!
  JButton btnCycle = new JButton("Cycle");
  JButton btnTimer = new JButton(" Start Timer");
  JLabel lblBlank = new JLabel( "lblBlank");
  JButton btnBlank = new JButton("btnBlank");
  */

  // default constructor
  public TestDisplay() {
    super("graphics.carl.TestDisplay");
    java.awt.Container c = getContentPane();

//------------------------------------------
// set up control panel and attach to JFrame

    panControls = new javax.swing.JPanel();
    panControls.setLayout(new java.awt.GridLayout(2, 2));
/*
        panControls.add(
            new graphics.carl.CommandButton("Cycle"){
                public void gui.run() {
                    cycleColor();
                }
            }
        );
*/
/*  panControls.add(
            new graphics.carl.ToggleCommandButton("Start Timer","Stop Timer"){
                public void gui.run() {
                    toggleTimer();
                }
            }
        );
    */
    sldTimerSet = new javax.swing.JSlider(SwingConstants.HORIZONTAL, 100, 1000, 500);
    sldTimerSet.createStandardLabels(100);
    sldTimerSet.setMajorTickSpacing(100);
    sldTimerSet.setPaintLabels(true);
    sldTimerSet.setPaintTicks(true);
    sldTimerSet.setInverted(true);
    sldTimerSet.setPaintTrack(true);


    sldTimerSet.addChangeListener(
        new javax.swing.event.ChangeListener() {
          public void stateChanged(ChangeEvent ce) {
            tdelta = sldTimerSet.getValue();
            myTimer.setDelay(tdelta);

          }
        }
    );

    panControls.add(sldTimerSet);

    c.add(panControls, java.awt.BorderLayout.NORTH);

// Look! you can add a panel to a panel!!
    javax.swing.JPanel pnlTest = new javax.swing.JPanel();
    pnlTest.add(new javax.swing.JLabel("I'm here"));
    c.add(pnlTest, java.awt.BorderLayout.SOUTH);


//------------------------------------------
// set up display panel and attach to JFrame

    panDisplay = new javax.swing.JPanel() {
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        System.out.println("I am paintComponent");
/*
                    for ( int i = 0 ; i < n ; i++){
                        int colorIndex = iOffset+i;
                        g.setColor(myLUT.getcolorArray()[colorIndex%myLUT.getnumberOfColors()]);
                        x = xi[i];
                        y = yi[i];
                        g.fillOval( x, y, ovalRad, ovalRad);
                        g.setColor(myLUT.getcolorArray()[(colorIndex+n/2)%myLUT.getnumberOfColors()]);
                        g.drawOval( x, y, ovalRad, ovalRad);
                    }
*/
      } // end paintComponent()

    };

//      panDisplay.setOpaque( false );

    c.add(panDisplay, java.awt.BorderLayout.CENTER);

    //  setGeometry(n);

//------------------------------------

    setSize(600, 600);
    show();

//---------------------------

  }  // end constructor

  javax.swing.Timer myTimer = new javax.swing.Timer(1000,
                                                    new ActionListener() {
                                                      public void actionPerformed(ActionEvent e) {
                                                        cycleColor();
                                                      }
                                                    }
  );


// ------------------------------

  public void cycleColor() {
    iOffset++;
    panDisplay.repaint();
  }

  public void toggleTimer() {
    if (timerON) {
//                  myLUT.shuffleColors();
      myTimer.stop();
      timerON = false;
      return;
    }
    timerON = true;
    myTimer.start();
    panDisplay.repaint();
  }


  public static void main(String args[]) {
    TestDisplay td = new TestDisplay();
//      graphics.carl.PointArray logpts = new graphics.carl.PointArray(4, 16, Point2D.Float(100f, 100f), 50f);
    ColorArray colors = new ColorArray(4, 16, true);

    System.out.println("JRingsJFrame main");
  } // end main

}