import java.awt.*;
import java.io.PrintStream;

public class keyboard extends Panel implements tool
{
    asciiJam aj;
    int ox;
    int oy;
	int keyx;
	int keyy;
    int zoom;
	int ozoom;
	int fontMode = 0;
	Choice ch = null;

    public void show(){
        setFont(env.dialogFont);
        super.show();
    }

	public boolean mouseUp(int x, int y){ return true; }
    public keyboard(asciiJam aj){
        this.aj = aj;
        this.resize(123,200);
        this.setLayout(null);
        this.setBackground(Color.black);
        Panel inner = new Panel();
        inner.setLayout(new GridLayout(5,1,0,3));
        inner.resize(size().width-2,size().height-2);
        inner.move(1,1);
        zoom = 1;
        inner.setBackground(Color.lightGray);
        inner.add(new Label(" Text Prefs"));
        inner.add(new Label(" Font:"));

		ch = new Choice();
		ch.add("Default");
   ch.add("3-d");
  ch.add("3x5");
  ch.add("4max");
  ch.add("5lineoblique");
  ch.add("Acrobatic");
  ch.add("Alligator");
  ch.add("Alligator2");
  ch.add("Alphabet");
  ch.add("Arrows");
  ch.add("Avatar");
  ch.add("Banner");
  ch.add("Banner3-D");
  ch.add("Banner3");
  ch.add("Banner4");
  ch.add("Barbwire");
  ch.add("Basic");
  ch.add("Bell");
  ch.add("Big");
  ch.add("Bigchief");
  ch.add("Bigfig");
  ch.add("Block");
  ch.add("Bolger");
  ch.add("Bright");
  ch.add("Bubble");
  ch.add("Bulbhead");
  ch.add("Calgphy2");
  ch.add("Caligraphy");
  ch.add("Catwalk");
  ch.add("Chunky");
  ch.add("Coinstak");
  ch.add("Colossal");
  ch.add("Computer");
  ch.add("Contessa");
  ch.add("Contrast");
  ch.add("Cosmic");
  ch.add("Crawford");
  ch.add("Cyberlarge");
  ch.add("Cybermedium");
  ch.add("Cybersmall");
  ch.add("Diamond");
  ch.add("Digital");
  ch.add("Doh");
  ch.add("Doom");
  ch.add("Dotmatrix");
  ch.add("Double");
  ch.add("Drpepper");
  ch.add("Eftifont");
  ch.add("Eftipiti");
  ch.add("Eftirobot");
  ch.add("Eftitalic");
  ch.add("Eftiwall");
  ch.add("Epic");
  ch.add("Fender");
  ch.add("Fourtops");
  ch.add("Fraktur");
  ch.add("Fuzzy");
  ch.add("Goofy");
  ch.add("Gothic");
  ch.add("Gradient");
  ch.add("Graffiti");
  ch.add("Hollywood");
  ch.add("Invita");
  ch.add("Isometric1");
  ch.add("Isometric2");
  ch.add("Isometric3");
  ch.add("Isometric4");
  ch.add("Italic");
  ch.add("Jazmine");
  ch.add("Katakana");
  ch.add("Kban");
  ch.add("Keyboard");
  ch.add("Larry3d");
  ch.add("Lcd");
  ch.add("Lean");
  ch.add("Linux");
  ch.add("Lockergnome");
  ch.add("Madrid");
  ch.add("Marquee");
  ch.add("Mike");
  ch.add("Mini");
  ch.add("Mirror");
  ch.add("Morse");
  ch.add("Moscow");
  ch.add("NancyjFancy");
  ch.add("NancyjImprovd");
  ch.add("NancyjUndrlin");
  ch.add("Nancyj");
  ch.add("Nipples");
  ch.add("Ntgreek");
  ch.add("O8");
  ch.add("Ogre");
  ch.add("Oldbanner");
  ch.add("Os2");
  ch.add("Pawp");
  ch.add("Peaks");
  ch.add("Pebbles");
  ch.add("Pepper");
  ch.add("Poison");
  ch.add("Puffy");
  ch.add("Pyramid");
  ch.add("Rectangles");
  ch.add("Rev");
  ch.add("Roman");
  ch.add("Rounded");
  ch.add("Rowancap");
  ch.add("Rozzo");
  ch.add("S-relief");
  ch.add("Sblood");
  ch.add("Script");
  ch.add("Serifcap");
  ch.add("Shadow");
  ch.add("Shimrod");
  ch.add("Short");
  ch.add("Slant");
  ch.add("Slide");
  ch.add("Slscript");
  ch.add("Small");
  ch.add("Smisome1");
  ch.add("Smkeyboard");
  ch.add("Smpoison");
  ch.add("Smscript");
  ch.add("Smshadow");
  ch.add("Smslant");
  ch.add("Speed");
  ch.add("Stacey");
  ch.add("Stampatello");
  ch.add("Standard");
  ch.add("Starwars");
  ch.add("Stellar");
  ch.add("Stop");
  ch.add("Straight");
  ch.add("Tanja");
  ch.add("Thick");
  ch.add("Thin");
  ch.add("Threepoint");
  ch.add("Ticks");
  ch.add("Ticksslant");
  ch.add("Tiles");
  ch.add("Tinker-toy");
  ch.add("Tombstone");
  ch.add("Trek");
  ch.add("Tubular");
  ch.add("Twopoint");
  ch.add("Univers");
  ch.add("Usaflag");
  ch.add("Weird");
      ch.resize(20,100);
		inner.add(ch);

        inner.add(new Panel());
        Panel p = new Panel();
        p.setFont(new Font("Helvetica",Font.PLAIN,8));
        p.setLayout(new FlowLayout(1,0,0));
        p.add(new Button("Reset"));
        inner.add(p);
        add(inner);
    }

    public boolean mouseDown(int x, int y, int z, asciiJam ajam){
        zoom = z;
        aj = ajam;
		keyx = x;
		x = x-aj.mapF.getX();
		keyy = y;
		y = y-aj.mapF.getY();
		//keyx = x = x-aj.mapF.getX();
		//keyy = y = y-aj.mapF.getY();
		Graphics g = aj.ta.getGraphics();
		if(g!=null){
		  if(ozoom==zoom){
		  	g.setColor(Color.darkGray);
		  	g.drawRect(ox,oy,(zoom<<3),(zoom<<4));
		  }
          g.setColor(Color.gray);
          g.drawRect(x,y,(zoom<<3),(zoom<<4));
		  g.dispose();
		}
        ox = x;
        oy = y;
		ozoom = zoom;
	    System.arraycopy(aj.ta.text,0,ajam.tmptxt,0,ajam.tmptxt.length);
		return true;
    }

    public void identify(int x, int y, int z, asciiJam ajam){}

    public boolean mouseDrag(int x, int y){ 
		keyx = x;
		keyy = y;
		int offx = aj.mapF.getX();
		int offy = aj.mapF.getY();
		x -= offx;
		y -= offy;
		//keyx = x;
		//keyy = y;
		Graphics g = aj.ta.getGraphics();
		if(g!=null){
		  g.setColor(Color.darkGray);
		  g.drawRect(ox,oy,(zoom<<3),(zoom<<4));
          g.setColor(Color.gray);
          g.drawRect(x,y,(zoom<<3),(zoom<<4));
		  g.dispose();
		}
        ox = x;
        oy = y;
		return true; 
	}

    public void setchar(int key, int pos, int zoom, asciiJam asciijam)
    {
		int z3 = zoom<<3;
		int z4 = zoom<<4;

		if(key==8){ //backspace
                if(keyx>0){
                    keyx-=z3;
                }else{
                   if(keyy>0){
                      keyy-=z4;
                      keyx=env.width-z3;
                   }else return;
                }
                key = ' ';
        }else if(key==10){ //enter
                if(keyy<(env.height-z4)){
                    keyy+=z4;
                    keyx = 0;
                }else return;
                mouseDown(keyx,keyy,zoom,aj);
                ox=keyx;
                oy=keyy;
                return;
        }else if(key==32){ //space
            key = ' ';
            ox=keyx;
            oy=keyy;
            keyx+=(zoom<<3);
            if(keyx==env.width){
                keyx = 0;
                keyy+=(zoom<<4);
            }
        }else if(key==1004){ //up
                if(keyy>0){
                    keyy-=z4;
                }else return;
                mouseDown(keyx,keyy,zoom,aj);
                oy=keyy;
                return;
        }else if(key==1005){ //down
                if(keyy<(env.height-z4)){
                    keyy+=z4;
                }else return;
                mouseDown(keyx,keyy,zoom,aj);
                oy=keyy;
                return;
        }else if(key==1006){ //left
                if(keyx>0){
                    keyx-=z3;
                }else return;
                mouseDown(keyx,keyy,zoom,aj);
                ox=keyx;
                return;
        }else if(key==1007){ //right
                if(keyx<(env.width-z3)){
                    keyx+=z3;
                }else return;
                mouseDown(keyx,keyy,zoom,aj);
                ox=keyx;
                return;
        }else{
		    pos++;
            //toolList[aj.tool].setchar((char)e.key,pos,zoom,aj);
            ox=keyx;
            oy=keyy;
            if(fontMode==1){
				  keyx+=((zoom<<3)*(aj.fl.charWidth[key]));
		    }else keyx+=((zoom<<3));

            if(keyx>=env.width){
                keyx = 0;
				if(fontMode==1) keyy+=((zoom<<4)*(aj.fl.charWidth[key]));
				else keyy+=(zoom<<4);
            }
		}

        Graphics g = asciijam.img.getGraphics();
        String s = (new Character((char)key)).toString();
		ox -= aj.mapF.getX();
		oy -= aj.mapF.getY();
		//int offX = aj.mapF.getX();
		//int offY = aj.mapF.getY();
		if(g!=null){
			if(fontMode==1) aj.fl.drawString(s,ox,oy,g);
			else{
				g.setFont(env.font[zoom]);
				aj.ta.setchar((char)key,ox,oy,aj.curColorIndex, aj.curCol, g,true);
			}
		} else System.out.println("problem with graphicsZ");
        mouseDown(keyx,keyy,zoom,aj);
    }

	public boolean handleEvent(Event e){
		if(e.target instanceof Choice){
			if(e.arg!=null){
				System.out.println(e.arg);
				if(((String)e.arg).indexOf("Default")>=0){
					fontMode=0;
					aj.ta.requestFocus();
					System.out.println("Default");
				}
				else{ //if(((String)e.arg).indexOf("Avatar")>=0){
					fontMode=1;
					aj.fl = new figLoader((String)e.arg+".zip",aj);
					aj.ta.requestFocus();
				}
			}
		}
		else if(e.target instanceof Button){
			if(e.id==1001){
				fontMode = 0;
				aj.ta.requestFocus();
				ch.select(0);
				 System.out.println(e);
			}
		}
		return false;
	}

}
