/* @(#)Methods.java   17 September 2005 */

/* 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;

/** The sample starter class for Java Power Framework. */
public class Sample1 extends JPF 
{
    
    public static void main(String[] args) { 
        new Sample1().window.installSimpleMouseActions(true);
    }
    
    
    public void PrintThing() {
        console.out.println("Thing");
    }
    
    
    public void DemandSumInConsole() {
        double sum = 0;
        
        console.out.println("Enter summands.  Enter 0 to Stop.\n");
        
        while (true) {
            double summand = console.in.demandDouble("Enter summand:");
            
            if (summand != 0) {
                sum += summand;
                console.out.println("Sum: " + sum + "\n");
            }
            else {
                console.out.println("\nDone\n");
                break;
            }
        }
    }
    
    
    public void RequestSumInConsole() {
        double sum = 0;
        
        console.out.println("Enter summands.  Press Return to Stop.\n");
        
        while (true) {
            try {
                sum += console.in.requestDouble("Enter summand:");
                console.out.println("Sum: " + sum + "\n");
            }
            catch (CancelledException ex) {
                console.out.println("\nDone\n");
                break;
            }
        }
    }
    
    
    public double EvalMathExpression(double x) { return x; }
    
    
    public void RectangleAndCircle() {
        window.clearSequence();
        
        XRect r = new XRect(100,50,200,100);
        window.addPaintable(r);
        
        XCircle s = new XCircle(200,300,50);
        window.addPaintable(s);
        
        window.repaint();
    }
    
    
    public void FilledRectangleAndCircle() {
        window.clearSequence();
        
        XRect r = new XRect(100,50,200,100);
        ShapePaintable rp =
            new ShapePaintable(r, PaintMode.FILL, Colors.green);
        window.addPaintable(rp);
        
        XCircle s = new XCircle(200,300,50);
        ShapePaintable sp =
            new ShapePaintable(s, PaintMode.FILL_DRAW, Colors.violet);
        window.addPaintable(sp);
        
        window.repaint();
    }
    
    
    public void ShowRandomCards() {
        // obtain images of the JFitz card deck
        String cardsURL  =
            "http://www.ccs.neu.edu/jpt/images/jfitz_cards/";
        String cardsList =
            "imagelist.txt";
        
        ImagePaintableLite[] cards
            = WebImageTools.readImagesAsPaintableLite
                (cardsURL, cardsList);
        
        // obtain the length of the cards array
        int N = cards.length;
        
        // exit if the cards could not be read
        if (N == 0)
            return;
        
        // obtain sizes
        int w = window.getBufferWidth();
        int h = window.getBufferHeight();
        
        int w0 = cards[0].getImageWidth();
        int h0 = cards[0].getImageHeight();
        
        int wmin = 5;
        int wmax = w - w0 - wmin;
        
        int hmin = 5;
        int hmax = h - h0 - hmin;
        
        // obtain a permutation for randomizing the cards
        int[] permutation = ProbStatTools.randomPermutation(N);
        
        window.clearSequence();
        
        for (int i = 0; i < N; i++) {
            // pick a random card using the permutation
            int k = permutation[i];
            Paintable card = cards[k];
            
            // compute a random position for this card
            int x = MathUtilities.randomInt(wmin, wmax);
            int y = MathUtilities.randomInt(hmin, hmax);
            
            // move this card
            card.move(x, y);
            
            // append this card to the window sequence
            window.appendPaintable(card);
        }
        
        window.repaint();
    }
}
