/*
   Item11: rendering, hit-testing, and I/O for image items
*/

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

public class Item11 extends Item10
{
   Image image = null;
   String imageName = "";
   int ix = 0, iy = 0;
   Draw11 parent;

   // ADD IMAGE ITEM CASE TO THE DRAW ROUTINE

   public void draw(Graphics g, Color palette[]) {
      if (image != null)
         draw(g, 0, 0, thicken ? 2*r : r);
      else
         super.draw(g, palette);
   }

   // MUST TAKE CARE OF DROP-SHADOW, BLACK OUTLINE, LINK-ITEM HIGHLIGHTING, AND WHITE HALO.

   public void draw(Graphics g, int x, int y, int r) {
      if (image != null) {
         boolean isShadow = g.getColor() == shadowColor;
         int xx = x0 + ix + x - 50;
         int yy = y0 + iy + y - 50;
         int x1 = xx - (r+1)/2;
         int y1 = yy - (r+1)/2;
         int xd = 100 + r + (r%2);
         int yd = 100 + r + (r%2);
         if (isShadow) {
            int b = thicken ? r / 4 : 0;
            if (highlight)
               g.fillRoundRect(x1 - b, y1 - b, xd + 2*b, yd + 2*b, 2*r/3, 2*r/3);
            else
               g.fillRect(x1, y1, xd, yd);
         }
         else if (highlight) {
            int b = thicken ? r / 2 : r;
            g.setColor(Color.white);
            g.fillRoundRect(x1 - b, y1 - b, xd + 2*b, yd + 2*b, 2*b, 2*b);
            g.setColor(Color.black);
            g.fillRect(x1, y1, xd, yd);
            g.drawImage(image, xx + 25, yy + 25, 50, 50, parent);
         }
         else {
            g.setColor(Color.black);
            g.fillRect(x1, y1, xd, yd);
            g.drawImage(image, xx, yy, parent);
         }
      }
      else
         super.draw(g, x, y, r);
   }

   // HIT-TESTING FOR AN IMAGE ITEM.

   public boolean contains(int x, int y) {
      if (image != null)
         return x >= x0 + ix - 50 && x < x0 + ix + 50 && y >= y0 + iy - 50 && y < y0 + iy + 50;
      else
         return super.contains(x, y);
   }

   // EXTEND FILE READING AND WRITING TO HANDLE THE FIELDS OF AN IMAGE ITEM.

   public String fieldsToString() {
      return super.fieldsToString()
           + "   image " + "\"" + imageName + "\"\n"
           + "   ix " + ix + "\n"
           + "   iy " + iy + "\n"
           ;
   }   

   public void parseField() {
      if (token.equals("image") && (imageName = parseStr()).length() > 0)
         image = parent.readImage(imageName);
      else if (token.equals("ix")) ix = parseInt();
      else if (token.equals("iy")) iy = parseInt();
      else
         super.parseField();
   }

   public void parse(StringTokenizer st, Item item[]) {
      super.parse(st, item);
      System.err.println("imageName = |" + imageName + "|");
   }
}


