home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / ToolTipPanel.java < prev    next >
Text File  |  1998-05-08  |  11KB  |  295 lines

  1. /*
  2.  * @(#)ToolTipPanel.java    1.14 98/02/05
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21. import com.sun.java.swing.*;
  22. import com.sun.java.accessibility.*;
  23.  
  24. import java.awt.*;
  25. import java.lang.*;
  26.  
  27. /*
  28.  * @version 1.14 02/05/98
  29.  * @author Jeff Dinkins
  30.  * @author Peter Korn (accessibility support)
  31.  */
  32. public class ToolTipPanel extends JPanel {
  33.     SwingSet swing;
  34.  
  35.     public ToolTipPanel(SwingSet swing) {
  36.     this.swing = swing;
  37.     loadCow();
  38.     }
  39.  
  40.     public void loadCow() {
  41.         setBackground(Color.white);
  42.     setBorder(swing.etchedBorder10);
  43.         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  44.     Cow cow = new Cow();
  45.     cow.setToolTipText("Cow.");
  46.     cow.getAccessibleContext().setAccessibleName("Cow image");
  47.     add(Box.createRigidArea(new Dimension(1, 40)));
  48.     add(cow);
  49.     }
  50.  
  51.     class Cow extends JLabel {
  52.     Polygon cowgon = new Polygon();
  53.  
  54.         public Cow() {
  55.          super(SwingSet.sharedInstance().loadImageIcon("images/cow.gif","Black and white cow"));
  56.         setAlignmentX(CENTER_ALIGNMENT);
  57.         cowgon.addPoint(3,20);    cowgon.addPoint(44,4);
  58.         cowgon.addPoint(79,15);   cowgon.addPoint(130,11);
  59.         cowgon.addPoint(252,5);   cowgon.addPoint(181,17);
  60.         cowgon.addPoint(301,45);  cowgon.addPoint(292,214);
  61.         cowgon.addPoint(269,209); cowgon.addPoint(266,142);
  62.         cowgon.addPoint(250,161); cowgon.addPoint(235,218);
  63.         cowgon.addPoint(203,206); cowgon.addPoint(215,137);
  64.         cowgon.addPoint(195,142); cowgon.addPoint(143,132);
  65.         cowgon.addPoint(133,189); cowgon.addPoint(160,200);
  66.         cowgon.addPoint(97,196);  cowgon.addPoint(107,182);
  67.         cowgon.addPoint(118,185); cowgon.addPoint(110,144);
  68.         cowgon.addPoint(59,77);   cowgon.addPoint(30,82);
  69.         cowgon.addPoint(30,35);   cowgon.addPoint(15,36);
  70.         }
  71.  
  72.     boolean moo = false;
  73.     boolean milk = false;
  74.     boolean tail = false;
  75.     public boolean contains(int x, int y) {
  76.         if((x > 30) && (x < 60) && (y > 60) && (y < 85)) {
  77.             if(!moo) {
  78.                setToolTipText("Mooooo");
  79.            moo = true;
  80.            milk = false;
  81.            tail = false;
  82.         }
  83.         } else if((x > 150) && (x < 230) && (y > 90) && (y < 145)) {
  84.             if(!milk) {
  85.                setToolTipText(" Got  Milk? ");
  86.            milk = true;
  87.            moo = false;
  88.            tail = false;
  89.         }
  90.         } else if((x > 280) && (x < 300) && (y > 20) && (y < 175)) {
  91.             if(!tail) {
  92.                setToolTipText("Tail.");
  93.            tail = true;
  94.            moo = false;
  95.            milk = false;
  96.         }
  97.         } else if(moo || milk || tail) {
  98.             setToolTipText("Cow.");
  99.         moo = false;
  100.         tail = false;
  101.         milk = false;
  102.         }
  103.         if(cowgon.contains(new Point(x, y))) {
  104.         return true;
  105.         } else {
  106.         return false;
  107.         }
  108.     }
  109.     }
  110.  
  111.     public void itsEaster(boolean b) {
  112.     if(!b) {
  113.        removeAll();
  114.        loadCow();
  115.     } else {
  116.        removeAll();
  117.        setBackground(Color.black);
  118.        setLayout(new BorderLayout());
  119.        Easter easter = new Easter();
  120.        add(easter, BorderLayout.CENTER);
  121.        invalidate();
  122.        validate();
  123.        easter.go();
  124.     }
  125.     }
  126.  
  127.     class Easter extends JComponent {
  128.     AnimationThread animator;
  129.         public boolean running = false;
  130.  
  131.     private ImageIcon amy     = SwingSet.sharedInstance().loadImageIcon("images/people/amy.gif", "Amy Fowler");
  132.     private ImageIcon jag     = SwingSet.sharedInstance().loadImageIcon("images/people/jag.gif", "James Gosling");
  133.     private ImageIcon jeff    = SwingSet.sharedInstance().loadImageIcon("images/people/jeff.gif", "Jeff Dinkins");
  134.     private ImageIcon tim     = SwingSet.sharedInstance().loadImageIcon("images/people/tim.gif", "Tim Prinzing");
  135.     private ImageIcon tom     = SwingSet.sharedInstance().loadImageIcon("images/people/tom.gif", "Tom Ball");
  136.         private ImageIcon rick    = SwingSet.sharedInstance().loadImageIcon("images/people/rick.gif", "Rick Levenson");
  137.         private ImageIcon hans1   = SwingSet.sharedInstance().loadImageIcon("images/people/mathew.gif", "Mathew Muller");
  138.         private ImageIcon hans2   = SwingSet.sharedInstance().loadImageIcon("images/people/pl.gif", "Project Lead");
  139.         private ImageIcon ges     = SwingSet.sharedInstance().loadImageIcon("images/people/ges.gif", "Georges Saab");
  140.         private ImageIcon phil    = SwingSet.sharedInstance().loadImageIcon("images/people/phil.gif", "Phillip Milne");
  141.         private ImageIcon arnaud  = SwingSet.sharedInstance().loadImageIcon("images/people/nathan.gif", "Arnaud Webber");        
  142.         private ImageIcon rich    = SwingSet.sharedInstance().loadImageIcon("images/people/rich.gif", "Rich Schiavi");
  143.  
  144.     int tmpScale;
  145.     
  146.     private double x1 = 0;
  147.     private double y1 = 0;
  148.  
  149.     private double x2 = 0;
  150.     private double y2 = 0;
  151.     
  152.     private int xAmy = 0;
  153.     private int xJag = 0;
  154.     private int xJeff = 0;
  155.     private int xTim = 0;
  156.     private int xTom = 0;
  157.     private int xRick = 0;
  158.     private int xHans = 0;
  159.         private int xGes = 0;
  160.         private int xPhil = 0;
  161.         private int xArnaud = 0;
  162.         private int xRich = 0;
  163.     
  164.     private int yAmy = 0;
  165.     private int yJag = 0;
  166.     private int yJeff = 0;
  167.     private int yTim = 0;
  168.     private int yTom = 0;
  169.     private int yRick = 0;
  170.     private int yHans = 0;
  171.     private int yGes = 0;
  172.     private int yPhil = 0;
  173.     private int yArnaud = 0;
  174.     private int yRich = 0;
  175.  
  176.     public Easter() {
  177.     }
  178.  
  179.     public void go() {
  180.         animator = new AnimationThread(this);
  181.         animator.setPriority(Thread.MIN_PRIORITY);
  182.         animator.start();
  183.     }
  184.  
  185.     public void paint(Graphics g) {
  186.         // The code may be goofy, but the code be havin' some fun.
  187.         g.setColor(getParent().getBackground());
  188.         g.fillRect(0, 0, getWidth(), getHeight());
  189.  
  190.         if(!running) {
  191.         return;
  192.         }
  193.  
  194.         // Unless your name is Jeff Dinkins, don't muck with this. (-:
  195.         tmpScale = (int) (Math.abs(Math.sin(x1+00)) * 10); double jeffScale   = (double) tmpScale / 10;
  196.         tmpScale = (int) (Math.abs(Math.sin(x1+10)) * 10); double timScale    = (double) tmpScale / 10;
  197.         tmpScale = (int) (Math.abs(Math.sin(x1+20)) * 10); double tomScale    = (double) tmpScale / 10;
  198.         tmpScale = (int) (Math.abs(Math.sin(x1+30)) * 10); double jagScale    = (double) tmpScale / 10;
  199.         tmpScale = (int) (Math.abs(Math.sin(x1+40)) * 11); double amyScale    = (double) tmpScale / 10;
  200.         tmpScale = (int) (Math.abs(Math.sin(x1+50)) * 11); double rickScale   = (double) tmpScale / 10;
  201.         tmpScale = (int) (Math.abs(Math.sin(x2+60)) * 11); double hansScale   = (double) tmpScale / 10;
  202.         tmpScale = (int) (Math.abs(Math.sin(x2+70)) * 10); double gesScale    = (double) tmpScale / 10;
  203.         tmpScale = (int) (Math.abs(Math.sin(x1+10)) * 10); double philScale   = (double) tmpScale / 10;
  204.         tmpScale = (int) (Math.abs(Math.sin(x1+90)) * 10); double arnaudScale = (double) tmpScale / 10;
  205.             tmpScale = (int) (Math.abs(Math.sin(x1+80)) * 10); double richScale   = (double) tmpScale / 10;
  206.         
  207.         x1 +=.1;
  208.         x2 +=.065;
  209.         int nudgeX = (int) (((double) getWidth()/2) * .8);
  210.         xTom       = (int) (Math.sin(x1+00) * nudgeX) + nudgeX;
  211.             xAmy       = (int) (Math.sin(x1+10) * nudgeX) + nudgeX;
  212.         xGes       = (int) (Math.sin(x2+20) * nudgeX) + nudgeX;
  213.             xRick      = (int) (Math.sin(x1+30) * nudgeX) + nudgeX;
  214.         xJeff      = (int) (Math.sin(x1+40) * nudgeX) + nudgeX;
  215.             xPhil      = (int) (Math.sin(x1+51) * nudgeX) + nudgeX;          
  216.         xTim       = (int) (Math.sin(x1+60) * nudgeX) + nudgeX;
  217.         xRich      = (int) (Math.sin(x1+65) * nudgeX) + nudgeX;
  218.             xArnaud    = (int) (Math.sin(x1+70) * nudgeX) + nudgeX;
  219.             xHans      = (int) (Math.sin(x2+85) * nudgeX) + nudgeX;
  220.         xJag       = (int) (Math.sin(x1+90) * nudgeX) + nudgeX;
  221.         
  222.         y1 +=.1;
  223.         y2 +=.05;
  224.         int nudgeY    = (int) (((double) getHeight()/2) * .60);
  225.         int nudgeMe   = (int) (((double) getHeight()/2) * .45);
  226.         int nudgePhil = (int) (((double) getHeight()/2) * .20);
  227.         yTom          = (int) (Math.sin(y1+00) * nudgeY)    + nudgeY;
  228.         yTim          = (int) (Math.sin(y1+10) * nudgeY)    + nudgeY;
  229.         yRich         = (int) (Math.sin(y1+15) * nudgeY)    + nudgeY;
  230.         yJeff         = (int) (Math.sin(y1+20) * nudgeMe)   + nudgeY;
  231.             yHans         = (int) (Math.sin(y2+33) * nudgeY)    + nudgeY;
  232.             yPhil         = (int) (Math.sin(y1+45) * nudgePhil) + nudgeY;
  233.             yAmy          = (int) (Math.sin(y1+50) * nudgeY)    + nudgeY;
  234.             yArnaud       = (int) (Math.sin(y1+60) * nudgeY)    + nudgeY;
  235.             yGes          = (int) (Math.sin(y2+70) * nudgeY)    + nudgeY;
  236.             yRick         = (int) (Math.sin(y1+80) * nudgeMe)   + nudgeY;
  237.         yJag          = (int) (Math.sin(y1+90) * nudgeY)    + nudgeY;
  238.  
  239.         // Don't modify this - the order matters!
  240.         if(x1 > 30) squish(g, arnaud, xArnaud, yArnaud, arnaudScale);
  241.         if(x1 > 15) squish(g, phil,   xPhil,   yPhil,   philScale);
  242.         if(x1 >  9) squish(g, rick,   xRick,   yRick,   rickScale);
  243.         if(x1 > 27) squish(g, tim,    xTim,    yTim,    timScale);
  244.         if(x1 > 12) squish(g, tom,    xTom,    yTom,    tomScale);
  245.         if(x1 > 33) {
  246.         if(hansScale > .65) {
  247.             squish(g, hans1,   xHans,   yHans,   hansScale);
  248.         } else {
  249.             squish(g, hans2,   xHans,   yHans,   hansScale);
  250.         }
  251.         }
  252.         if(x1 > 21) squish(g, amy,    xAmy,    yAmy,    amyScale);
  253.         if(x1 > 6) squish(g, jag,    xJag,    yTom,    jagScale);
  254.         squish(g, jeff,   xJeff,   yJeff,   jeffScale);
  255.         if(x1 > 3) squish(g, ges,    xGes,    yGes,    gesScale);
  256.             if(x1 > 18) squish(g, rich, xRich, yRich, richScale);
  257.  
  258.     }
  259.  
  260.     public void squish(Graphics g, ImageIcon icon, int x, int y, double scale) {
  261.         if(isVisible()) {
  262.         g.drawImage(icon.getImage(),
  263.                 x, y,
  264.                 (int) (icon.getIconWidth()*scale),
  265.                 (int) (icon.getIconHeight()*scale),
  266.                 this);
  267.         }
  268.     }
  269.     }
  270.  
  271.     class AnimationThread extends Thread {
  272.     Easter easter;
  273.     
  274.     AnimationThread(Easter easter) {
  275.         this.easter = easter;
  276.     }
  277.     
  278.     /**
  279.      * Called by Thread.start().
  280.      */
  281.     public void run () {
  282.             try { sleep(888); } catch (java.lang.InterruptedException e) { }
  283.         easter.running = true;
  284.         while(true & easter.isVisible()) {
  285.         easter.repaint();
  286.                 try { sleep(50); } catch (java.lang.InterruptedException e) { }
  287.         }
  288.         easter.running = false;
  289.     }
  290.     }
  291.  
  292.  
  293.     
  294. }
  295.