home *** CD-ROM | disk | FTP | other *** search
/ Team Palmtops 22 / Palmtops_numero22.iso / pc / Interface / Calembour.java < prev    next >
Encoding:
Java Source  |  2000-12-07  |  6.6 KB  |  314 lines

  1. /*
  2.  * 00:01:00 08/12/00
  3.  *
  4.  * Calembour.java - Advertisment for web pages
  5.  * Copyright (C) 2000 Romain Guy
  6.  * guy.romain@bigfoot.com
  7.  * www.jext.org
  8.  *
  9.  */
  10.  
  11. import java.applet.Applet;
  12.  
  13. import java.awt.Color;
  14. import java.awt.Cursor;
  15. import java.awt.Image;
  16. import java.awt.Graphics;
  17. import java.awt.MediaTracker;
  18.  
  19. import java.awt.event.MouseEvent;
  20. import java.awt.event.MouseAdapter;
  21. import java.awt.event.MouseMotionAdapter;
  22.  
  23. import java.net.URL;
  24. import java.net.MalformedURLException;
  25.  
  26. import java.util.Vector;
  27.  
  28. public class Calembour extends Applet implements Runnable
  29. {
  30.   private Graphics off;
  31.   private Image offImg;
  32.  
  33.   private URL myURL;
  34.   private Color backColor;
  35.  
  36.   private Thread runner;
  37.   private MediaTracker tracker;
  38.  
  39.   private int bannerIndex = -1;
  40.   private Banner currentBanner;
  41.   private Vector banners = new Vector();
  42.  
  43.   private long start = 0;
  44.   private boolean isError;
  45.  
  46.   /**
  47.    * In the <code>init()</code> method, we simply add a
  48.    * <code>MouseMotionListener</code>, create a
  49.    * <code>MediaTracker</code> and then get the parameters.
  50.    */
  51.  
  52.   public void init()
  53.   {
  54.     // image for double bffering
  55.     offImg = createImage(size().width, size().height);
  56.  
  57.     // create a Graphics object from the image
  58.     off = offImg.getGraphics();
  59.  
  60.     Color backColor = Color.white;
  61.     String data;
  62.     tracker = new MediaTracker(this);
  63.  
  64.     // ---- Background color ----
  65.  
  66.     data = getParameter("bgcolor");
  67.     if (data != null)
  68.     {
  69.       try
  70.       {
  71.         backColor = Color.decode(data);
  72.       } catch (NumberFormatException nfe) {
  73.         backColor = Color.white;
  74.       }
  75.     }
  76.     setBackground(backColor);
  77.  
  78.     data = null;
  79.  
  80.     for (int i = 0; ; i++)
  81.     {
  82.       data = getParameter("banner" + i);
  83.       if (data == null)
  84.         break;
  85.       else
  86.       {
  87.         Banner _banner = new Banner(data);
  88.  
  89.         data = getParameter("banner" + i + ".interval");
  90.         int interval;
  91.         if (data == null)
  92.           interval = 7000;
  93.  
  94.         try
  95.         {
  96.           interval = Integer.parseInt(data);
  97.         } catch (Exception e) {
  98.           interval = 7000;
  99.         }
  100.  
  101.         _banner.setInterval(interval);
  102.  
  103.         String link = getParameter("banner" + i + ".link");
  104.         if (link != null)
  105.         {
  106.           String target = getParameter("banner" + i + ".target");
  107.           if (target == null)
  108.             target = "_blank";
  109.           _banner.setLink(link, target);
  110.         }
  111.  
  112.         data = getParameter("banner" + i + ".image");
  113.         if (data == null)
  114.         {
  115.           _banner.setName("banner" + i + ": missing parameter: image URL");
  116.         } else {
  117.           Image img = getImage(getDocumentBase(), data);
  118.           _banner.setImage(img);
  119.           tracker.addImage(img, i);
  120.         }
  121.  
  122.         banners.addElement(_banner);
  123.       }
  124.     }
  125.  
  126.     if (banners.size() == 0)
  127.     {
  128.       getAppletContext().showStatus("Error: no banner specified");
  129.       return;
  130.     } else {
  131.       setCurrentBanner();
  132.     }
  133.  
  134.     addMouseMotionListener(new MouseMotionAdapter()
  135.     {
  136.       public void mouseMoved(MouseEvent evt)
  137.       {
  138.         getAppletContext().showStatus(currentBanner.getName());
  139.       }
  140.     });
  141.  
  142.     addMouseListener(new MouseAdapter()
  143.     {
  144.       public void mouseReleased(MouseEvent evt)
  145.       {
  146.         getAppletContext().showDocument(myURL, currentBanner.getTarget());
  147.       }
  148.     });
  149.  
  150.     off.setColor(getBackground());
  151.     off.fillRect(0, 0, size().width, size().height);
  152.     getGraphics().drawImage(offImg, 0, 0, this);
  153.   }
  154.  
  155.   private void setCurrentBanner()
  156.   {
  157.     bannerIndex++;
  158.     if (bannerIndex == banners.size())
  159.       bannerIndex = 0;
  160.  
  161.     currentBanner = (Banner) banners.elementAt(bannerIndex);
  162.     currentBanner.init();
  163.  
  164.     try
  165.     {
  166.       myURL = new URL(getDocumentBase(), currentBanner.getLink());
  167.     } catch (MalformedURLException mue) { }
  168.  
  169.     isError = false;
  170.     start = System.currentTimeMillis();
  171.   }
  172.  
  173.   /**
  174.    * This simply starts the main iOb's Thread.
  175.    */
  176.  
  177.   public void start()
  178.   {
  179.     if (runner == null)
  180.     {
  181.       runner = new Thread(this);
  182.       runner.start();
  183.     }
  184.   }
  185.  
  186.   /**
  187.    * Here we kill the Thread.
  188.    */
  189.  
  190.   public void stop()
  191.   {
  192.     runner.interrupt();
  193.     runner = null;
  194.   }
  195.  
  196.   /**
  197.    * In this method, we repaint until the picture has been
  198.    * fully loaded.
  199.    */
  200.  
  201.   public void run()
  202.   {
  203.     Thread me = Thread.currentThread();
  204.     while (runner == me)
  205.     {
  206.       if (tracker.statusID(bannerIndex, false) != MediaTracker.COMPLETE && !isError)
  207.         repaint();
  208.       if (System.currentTimeMillis() - start >= currentBanner.getInterval())
  209.       {
  210.         setCurrentBanner();
  211.         repaint();
  212.       }
  213.  
  214.       Thread.yield();
  215.     }
  216.   }
  217.  
  218.   public void update(Graphics g)
  219.   {
  220.     paint(g);
  221.   }
  222.  
  223.   public void paint(Graphics g)
  224.   {
  225.     if (tracker.isErrorID(bannerIndex))
  226.     {
  227.       off.setColor(Color.black);
  228.       off.drawRect(9, 9, 21, 21);
  229.       off.setColor(Color.red);
  230.       off.setFont(new java.awt.Font("monospaced", java.awt.Font.PLAIN, 12));
  231.       off.drawString("Error loading image", 35, 24);
  232.       off.setFont(new java.awt.Font("monospaced", java.awt.Font.PLAIN, 21));
  233.       off.drawString("X", 13, 27);
  234.       isError = true;
  235.     } else
  236.       currentBanner.paint(off);
  237.  
  238.     g.drawImage(offImg, 0, 0, this);
  239.   }
  240.  
  241.   public String getAppletInfo()
  242.   {
  243.     return("Calembour (C)2000 Romain Guy\nguy.romain@bigfoot.com\nwww.jext.org");
  244.   }
  245.  
  246.   // the class which holds the banners
  247.  
  248.   class Banner
  249.   {
  250.     private Image image;
  251.     private int interval;
  252.     private String name, link, target;
  253.  
  254.     Banner(String name)
  255.     {
  256.       this.name = name;
  257.     }
  258.  
  259.     public void init()
  260.     {
  261.       setCursor(Cursor.getPredefinedCursor(link == null ?
  262.                                            Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR));
  263.     }
  264.  
  265.     public void setInterval(int interval)
  266.     {
  267.       this.interval = interval;
  268.     }
  269.  
  270.     public int getInterval()
  271.     {
  272.       return interval;
  273.     }
  274.  
  275.     public void setLink(String link, String target)
  276.     {
  277.       this.link = link;
  278.       this.target = target;
  279.     }
  280.  
  281.     public String getLink()
  282.     {
  283.       return link;
  284.     }
  285.  
  286.     public String getTarget()
  287.     {
  288.       return target;
  289.     }
  290.  
  291.     public void setImage(Image image)
  292.     {
  293.       this.image = image;
  294.     }
  295.  
  296.     public void setName(String name)
  297.     {
  298.       this.name = name;
  299.     }
  300.  
  301.     public String getName()
  302.     {
  303.       return name;
  304.     }
  305.  
  306.     public void paint(Graphics g)
  307.     {
  308.       g.drawImage(image, 0, 0, Calembour.this);
  309.     }
  310.   }
  311. }
  312.  
  313. // End of Calembour.java
  314.