import java.awt.*;
import java.util.*;

public class tabbedpane extends Panel {
Canvas buttons;
Vector names;
CardLayout cl;
int n;
Panel main;
int hot=0;
Polygon[] pList = null;
Color ltGray = new Color(225,225,225);
asciiJam aj = null;

   public tabbedpane(asciiJam aj){
        this.aj = aj;
   		setBackground(Color.darkGray);
   	    setFont(env.dialogFont);
   		n=0;
   		buttons = new Canvas();	
		buttons.reshape(0,0,this.size().width,15);
		names = new Vector();
 		add(buttons);
		setLayout(null);
		main = new Panel();
		main.setLayout(cl=new CardLayout());
		//main.setBackground(Color.lightGray);
		main.setBackground(Color.gray);
		add(main);
   }
	
   public void show(){
        setFont(env.dialogFont);
        super.show();
    }

   public Panel addTab(String s){
		Panel p = new Panel();
		main.reshape(0,16,this.size().width,this.size().height-16);
		(main.getLayout()).addLayoutComponent(s,(Component)p);
		main.add(s,(Component)p);
		p.reshape(0,0,this.size().width,this.size().height-16);
		//System.out.println(this.size().width+" "+(this.size().height-16));
		//names.add(n,s);
		names.addElement(s);
		n++;
        pList = new Polygon[n];
		repaint();
		return p;
   }

   public void paint(Graphics g){
      int width = this.size().width;
		FontMetrics fm = g.getFontMetrics();
		int[] widths = new int[n];
		for(int i=0;i<n;i++){
				//widths[i] = fm.stringWidth(((String)names.get(i)))+10;	
				widths[i] = fm.stringWidth(((String)names.elementAt(i)))+10;	
		}
        int xOffset = 1;
		for(int i=0;i<n;i++){
			if(i==hot) g.setColor(ltGray);
            else g.setColor(Color.gray);
			g.fill3DRect(xOffset,0,widths[i]+5,15,true);
			g.drawLine(xOffset,14,xOffset+widths[i]+5,14);
			if(i==hot){ 
			   g.setColor(Color.lightGray);
			   g.drawLine(xOffset,0,xOffset,14);
			   g.setColor(Color.gray);
			   g.drawLine(xOffset,0,xOffset,0);
			   g.setColor(Color.gray);
			   g.drawLine(xOffset+widths[i]+4,0,xOffset+widths[i]+4,0);
			}
			Polygon p = new Polygon();
		    p.addPoint(xOffset+1,0);
		    p.addPoint(xOffset+1,15);
		    p.addPoint(xOffset+widths[i]+4,15);
		    p.addPoint(xOffset+widths[i]+4,0);
			pList[i] = p;
            if(i==hot) g.setColor(Color.black);
            else       g.setColor(ltGray);
			//g.drawString((String)names.get(i),xOffset+5,12);
			g.drawString((String)names.elementAt(i),xOffset+5,12);
			xOffset += (widths[i]+5);
		}
		xOffset = 1;
 		for(int i=0;i<n;i++){
            if(i==hot){
				 g.setColor(ltGray);
				 if(i>0) {
				 	Polygon p = new Polygon();
					p.addPoint(xOffset-5,15);
					p.addPoint(xOffset-2,13);
					p.addPoint(1+xOffset,10);
					p.addPoint(1+xOffset,1);
					p.addPoint(xOffset+widths[i]+5-1,1);
					if(i==(n-1)){
					  p.addPoint(xOffset+widths[i]+4,14);
					}
					else{
					  p.addPoint(xOffset+widths[i]+5-1,10);
					  p.addPoint(xOffset+widths[i]+7,13);
					  p.addPoint(xOffset+widths[i]+9,15);
					}
					g.fillPolygon(p);
					pList[i] = p;
				 }else{
				 	Polygon p = new Polygon();
					p.addPoint(xOffset+1,15);
					p.addPoint(xOffset+1,1);
					p.addPoint(xOffset+widths[i]+5-1,1);
					p.addPoint(xOffset+widths[i]+5-1,10);
					p.addPoint(xOffset+widths[i]+7,13);
					p.addPoint(xOffset+widths[i]+9,15);
					g.fillPolygon(p);
					pList[i] = p;
				 }
                 g.setColor(Color.black);
			     //g.drawString((String)names.get(i),xOffset+5,12);
			     g.drawString((String)names.elementAt(i),xOffset+5,12);
            }
			xOffset += (widths[i]+5);
        }
   }
   
   public void showTab(String s){
		((CardLayout)(main.getLayout())).show(main, s);
/*		for(int i=0;i<names.length();i++){
			if(names.get(i).equals(s)){ mode=i; break; }
		}*/
   }

   public boolean handleEvent(Event e){
		if(e.id == Event.MOUSE_DOWN){
			for(int i=0;i<pList.length;i++){
				if(pList[i].contains(e.x,e.y)){
					hot = i;
		            //((CardLayout)(main.getLayout())).show(main, (String)names.get(i));
		            ((CardLayout)(main.getLayout())).show(main, (String)names.elementAt(i));
   	                setFont(env.dialogFont);
				    repaint();
					break;
				}
			}
		}
		else if(e.id == Event.MOUSE_ENTER || e.id == Event.MOUSE_MOVE){
			//if(e.id == Event.MOUSE_ENTER){
				/*if(e.target instanceof Choice){
                  env.setCursor(aj.tool,aj);
                }*/
            //}
			if(e.y<15) env.setCursor(env.DEFAULT_CURSOR,aj);
		}
		else if(e.id == Event.MOUSE_EXIT){
			if(e.x>120) env.setCursor(aj.tool,aj);
		}
		else if(e.target instanceof Checkbox){
			if(e.id==1001){
				if(((Checkbox)e.target).getState()){
					 //System.out.println("connected = false");
					 aj.connected = false;
					 //try{  aj.sock.close();
					 //}catch(Exception ee){ ee.printStackTrace(); }
					 //byte msg[] = {(byte)'D',(byte)'e',(byte)'p',(byte)'a',(byte)'r',(byte)'t'};
					 String msg = "Depart";
					 //aj.send(new ajData(env.DEPARTURE,0,"Depart",0));
					 //aj.send(new ajData(env.DEPARTURE,0,msg,0));
					 aj.send(new D(env.DEPARTURE,0,msg,0));
                }
				else{
					System.out.println("starting");
					 aj.start();
                }
			}
		}
		//else System.out.println(e.target);
		return false;
   }

}
