home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Netobjs / Install.exe / data1.cab / Components / AdBanner / DynamicBanner.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-12-16  |  6.0 KB  |  238 lines

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Graphics;
  6. import java.awt.Image;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9.  
  10. public class DynamicBanner extends Applet implements Runnable {
  11.    Thread kicker;
  12.    public Image image;
  13.    BannerTransition transition;
  14.    public int currentBanner;
  15.    public int nextBanner;
  16.    int numOfBanners;
  17.    int numOfTransitionTypes;
  18.    int currentTransitionType;
  19.    long delay;
  20.    boolean mouseInsideApplet;
  21.    boolean mouseDown;
  22.    int componentWidth;
  23.    int componentHeight;
  24.    int autoResize;
  25.    public BannerData[] banners;
  26.    String[] transitionClasses;
  27.  
  28.    public void finishInit() {
  29.       if (this.delay == -1L) {
  30.          String var1 = ((Applet)this).getParameter("delay");
  31.  
  32.          try {
  33.             this.delay = Long.parseLong(var1);
  34.          } catch (NumberFormatException var4) {
  35.             this.delay = 3L;
  36.          }
  37.  
  38.          this.transitionClasses = new String[this.numOfBanners];
  39.  
  40.          for(int var2 = 0; var2 < this.numOfBanners; ++var2) {
  41.             var1 = ((Applet)this).getParameter("banner" + Integer.toString(var2));
  42.             int var3 = var1.lastIndexOf(",");
  43.             this.transitionClasses[var2] = var1.substring(var3 + 1) + "Transition";
  44.          }
  45.  
  46.          this.banners[this.nextBanner].initPixels(this.componentWidth, this.componentHeight);
  47.          this.mouseInsideApplet = false;
  48.       }
  49.    }
  50.  
  51.    public void init() {
  52.       String var1 = ((Applet)this).getParameter("bgcolor");
  53.       if (var1 != null) {
  54.          Color var2 = new Color(Integer.parseInt(var1.substring(1), 16));
  55.          ((Component)this).getParent().setBackground(var2);
  56.          ((Component)this).getParent().repaint();
  57.          ((Component)this).setBackground(var2);
  58.       }
  59.  
  60.       var1 = ((Applet)this).getParameter("banner0");
  61.       this.numOfBanners = 1;
  62.  
  63.       for(String var4 = ((Applet)this).getParameter("banner1"); var4 != null; var4 = ((Applet)this).getParameter("banner" + Integer.toString(this.numOfBanners))) {
  64.          ++this.numOfBanners;
  65.       }
  66.  
  67.       var1 = ((Applet)this).getParameter("autoResize");
  68.       this.autoResize = Integer.parseInt(var1);
  69.       this.banners = new BannerData[this.numOfBanners];
  70.       int var6 = (int)(Math.random() * (double)this.numOfBanners);
  71.       if (var6 > this.numOfBanners - 1) {
  72.          var6 = this.numOfBanners - 1;
  73.       }
  74.  
  75.       this.currentBanner = this.nextBanner = var6;
  76.       this.componentWidth = ((Component)this).size().width;
  77.       this.componentHeight = ((Component)this).size().height;
  78.  
  79.       while(!this.parseBannerData()) {
  80.          if (++this.nextBanner >= this.numOfBanners) {
  81.             this.nextBanner = 0;
  82.          }
  83.       }
  84.  
  85.       this.delay = -1L;
  86.    }
  87.  
  88.    public boolean mouseUp(Event var1, int var2, int var3) {
  89.       if (this.banners[this.currentBanner].link == null) {
  90.          return false;
  91.       } else {
  92.          this.kicker.stop();
  93.          ((Applet)this).getAppletContext().showDocument(this.banners[this.currentBanner].link);
  94.          return true;
  95.       }
  96.    }
  97.  
  98.    public void paint(Graphics var1) {
  99.       var1.drawImage(this.image, 0, 0, Color.white, this);
  100.    }
  101.  
  102.    boolean parseBannerData() {
  103.       String var1 = ((Applet)this).getParameter("banner" + Integer.toString(this.nextBanner));
  104.       int var2 = var1.indexOf(",");
  105.       int var3 = var1.lastIndexOf(",");
  106.       String var4 = var1.substring(0, var2);
  107.       if (var4.length() <= 0) {
  108.          return false;
  109.       } else {
  110.          Image var5 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), var4);
  111.          var1 = var1.substring(var2 + 1, var3);
  112.  
  113.          URL var6;
  114.          try {
  115.             var6 = new URL(((Applet)this).getDocumentBase(), var1);
  116.          } catch (MalformedURLException var7) {
  117.             var6 = null;
  118.          }
  119.  
  120.          ((Component)this).prepareImage(var5, this);
  121.          if (this.autoResize == 1) {
  122.             if (var5.getWidth(this) != this.componentWidth || var5.getHeight(this) != this.componentHeight) {
  123.                var5 = var5.getScaledInstance(this.componentWidth, this.componentHeight, 2);
  124.                ((Component)this).prepareImage(var5, this);
  125.             }
  126.          } else {
  127.             ((Component)this).prepareImage(var5, this);
  128.          }
  129.  
  130.          this.banners[this.nextBanner] = new BannerData(var6, var5);
  131.          if (this.image == null) {
  132.             this.image = var5;
  133.          } else {
  134.             this.banners[this.nextBanner].initPixels(this.componentWidth, this.componentHeight);
  135.          }
  136.  
  137.          return true;
  138.       }
  139.    }
  140.  
  141.    public void run() {
  142.       while((((Component)this).checkImage(this.image, this) & 16) == 0 && (((Component)this).checkImage(this.image, this) & 32) == 0) {
  143.          try {
  144.             Thread.sleep(600L);
  145.          } catch (InterruptedException var5) {
  146.          }
  147.       }
  148.  
  149.       this.finishInit();
  150.  
  151.       while(Thread.currentThread() == this.kicker) {
  152.          long var1 = System.currentTimeMillis() + this.delay * 1000L;
  153.          this.currentBanner = this.nextBanner;
  154.          if (++this.nextBanner >= this.numOfBanners) {
  155.             this.nextBanner = 0;
  156.          }
  157.  
  158.          if (this.banners[this.nextBanner] == null) {
  159.             while(!this.parseBannerData()) {
  160.                if (++this.nextBanner >= this.numOfBanners) {
  161.                   this.nextBanner = 0;
  162.                }
  163.             }
  164.  
  165.             try {
  166.                Thread.sleep(120L);
  167.             } catch (InterruptedException var6) {
  168.             }
  169.          }
  170.  
  171.          this.currentTransitionType = this.currentBanner;
  172.  
  173.          try {
  174.             this.transition = (BannerTransition)Class.forName(this.transitionClasses[this.currentTransitionType]).newInstance();
  175.             this.transition.initialize(this, this.componentWidth, this.componentHeight);
  176.          } catch (Exception var10) {
  177.             ((Throwable)var10).printStackTrace();
  178.          }
  179.  
  180.          if (System.currentTimeMillis() < var1) {
  181.             try {
  182.                Thread.sleep(var1 - System.currentTimeMillis());
  183.             } catch (InterruptedException var9) {
  184.             }
  185.          }
  186.  
  187.          Graphics var3 = ((Component)this).getGraphics();
  188.  
  189.          for(int var4 = 0; var4 < this.transition.numOfFrames; ++var4) {
  190.             this.image = this.transition.frames[var4];
  191.             var3.drawImage(this.image, 0, 0, this);
  192.             ((Component)this).getToolkit().sync();
  193.  
  194.             try {
  195.                Thread.sleep((long)this.transition.delay);
  196.             } catch (InterruptedException var8) {
  197.             }
  198.          }
  199.  
  200.          this.image = this.banners[this.nextBanner].image;
  201.          var3.drawImage(this.image, 0, 0, this);
  202.          ((Component)this).getToolkit().sync();
  203.          var3.dispose();
  204.          this.transition.clearFrames();
  205.          this.transition = null;
  206.  
  207.          try {
  208.             Thread.sleep(120L);
  209.          } catch (InterruptedException var7) {
  210.          }
  211.       }
  212.  
  213.    }
  214.  
  215.    public void start() {
  216.       if (this.kicker == null) {
  217.          this.nextBanner = this.currentBanner;
  218.          this.image = this.banners[this.currentBanner].image;
  219.          this.transition = null;
  220.          this.kicker = new Thread(this);
  221.          this.kicker.start();
  222.       }
  223.  
  224.    }
  225.  
  226.    public void stop() {
  227.       if (this.kicker != null) {
  228.          this.kicker.stop();
  229.          this.kicker = null;
  230.       }
  231.  
  232.    }
  233.  
  234.    public void update(Graphics var1) {
  235.       this.paint(var1);
  236.    }
  237. }
  238.