home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 22 / AMUG_22-1.ISO / Files / Internet / Java / ET Applets 1.1.sit / ET Applets 1.1 / Common / ET_TextMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-01  |  8.4 KB  |  356 lines  |  [TEXT/ttxt]

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.MediaTracker;
  11. import java.awt.Rectangle;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14. import java.util.Vector;
  15.  
  16. public final class ET_TextMenu extends Applet implements Runnable {
  17.    static final boolean REG_VERSION = false;
  18.    // $FF: renamed from: RT java.lang.String
  19.    static final String field_0 = "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)";
  20.    static final String APPLETINFO = "ET Text Menu v1.1. Visit http://www.entanke.se/ for information and more applets.";
  21.    Image offScreenImage;
  22.    Dimension offScreenSize;
  23.    Graphics offScreenGraphics;
  24.    Graphics appletGraphics;
  25.    private Thread kicker;
  26.    static final int S_NORMAL = 0;
  27.    static final int S_OVER = 1;
  28.    static final int S_CLICK = 2;
  29.    static final String DEF_TEXT = "No TEXT parameter given.";
  30.    static final int DEF_COLOR = 0;
  31.    static final int DEF_OVERCOLOR = 255;
  32.    static final int DEF_CLICKCOLOR = 16711680;
  33.    static final int DEF_BGCOLOR = 16777215;
  34.    static final String DEF_FONTNAME = "TimesRoman";
  35.    static final int DEF_FONTSIZE = 13;
  36.    static final int DEF_FONTSTYLE = 0;
  37.    static final URL DEF_URL = null;
  38.    static final URL DEF_BGIMAGE = null;
  39.    static final String DEF_TARGETFRAME = "_self";
  40.    static final String DEF_ALT = null;
  41.    static final String DEF_ALIGN = "Center";
  42.    static final int DEF_XMARGIN = 0;
  43.    static final int DEF_YMARGIN = 0;
  44.    Vector parText = new Vector();
  45.    Vector parURL = new Vector();
  46.    Vector parTargetFrame = new Vector();
  47.    Vector parALT = new Vector();
  48.    Vector parAlign = new Vector();
  49.    Vector parColor = new Vector();
  50.    Vector parOverColor = new Vector();
  51.    Vector parClickColor = new Vector();
  52.    Vector parFont = new Vector();
  53.    Vector parXMargin = new Vector();
  54.    Vector parYMargin = new Vector();
  55.    URL parBGImage;
  56.    Integer parBGColor;
  57.    Color BGColor;
  58.    Image BGImage;
  59.    boolean BGImageLoaded = false;
  60.    Vector activeRectangle = new Vector();
  61.    Vector activeDescent = new Vector();
  62.    static final int OVER_NONE = -1;
  63.    static final int MOUSE_UP = 0;
  64.    static final int MOUSE_DOWN = 1;
  65.    int statLastOver = -1;
  66.    int statLastMouse = 0;
  67.  
  68.    public void init() {
  69.       Dimension var1 = ((Component)this).size();
  70.       this.offScreenImage = ((Component)this).createImage(var1.width, var1.height);
  71.       this.offScreenSize = var1;
  72.       this.offScreenGraphics = this.offScreenImage.getGraphics();
  73.       this.appletGraphics = ((Component)this).getGraphics();
  74.       this.parBGImage = this.getURLParameter("BGImage", (URL)null);
  75.       this.parBGColor = this.getIntegerParameter("BGColor", new Integer(16777215), 16);
  76.       this.BGColor = new Color(this.parBGColor);
  77.       boolean var2 = true;
  78.  
  79.       for(int var3 = 1; var2; ++var3) {
  80.          if (var3 == 1) {
  81.             this.parText.addElement(this.getStringParameter("Text1", "No TEXT parameter given."));
  82.             this.parURL.addElement(this.getURLParameter("URL1", (URL)null));
  83.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame1", "_self"));
  84.             this.parALT.addElement(this.getStringParameter("ALT1", (String)null));
  85.             this.parAlign.addElement(this.getStringParameter("Align1", "Center"));
  86.             this.parXMargin.addElement(this.getIntegerParameter("XMargin1", new Integer(0), 10));
  87.             this.parYMargin.addElement(this.getIntegerParameter("YMargin1", new Integer(0), 10));
  88.             this.parColor.addElement(this.getIntegerParameter("Color1", new Integer(0), 16));
  89.             this.parOverColor.addElement(this.getIntegerParameter("OverColor1", new Integer(255), 16));
  90.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor1", new Integer(16711680), 16));
  91.             this.parFont.addElement(this.getFontParameter("FontName1", "FontStyle1", "FontSize1", new Font("TimesRoman", 0, 13)));
  92.          } else if (this.getStringParameter("Text" + var3, (String)null) != null) {
  93.             this.parText.addElement(this.getStringParameter("Text" + var3, (String)this.parText.elementAt(var3 - 2)));
  94.             this.parURL.addElement(this.getURLParameter("URL" + var3, (URL)null));
  95.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame" + var3, (String)this.parTargetFrame.elementAt(var3 - 2)));
  96.             this.parALT.addElement(this.getStringParameter("ALT" + var3, (String)null));
  97.             this.parAlign.addElement(this.getStringParameter("Align" + var3, (String)this.parAlign.elementAt(var3 - 2)));
  98.             this.parXMargin.addElement(this.getIntegerParameter("XMargin" + var3, (Integer)this.parXMargin.elementAt(var3 - 2), 10));
  99.             Vector var10000 = this.parYMargin;
  100.             String var4 = "YMargin" + var3;
  101.             var10000.addElement(this.getIntegerParameter(var4, new Integer(0), 10));
  102.             this.parColor.addElement(this.getIntegerParameter("Color" + var3, (Integer)this.parColor.elementAt(var3 - 2), 16));
  103.             this.parOverColor.addElement(this.getIntegerParameter("OverColor" + var3, (Integer)this.parOverColor.elementAt(var3 - 2), 16));
  104.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor" + var3, (Integer)this.parClickColor.elementAt(var3 - 2), 16));
  105.             this.parFont.addElement(this.getFontParameter("FontName" + var3, "FontStyle" + var3, "FontSize" + var3, (Font)this.parFont.elementAt(var3 - 2)));
  106.          } else {
  107.             var2 = false;
  108.          }
  109.       }
  110.  
  111.       int var5 = 0;
  112.  
  113.       for(int var6 = 0; var6 < this.parText.size(); ++var6) {
  114.          this.appletGraphics.setFont((Font)this.parFont.elementAt(var6));
  115.          FontMetrics var11 = this.appletGraphics.getFontMetrics(this.appletGraphics.getFont());
  116.          int var7 = var5 + (Integer)this.parYMargin.elementAt(var6);
  117.          var5 = var7 + var11.getHeight();
  118.          int var8 = var11.stringWidth((String)this.parText.elementAt(var6));
  119.          int var10 = (Integer)this.parXMargin.elementAt(var6);
  120.          int var9;
  121.          if (((String)this.parAlign.elementAt(var6)).equalsIgnoreCase("Left")) {
  122.             var9 = var10;
  123.          } else if (((String)this.parAlign.elementAt(var6)).equalsIgnoreCase("Right")) {
  124.             var9 = ((Component)this).size().width - var8 - var10;
  125.          } else {
  126.             var9 = (((Component)this).size().width - var8) / 2 + var10;
  127.          }
  128.  
  129.          this.activeRectangle.addElement(new Rectangle(var9, var7, var8, var11.getHeight()));
  130.          this.activeDescent.addElement(new Integer(var11.getDescent()));
  131.       }
  132.  
  133.       this.drawText(0, 0, this.offScreenGraphics);
  134.       this.offScreenGraphics.setColor(this.BGColor);
  135.       this.offScreenGraphics.fillRect(0, 0, this.offScreenSize.width, this.offScreenSize.height);
  136.  
  137.       for(int var12 = 0; var12 < this.parText.size(); ++var12) {
  138.          this.drawText(var12, 0, this.offScreenGraphics);
  139.       }
  140.  
  141.       Graphics var13 = this.appletGraphics;
  142.       var13.drawImage(this.offScreenImage, 0, 0, this);
  143.    }
  144.  
  145.    private Integer getIntegerParameter(String var1, int var2, int var3) {
  146.       return this.getIntegerParameter(var1, new Integer(var2), var3);
  147.    }
  148.  
  149.    private Integer getIntegerParameter(String var1, Integer var2, int var3) {
  150.       String var4 = ((Applet)this).getParameter(var1);
  151.  
  152.       try {
  153.          Integer var5 = new Integer(Integer.parseInt(var4, var3));
  154.          return var5;
  155.       } catch (NumberFormatException var6) {
  156.          return var2;
  157.       }
  158.    }
  159.  
  160.    private String getStringParameter(String var1, String var2) {
  161.       String var3 = ((Applet)this).getParameter(var1);
  162.       return var3 == null ? var2 : var3;
  163.    }
  164.  
  165.    private URL getURLParameter(String var1, URL var2) {
  166.       String var3 = this.getStringParameter(var1, (String)null);
  167.  
  168.       try {
  169.          URL var4 = new URL(((Applet)this).getDocumentBase(), var3);
  170.          return var4;
  171.       } catch (MalformedURLException var5) {
  172.          return var2;
  173.       }
  174.    }
  175.  
  176.    private Font getFontParameter(String var1, String var2, String var3, Font var4) {
  177.       String var5 = this.getStringParameter(var1, var4.getName());
  178.       String var6 = this.getStringParameter(var2, "");
  179.       int var7 = var4.getSize();
  180.       var7 = this.getIntegerParameter(var3, new Integer(var7), 10);
  181.       int var8 = var4.getStyle();
  182.       if (var6.equalsIgnoreCase("Plain")) {
  183.          var8 = 0;
  184.       }
  185.  
  186.       if (var6.equalsIgnoreCase("Bold")) {
  187.          var8 = 1;
  188.       }
  189.  
  190.       if (var6.equalsIgnoreCase("Italic")) {
  191.          var8 = 2;
  192.       }
  193.  
  194.       if (var6.equalsIgnoreCase("BoldItalic")) {
  195.          var8 = 3;
  196.       }
  197.  
  198.       return new Font(var5, var8, var7);
  199.    }
  200.  
  201.    public String getAppletInfo() {
  202.       return "ET Text Menu v1.1. Visit http://www.entanke.se/ for information and more applets.";
  203.    }
  204.  
  205.    public void start() {
  206.       if (this.kicker == null) {
  207.          this.kicker = new Thread(this);
  208.          this.kicker.start();
  209.       }
  210.  
  211.       ((Applet)this).showStatus("ET Text Menu v1.1. Visit http://www.entanke.se/ for information and more applets.");
  212.    }
  213.  
  214.    public void stop() {
  215.       if (this.kicker != null && this.kicker.isAlive()) {
  216.          this.kicker.stop();
  217.       }
  218.  
  219.       this.kicker = null;
  220.    }
  221.  
  222.    public void run() {
  223.       if (this.parBGImage != null) {
  224.          this.BGImage = ((Applet)this).getImage(this.parBGImage);
  225.          if (this.BGImage != null) {
  226.             MediaTracker var1 = new MediaTracker(this);
  227.             var1.addImage(this.BGImage, 1);
  228.  
  229.             try {
  230.                var1.waitForID(1);
  231.             } catch (InterruptedException var3) {
  232.             }
  233.  
  234.             this.offScreenGraphics.drawImage(this.BGImage, 0, 0, this);
  235.             this.BGImageLoaded = true;
  236.  
  237.             for(int var2 = 0; var2 < this.parText.size(); ++var2) {
  238.                this.drawText(var2, 0, this.offScreenGraphics);
  239.             }
  240.          }
  241.       }
  242.  
  243.       Graphics var4 = ((Component)this).getGraphics();
  244.       var4.drawImage(this.offScreenImage, 0, 0, this);
  245.    }
  246.  
  247.    public final void update(Graphics var1) {
  248.       var1.drawImage(this.offScreenImage, 0, 0, this);
  249.    }
  250.  
  251.    public final void paint(Graphics var1) {
  252.       var1.drawImage(this.offScreenImage, 0, 0, this);
  253.    }
  254.  
  255.    private final void updateText(int var1, int var2) {
  256.       if (this.statLastOver != var1) {
  257.          if (var1 != -1 && this.parALT.elementAt(var1) != null) {
  258.             ((Applet)this).showStatus((String)this.parALT.elementAt(var1) + "  " + "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  259.          } else {
  260.             ((Applet)this).showStatus("(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  261.          }
  262.       }
  263.  
  264.       if (this.statLastOver != var1) {
  265.          this.drawText(this.statLastOver, 0, this.offScreenGraphics);
  266.          if (this.statLastMouse == 1) {
  267.             this.drawText(var1, 2, this.offScreenGraphics);
  268.          } else {
  269.             this.drawText(var1, 1, this.offScreenGraphics);
  270.          }
  271.  
  272.          this.statLastOver = var1;
  273.          Graphics var3 = this.appletGraphics;
  274.          var3.drawImage(this.offScreenImage, 0, 0, this);
  275.       }
  276.  
  277.       if (this.statLastMouse != var2) {
  278.          if (var2 == 1) {
  279.             this.drawText(var1, 2, this.offScreenGraphics);
  280.          } else {
  281.             this.drawText(var1, 1, this.offScreenGraphics);
  282.          }
  283.  
  284.          this.statLastMouse = var2;
  285.          Graphics var4 = this.appletGraphics;
  286.          var4.drawImage(this.offScreenImage, 0, 0, this);
  287.       }
  288.  
  289.    }
  290.  
  291.    public boolean handleEvent(Event var1) {
  292.       switch (var1.id) {
  293.          case 501:
  294.             this.updateText(this.statLastOver, 1);
  295.             return true;
  296.          case 502:
  297.             this.updateText(this.statLastOver, 0);
  298.             if (this.statLastOver != -1 && (URL)this.parURL.elementAt(this.statLastOver) != null) {
  299.                ((Applet)this).getAppletContext().showDocument((URL)this.parURL.elementAt(this.statLastOver), (String)this.parTargetFrame.elementAt(this.statLastOver));
  300.             }
  301.  
  302.             return true;
  303.          case 503:
  304.          case 506:
  305.             this.updateText(this.getMouseOver(var1.x, var1.y), this.statLastMouse);
  306.             return true;
  307.          case 504:
  308.          default:
  309.             return super.handleEvent(var1);
  310.          case 505:
  311.             this.updateText(-1, this.statLastMouse);
  312.             ((Applet)this).showStatus("");
  313.             return true;
  314.       }
  315.    }
  316.  
  317.    private int getMouseOver(int var1, int var2) {
  318.       int var3 = -1;
  319.  
  320.       for(int var4 = 0; var4 < this.activeRectangle.size(); ++var4) {
  321.          if (((Rectangle)this.activeRectangle.elementAt(var4)).inside(var1, var2)) {
  322.             var3 = var4;
  323.          }
  324.       }
  325.  
  326.       return var3;
  327.    }
  328.  
  329.    private void drawText(int var1, int var2, Graphics var3) {
  330.       if (var1 != -1 && ((URL)this.parURL.elementAt(var1) != null || (URL)this.parURL.elementAt(var1) == null && var2 == 0)) {
  331.          var3.setFont((Font)this.parFont.elementAt(var1));
  332.          switch (var2) {
  333.             case 0:
  334.                var3.setColor(new Color((Integer)this.parColor.elementAt(var1)));
  335.                break;
  336.             case 1:
  337.                var3.setColor(new Color((Integer)this.parOverColor.elementAt(var1)));
  338.                break;
  339.             case 2:
  340.                var3.setColor(new Color((Integer)this.parClickColor.elementAt(var1)));
  341.          }
  342.  
  343.          Rectangle var4 = (Rectangle)this.activeRectangle.elementAt(var1);
  344.          var3.drawString((String)this.parText.elementAt(var1), var4.x, var4.y + var4.height - (Integer)this.activeDescent.elementAt(var1));
  345.       }
  346.  
  347.    }
  348.  
  349.    private void delay(int var1) {
  350.       try {
  351.          Thread.sleep((long)var1);
  352.       } catch (InterruptedException var2) {
  353.       }
  354.    }
  355. }
  356.