home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / OS2 / NETREXX.ARJ / NETREXX.ZIP / NetRexx / Tablet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-25  |  7.9 KB  |  457 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.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.MediaTracker;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12.  
  13. public class Tablet extends Applet {
  14.    protected static final int xrise = 0;
  15.    protected static final int wrise = 14;
  16.    protected static final int xup = 14;
  17.    protected static final int wup = 6;
  18.    protected static final int xdrop = 20;
  19.    protected static final int wdrop = 14;
  20.    protected static final int xdown = 34;
  21.    protected static final int wdown = 6;
  22.    protected static final int xterm = 40;
  23.    protected static final int wterm = 14;
  24.    protected static final int xstar = 54;
  25.    protected static final int wstar = 15;
  26.    protected static final int xrism = 69;
  27.    protected static final int wrism = 14;
  28.    protected static final int xstarb = 83;
  29.    protected static final int wstarb = 15;
  30.    protected static final int xdownb = 98;
  31.    protected static final int wdownb = 6;
  32.    protected static final int xtermb = 104;
  33.    protected static final int wtermb = 14;
  34.    protected static final int xfin = 128;
  35.    protected static final int yproto = 40;
  36.    protected static final int ybottom = 15;
  37.    private String tabfont = "Helvetica";
  38.    private int tabweight = 1;
  39.    private Color tabcol;
  40.    private Color tabcolhi;
  41.    private Color tabcollo;
  42.    private int tabpoints;
  43.    private int tabheight;
  44.    private int tabbasey;
  45.    private int tabbasex;
  46.    private Image shadow;
  47.    private Image proto;
  48.    private int wid;
  49.    private int hig;
  50.    private float xscale;
  51.    private float yscale;
  52.    private int tabs;
  53.    private int[] wtab;
  54.    private int[] otab;
  55.    private int fronttab;
  56.    private int mousetab;
  57.    private int mouselast;
  58.    private String[] tabword;
  59.    private String[] taburl;
  60.    // $FF: renamed from: $0 java.lang.String
  61.    private static final String field_0 = "Tablet.nrx";
  62.  
  63.    public void init() {
  64.       int var2 = 0;
  65.       Object var3 = null;
  66.       int var4 = 0;
  67.       Object var5 = null;
  68.       int var6 = 0;
  69.       boolean var10 = false;
  70.       String var1 = "Copyright (c) IBM, 1997";
  71.       var1 = ((Applet)this).getParameter("show");
  72.       if (var1 != null) {
  73.          try {
  74.             var2 = Integer.parseInt(var1, 10);
  75.             if (var2 < 0) {
  76.                throw new NumberFormatException();
  77.             }
  78.  
  79.             this.fronttab = var2 - 1;
  80.          } catch (NumberFormatException var17) {
  81.             System.out.println("Bad show parameter: " + var1);
  82.          }
  83.       }
  84.  
  85.       this.proto = this.getgif("tablet.gif");
  86.       if (this.fronttab < 0) {
  87.          this.hig = 15;
  88.          this.wid = ((Component)this).size().width;
  89.          this.shadow = ((Component)this).createImage(this.wid, this.hig);
  90.          Graphics var24 = this.shadow.getGraphics();
  91.          var24.setColor(Color.white);
  92.          var24.fillRect(0, 0, this.wid, this.hig);
  93.          if (this.proto != null) {
  94.             this.drawunder();
  95.          } else {
  96.             var24.setColor(Color.gray);
  97.             var24.fillRect(0, 2, this.wid, 4);
  98.          }
  99.       } else {
  100.          this.tabs = 0;
  101.          var4 = 1;
  102.  
  103.          while(true) {
  104.             var1 = ((Applet)this).getParameter("tab" + String.valueOf(var4));
  105.             if (var1 == null) {
  106.                if (this.tabs == 0) {
  107.                   return;
  108.                } else {
  109.                   if (this.fronttab >= this.tabs) {
  110.                      this.fronttab = this.tabs - 1;
  111.                   }
  112.  
  113.                   this.tabword = new String[this.tabs];
  114.                   this.taburl = new String[this.tabs];
  115.                   int var12 = this.tabs;
  116.  
  117.                   for(int var26 = 1; var26 <= var12; ++var26) {
  118.                      char[] var27 = ((Applet)this).getParameter("tab" + String.valueOf(var26)).toCharArray();
  119.                      int var13 = var27.length - 1;
  120.  
  121.                      for(var2 = 0; var2 <= var13 && var27[var2] == ' '; ++var2) {
  122.                      }
  123.  
  124.                      int var14 = var27.length - 1;
  125.  
  126.                      for(var6 = var2; var6 <= var14 && var27[var6] != ' '; ++var6) {
  127.                         if (var27[var6] == '_') {
  128.                            var27[var6] = ' ';
  129.                         }
  130.                      }
  131.  
  132.                      if (var6 <= var2) {
  133.                         this.tabword[var26 - 1] = "?";
  134.                      } else {
  135.                         this.tabword[var26 - 1] = new String(var27, var2, var6 - var2);
  136.                      }
  137.  
  138.                      int var15 = var27.length - 1;
  139.  
  140.                      for(var2 = var6; var2 <= var15 && var27[var2] == ' '; ++var2) {
  141.                      }
  142.  
  143.                      int var16 = var27.length - 1;
  144.  
  145.                      for(var6 = var2; var6 <= var16 && var27[var6] != ' '; ++var6) {
  146.                      }
  147.  
  148.                      if (var6 <= var2) {
  149.                         this.taburl[var26 - 1] = "?";
  150.                      } else {
  151.                         this.taburl[var26 - 1] = new String(var27, var2, var6 - var2);
  152.                      }
  153.                   }
  154.  
  155.                   this.wid = ((Component)this).size().width;
  156.                   this.hig = 40;
  157.                   this.shadow = ((Component)this).createImage(this.wid, this.hig);
  158.                   Graphics var23 = this.shadow.getGraphics();
  159.                   var23.setFont(new Font(this.tabfont, this.tabweight, 36));
  160.                   int var7 = var23.getFontMetrics().getAscent();
  161.                   this.tabpoints = (int)(36.0F * ((float)this.tabheight / (float)var7) + 0.5F);
  162.                   var23.setFont(new Font(this.tabfont, this.tabweight, this.tabpoints));
  163.                   FontMetrics var8 = var23.getFontMetrics();
  164.                   this.wtab = new int[this.tabs];
  165.                   this.otab = new int[this.tabs];
  166.                   int var9 = 0;
  167.                   int var31 = this.tabs - 1;
  168.  
  169.                   for(int var30 = 0; var30 <= var31; ++var30) {
  170.                      this.otab[var30] = var9 + 14 * (var30 + 1);
  171.                      this.wtab[var30] = var8.stringWidth(this.tabword[var30]);
  172.                      var9 += this.wtab[var30];
  173.                   }
  174.  
  175.                   int var11 = var9 + 14 * this.tabs + 14 + 14;
  176.                   if (var11 > this.wid) {
  177.                      this.wid = var11;
  178.                      this.shadow = ((Component)this).createImage(this.wid, this.hig);
  179.                      var23 = this.shadow.getGraphics();
  180.                   }
  181.  
  182.                   this.xscale = (float)this.wid / (float)((Component)this).size().width;
  183.                   this.yscale = (float)this.hig / (float)((Component)this).size().height;
  184.                   var23.setColor(Color.white);
  185.                   var23.fillRect(0, 0, this.wid, this.hig);
  186.                   this.drawtabs();
  187.                   return;
  188.                }
  189.             }
  190.  
  191.             ++this.tabs;
  192.             ++var4;
  193.          }
  194.       }
  195.    }
  196.  
  197.    public void updatetext(int var1) {
  198.       int var4 = 0;
  199.       this.drawtext(this.otab[var1], this.tabword[var1], var1 == this.mousetab, var1 != this.fronttab);
  200.       if (var1 != this.fronttab) {
  201.          int var2 = this.otab[var1];
  202.  
  203.          for(int var3 = this.wtab[var1]; var3 > 0; var2 += var4) {
  204.             if (var3 > 6) {
  205.                var4 = 6;
  206.             } else {
  207.                var4 = var3;
  208.             }
  209.  
  210.             this.drawslice(var2, 34, var4);
  211.             var3 -= var4;
  212.          }
  213.  
  214.       }
  215.    }
  216.  
  217.    public void drawunder() {
  218.       int var3 = 0;
  219.       this.drawslice(0, 83, 15);
  220.       int var1 = 15;
  221.  
  222.       for(int var2 = this.wid - 29; var2 > 0; var1 += var3) {
  223.          if (var2 > 6) {
  224.             var3 = 6;
  225.          } else {
  226.             var3 = var2;
  227.          }
  228.  
  229.          this.drawslice(var1, 98, var3);
  230.          var2 -= var3;
  231.       }
  232.  
  233.       this.drawslice(var1, 104, 14);
  234.       ((Component)this).repaint();
  235.    }
  236.  
  237.    public void drawtabs() {
  238.       boolean var1 = false;
  239.       int var2 = 0;
  240.       int var3 = 0;
  241.       byte var4 = 0;
  242.       boolean var5 = false;
  243.       int var6 = 0;
  244.       boolean var7 = false;
  245.       byte var8 = 0;
  246.  
  247.       for(int var9 = this.tabs - 1; var9 >= var8; --var9) {
  248.          var2 = var9 + this.fronttab;
  249.          if (var2 >= this.tabs) {
  250.             var2 -= this.tabs;
  251.          }
  252.  
  253.          var3 = this.otab[var2] - 14;
  254.          if (var2 == 0) {
  255.             var4 = 0;
  256.          } else {
  257.             var4 = 69;
  258.          }
  259.  
  260.          this.drawslice(var3, var4, 14);
  261.          var3 += 14;
  262.  
  263.          for(int var16 = this.wtab[var2]; var16 > 0; var3 += var6) {
  264.             if (var16 > 6) {
  265.                var6 = 6;
  266.             } else {
  267.                var6 = var16;
  268.             }
  269.  
  270.             this.drawslice(var3, 14, var6);
  271.             var16 -= var6;
  272.          }
  273.  
  274.          this.drawslice(var3, 20, 14);
  275.          this.drawtext(this.otab[var2], this.tabword[var2], var2 == this.mousetab, var2 != this.fronttab);
  276.       }
  277.  
  278.       if (this.fronttab > 0) {
  279.          this.drawslice(0, 54, 15);
  280.          var3 = 15;
  281.  
  282.          for(int var20 = this.otab[this.fronttab] - 14 - var3; var20 > 0; var3 += var6) {
  283.             if (var20 > 6) {
  284.                var6 = 6;
  285.             } else {
  286.                var6 = var20;
  287.             }
  288.  
  289.             this.drawslice(var3, 34, var6);
  290.             var20 -= var6;
  291.          }
  292.       }
  293.  
  294.       var3 = this.otab[this.fronttab] + this.wtab[this.fronttab] + 14;
  295.  
  296.       for(int var21 = this.wid - 14 - var3; var21 > 0; var3 += var6) {
  297.          if (var21 > 6) {
  298.             var6 = 6;
  299.          } else {
  300.             var6 = var21;
  301.          }
  302.  
  303.          this.drawslice(var3, 34, var6);
  304.          var21 -= var6;
  305.       }
  306.  
  307.       this.drawslice(var3, 40, 14);
  308.       ((Component)this).repaint();
  309.    }
  310.  
  311.    public void drawslice(int var1, int var2, int var3) {
  312.       if (this.proto != null) {
  313.          Graphics var4 = this.shadow.getGraphics();
  314.          var4.clipRect(var1, 0, var3, this.hig);
  315.          var4.drawImage(this.proto, var1 - var2, 0, this);
  316.       }
  317.    }
  318.  
  319.    public void drawtext(int var1, String var2, boolean var3, boolean var4) {
  320.       Graphics var5 = this.shadow.getGraphics();
  321.       var5.setFont(new Font(this.tabfont, this.tabweight, this.tabpoints));
  322.       if (!var4) {
  323.          var5.setColor(this.tabcollo);
  324.       } else if (var3) {
  325.          var5.setColor(this.tabcolhi);
  326.       } else {
  327.          var5.setColor(this.tabcol);
  328.       }
  329.  
  330.       var5.drawString(var2, var1 + this.tabbasex, this.tabbasey);
  331.    }
  332.  
  333.    public boolean mouseDown(Event var1, int var2, int var3) {
  334.       int var4 = this.hit(var1, var2, var3);
  335.       if (var4 < 0) {
  336.          return false;
  337.       } else if (var4 == this.fronttab) {
  338.          return false;
  339.       } else {
  340.          try {
  341.             ((Applet)this).getAppletContext().showDocument(new URL(((Applet)this).getDocumentBase(), this.taburl[var4]));
  342.          } catch (MalformedURLException var5) {
  343.             System.out.println("Bad URL: " + this.taburl[var4]);
  344.          }
  345.  
  346.          return true;
  347.       }
  348.    }
  349.  
  350.    public boolean mouseMove(Event var1, int var2, int var3) {
  351.       int var4 = this.hit(var1, var2, var3);
  352.       if (this.mouselast != var4) {
  353.          this.mousetab = var4;
  354.          if (this.mouselast >= 0) {
  355.             this.updatetext(this.mouselast);
  356.          }
  357.  
  358.          if (var4 >= 0) {
  359.             this.updatetext(var4);
  360.          }
  361.  
  362.          this.mouselast = var4;
  363.          ((Component)this).repaint();
  364.       }
  365.  
  366.       return true;
  367.    }
  368.  
  369.    public boolean mouseDrag(Event var1, int var2, int var3) {
  370.       return this.mouseMove(var1, var2, var3);
  371.    }
  372.  
  373.    public boolean mouseEnter(Event var1, int var2, int var3) {
  374.       return this.mouseMove(var1, var2, var3);
  375.    }
  376.  
  377.    public boolean mouseExit(Event var1, int var2, int var3) {
  378.       return this.mouseMove(var1, var2, var3);
  379.    }
  380.  
  381.    public int hit(Event var1, int var2, int var3) {
  382.       boolean var5 = false;
  383.       if (var1 == null) {
  384.          return -1;
  385.       } else {
  386.          var2 = (int)((float)var2 * this.xscale);
  387.          var3 = (int)((float)var3 * this.yscale);
  388.          if (var2 < 5) {
  389.             return -1;
  390.          } else if (var2 > this.wid - 5) {
  391.             return -1;
  392.          } else if (var3 < 5) {
  393.             return -1;
  394.          } else if (var3 > this.hig - 5) {
  395.             return -1;
  396.          } else {
  397.             int var4 = 0;
  398.             int var6 = this.tabs - 1;
  399.  
  400.             for(int var9 = 0; var9 <= var6; ++var9) {
  401.                if (var9 == this.fronttab) {
  402.                   if (var2 >= var4 && var2 < var4 + 14 + this.wtab[var9] + 14) {
  403.                      return var9;
  404.                   }
  405.                } else if ((float)var2 >= (float)var4 + 7.0F && (float)var2 < (float)(var4 + 14 + this.wtab[var9]) + 7.0F) {
  406.                   return var9;
  407.                }
  408.  
  409.                var4 = var4 + 14 + this.wtab[var9];
  410.             }
  411.  
  412.             return -1;
  413.          }
  414.       }
  415.    }
  416.  
  417.    public Image getgif(String var1) {
  418.       Image var2 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), var1);
  419.       MediaTracker var3 = new MediaTracker(this);
  420.       var3.addImage(var2, 0);
  421.  
  422.       try {
  423.          var3.waitForID(0);
  424.       } catch (InterruptedException var4) {
  425.          return null;
  426.       }
  427.  
  428.       if (var2.getWidth(this) <= 0) {
  429.          return null;
  430.       } else {
  431.          return var2.getHeight(this) <= 0 ? null : var2;
  432.       }
  433.    }
  434.  
  435.    public void update(Graphics var1) {
  436.       this.paint(var1);
  437.    }
  438.  
  439.    public void paint(Graphics var1) {
  440.       if (this.shadow == null) {
  441.          var1.drawString("[no tabs]", 2, 12);
  442.       } else {
  443.          var1.drawImage(this.shadow, 0, 0, ((Component)this).size().width, ((Component)this).size().height, this);
  444.       }
  445.    }
  446.  
  447.    public Tablet() {
  448.       this.tabcol = Color.black;
  449.       this.tabcolhi = Color.blue;
  450.       this.tabcollo = Color.gray;
  451.       this.tabheight = 16;
  452.       this.tabbasey = 22;
  453.       this.mousetab = -1;
  454.       this.mouselast = -1;
  455.    }
  456. }
  457.