/* @(#)TestLayeredComponent.java   22 April 2007 */

/* Useful imports */

import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.regex.*;
import java.text.ParseException;


public class TestLayeredComponent
    extends DisplayPanel
{
    int gap = 20;
    
    // the background
    
    ImagePaintable largeimage =
        new ImagePaintable("./images/NewtonTree.jpg");
    
    Shape clip = new XCircle(100, 100, 100);
    
    ClippingWrapper background =
        new ClippingWrapper(largeimage, clip);
    
    // the paint to fill in behind the background
    
    Paint paint = // Colors.yellow;
        new GradientPaint(0, 0, Colors.yellow, 100, 100, Colors.green, true);
    
    // the elements of the layered panel
    
    TextFieldView tfv =
        new TextFieldView("Sample text", 200);
    
    Shape shape = new XCircle(0, 0, 50);
    
    ImagePaintable image =
        new ImagePaintable("./images/Apples1.jpg");
    
    // slider for opacity control
    
    SimpleAction slidingAction =
        new SimpleAction() {
            public void perform() {
                slidingMethod();
            }
    };
    
    int scale = 100;
    int start = 50;
    
    SliderView slider =
        new SliderView(HORIZONTAL, 0, scale, start);
    
    // radio panel for centered control
    
    SimpleAction centeredAction =
        new SimpleAction() {
            public void perform() { centeredMethod(); }
    };
    
    TableLayout layout =
        new TableLayout(1, 2, gap, gap);
    
    String[] centeredStuff = { "Yes", "No" };
    
    RadioPanel centeredPanel =
        new RadioPanel(centeredStuff, centeredAction, layout);
    
    // the table panel to layer as a component
    
    Object[][] layeredStuff =
        { { "Text box",           tfv           },
          { "Shape",              shape         },
          { "Image",              image         }
        };
    
    TablePanel layeredPanel =
        new TablePanel(layeredStuff, gap, gap, CENTER);
    
    // the layered component
    
    float opacity = (float) start / (float) scale;
    
    LayeredComponent layered =
        new LayeredComponent(layeredPanel, background, paint, opacity, true);
    
    // the control panel
    
    Object[][] controlStuff =
        { { "Background Opacity", slider        },
          { "Center Background?", centeredPanel }
        };
    
    TablePanel controlPanel =
        new TablePanel(controlStuff, gap, gap, CENTER);
    
    // the main panel
    
    Object[] mainStuff = { layered, controlPanel };
    
    VTable mainPanel =
        new VTable(mainStuff, gap, gap, CENTER);
    
    // constructor
    
    public TestLayeredComponent() {
        add(mainPanel);
        
        slider.addSlidingAction(slidingAction);
        slider.addReleaseAction(slidingAction);
    }
    
    
    void slidingMethod() {
        int v = slider.getValue();
        
        float f = v / 100.0f;
        
        layered.setOpacity(f);
    }
    
    
    void centeredMethod() {
        boolean centered = centeredPanel.getSelectedIndex() == 0;
        
        layered.setCentered(centered);
    }
    
    
    public static void main(String[] args) {
        new TestLayeredComponent().frame();
    }
}

