home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 May / PCO_5_97.ISO / FilesBBS / OS2 / CSIME.ARJ / CSIME.ZIP / csime / mug / ui / ImageButton.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-02-09  |  5.4 KB  |  227 lines

  1. package mug.ui;
  2.  
  3. import java.awt.Canvas;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Dimension;
  7. import java.awt.Event;
  8. import java.awt.Font;
  9. import java.awt.FontMetrics;
  10. import java.awt.Graphics;
  11. import java.awt.Image;
  12.  
  13. public class ImageButton extends Canvas {
  14.    public static final int HORIZONTAL = 0;
  15.    public static final int VERTICAL = 1;
  16.    protected static final int TOPLEFT = 0;
  17.    protected static final int BOTTOMRIGHT = 1;
  18.    protected static final int EDGE = 2;
  19.    protected static final int GAP = 2;
  20.    protected Image _image;
  21.    protected String _label;
  22.    protected int _orientation = 1;
  23.    protected boolean _pressed = false;
  24.    protected static final double BRIGHT = 1.1;
  25.    protected static final double BRIGHT2 = 1.35;
  26.    protected static final double DARK = (double)0.75F;
  27.    protected static final double DARK2 = 0.65;
  28.  
  29.    public ImageButton() {
  30.    }
  31.  
  32.    public ImageButton(Image var1) {
  33.       this._image = var1;
  34.    }
  35.  
  36.    public ImageButton(String var1) {
  37.       this._label = var1;
  38.    }
  39.  
  40.    public ImageButton(Image var1, String var2) {
  41.       this._image = var1;
  42.       this._label = var2;
  43.    }
  44.  
  45.    public Image getImage() {
  46.       return this._image;
  47.    }
  48.  
  49.    public void setImage(Image var1) {
  50.       this._image = var1;
  51.       ((Component)this).repaint();
  52.    }
  53.  
  54.    public String getLabel() {
  55.       return this._label;
  56.    }
  57.  
  58.    public void setLabel(String var1) {
  59.       this._label = var1;
  60.       ((Component)this).repaint();
  61.    }
  62.  
  63.    public ImageButton(Image var1, String var2, int var3) {
  64.       this._image = var1;
  65.       this._label = var2;
  66.       this._orientation = var3;
  67.    }
  68.  
  69.    public Dimension preferredSize() {
  70.       Dimension var1 = this.imageSize();
  71.       Dimension var2 = this.labelSize();
  72.       return this._orientation == 0 ? new Dimension(var1.width + var2.width + 4 + (2 + this.haveBoth()) * 2, Math.max(var1.height, var2.height) + 4 + 4) : new Dimension(Math.max(var1.width, var2.width) + 4 + 4, var1.height + var2.height + 4 + (2 + this.haveBoth()) * 2);
  73.    }
  74.  
  75.    public Dimension minimumSize() {
  76.       return this.preferredSize();
  77.    }
  78.  
  79.    public boolean handleEvent(Event var1) {
  80.       if (var1.id == 501) {
  81.          this._pressed = true;
  82.          ((Component)this).repaint();
  83.       } else if (var1.id == 506) {
  84.          if (((Component)this).inside(var1.x, var1.y) != this._pressed) {
  85.             this._pressed = !this._pressed;
  86.             ((Component)this).repaint();
  87.          }
  88.       } else {
  89.          if (var1.id != 502) {
  90.             return super.handleEvent(var1);
  91.          }
  92.  
  93.          this._pressed = false;
  94.          ((Component)this).repaint();
  95.          if (((Component)this).inside(var1.x, var1.y)) {
  96.             ((Component)this).postEvent(new Event(this, 1001, this._label));
  97.          }
  98.       }
  99.  
  100.       return true;
  101.    }
  102.  
  103.    public void paint(Graphics var1) {
  104.       Dimension var2 = ((Component)this).size();
  105.       if (this._pressed) {
  106.          var1.setColor(this.dark());
  107.          var1.fillRect(0, 0, var2.width, var2.height);
  108.          var1.setColor(this.dark2());
  109.          this.drawEdge(var1, 0, 2);
  110.          var1.setColor(this.bright());
  111.          this.drawEdge(var1, 1, 2);
  112.       } else {
  113.          var1.setColor(((Component)this).getBackground());
  114.          var1.fillRect(0, 0, var2.width, var2.height);
  115.          var1.setColor(this.bright());
  116.          this.drawEdge(var1, 0, 2);
  117.          var1.setColor(this.dark());
  118.          this.drawEdge(var1, 1, 2);
  119.       }
  120.  
  121.       this.drawImageAndLabel(var1);
  122.    }
  123.  
  124.    protected Color bright() {
  125.       Color var1 = ((Component)this).getBackground();
  126.       return new Color(Math.min((int)((double)var1.getRed() * 1.1), 255), Math.min((int)((double)var1.getGreen() * 1.1), 255), Math.min((int)((double)var1.getBlue() * 1.1), 255));
  127.    }
  128.  
  129.    protected Color bright2() {
  130.       Color var1 = ((Component)this).getBackground();
  131.       return new Color(Math.min((int)((double)var1.getRed() * 1.35), 255), Math.min((int)((double)var1.getGreen() * 1.35), 255), Math.min((int)((double)var1.getBlue() * 1.35), 255));
  132.    }
  133.  
  134.    protected Color dark() {
  135.       Color var1 = ((Component)this).getBackground();
  136.       return new Color(Math.max((int)((double)var1.getRed() * (double)0.75F), 0), Math.max((int)((double)var1.getGreen() * (double)0.75F), 0), Math.max((int)((double)var1.getBlue() * (double)0.75F), 0));
  137.    }
  138.  
  139.    protected Color dark2() {
  140.       Color var1 = ((Component)this).getBackground();
  141.       return new Color(Math.max((int)((double)var1.getRed() * 0.65), 0), Math.max((int)((double)var1.getGreen() * 0.65), 0), Math.max((int)((double)var1.getBlue() * 0.65), 0));
  142.    }
  143.  
  144.    protected void drawEdge(Graphics var1, int var2, int var3) {
  145.       this.drawEdge(var1, var2, var3, true);
  146.    }
  147.  
  148.    protected void drawEdge(Graphics var1, int var2, int var3, boolean var4) {
  149.       Dimension var5 = ((Component)this).size();
  150.       switch (var2) {
  151.          case 0:
  152.             for(int var8 = 0; var8 < var3; ++var8) {
  153.                int var9 = var4 ? var8 : 0;
  154.                var1.drawLine(var9, var8, var5.width - var9 - 1, var8);
  155.                var1.drawLine(var8, var9 + 1, var8, var5.height - var9 - 2);
  156.             }
  157.  
  158.             return;
  159.          case 1:
  160.             for(int var6 = 0; var6 < var3; ++var6) {
  161.                int var7 = var4 ? var6 : 0;
  162.                var1.drawLine(var5.width - var6 - 1, var7 + 1, var5.width - var6 - 1, var5.height - var7 - 2);
  163.                var1.drawLine(var7, var5.height - var6 - 1, var5.width - var7 - 1, var5.height - var6 - 1);
  164.             }
  165.  
  166.             return;
  167.          default:
  168.       }
  169.    }
  170.  
  171.    public void drawImageAndLabel(Graphics var1) {
  172.       this.drawImageAndLabel(var1, 0);
  173.    }
  174.  
  175.    public void drawImageAndLabel(Graphics var1, int var2) {
  176.       Dimension var3 = ((Component)this).size();
  177.       if (this._orientation == 0) {
  178.          int var4 = (var3.width - this.preferredSize().width) / 2 + 2 + 2;
  179.          if (this._image != null) {
  180.             var1.drawImage(this._image, var4 + var2, (var3.height - this._image.getHeight(this)) / 2 + var2, this);
  181.             var4 += this._image.getWidth(this) + 2;
  182.          }
  183.  
  184.          if (this._label != null) {
  185.             Font var5 = ((Component)this).getFont();
  186.             FontMetrics var6 = ((Component)this).getFontMetrics(var5);
  187.             var1.setColor(((Component)this).getForeground());
  188.             var1.setFont(var5);
  189.             var1.drawString(this._label, var4 + var2, (var3.height - var6.getHeight()) / 2 + var6.getAscent() + var2);
  190.             return;
  191.          }
  192.       } else {
  193.          int var7 = (var3.height - this.preferredSize().height) / 2 + 2 + 2;
  194.          if (this._image != null) {
  195.             var1.drawImage(this._image, (var3.width - this._image.getWidth(this)) / 2 + var2, var7 + var2, this);
  196.             var7 += this._image.getHeight(this) + 2;
  197.          }
  198.  
  199.          if (this._label != null) {
  200.             Font var8 = ((Component)this).getFont();
  201.             FontMetrics var9 = ((Component)this).getFontMetrics(var8);
  202.             var1.setColor(((Component)this).getForeground());
  203.             var1.setFont(var8);
  204.             var1.drawString(this._label, (var3.width - var9.stringWidth(this._label)) / 2 + var2, var7 + var9.getAscent() + var2);
  205.          }
  206.       }
  207.  
  208.    }
  209.  
  210.    protected int haveBoth() {
  211.       return this._image != null && this._label != null ? 1 : 0;
  212.    }
  213.  
  214.    protected Dimension imageSize() {
  215.       return this._image != null ? new Dimension(this._image.getWidth(this), this._image.getHeight(this)) : new Dimension(0, 0);
  216.    }
  217.  
  218.    protected Dimension labelSize() {
  219.       if (this._label != null) {
  220.          FontMetrics var1 = ((Component)this).getFontMetrics(((Component)this).getFont());
  221.          return new Dimension(var1.stringWidth(this._label), var1.getHeight());
  222.       } else {
  223.          return new Dimension(0, 0);
  224.       }
  225.    }
  226. }
  227.