home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / motif / MListPeer.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  5.7 KB  |  292 lines

  1. package sun.awt.motif;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.List;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ItemEvent;
  11. import java.awt.peer.ListPeer;
  12.  
  13. class MListPeer extends MComponentPeer implements ListPeer {
  14.    static final int MARGIN = 2;
  15.    static final int SPACE = 1;
  16.    static final int SCROLLBAR = 16;
  17.    int fontHeight;
  18.    int fontAscent;
  19.    int fontLeading;
  20.    int vval;
  21.    int hval;
  22.    int vmax;
  23.    int hmax;
  24.  
  25.    native void create(MComponentPeer var1);
  26.  
  27.    native void pDispose();
  28.  
  29.    void initialize() {
  30.       List var1 = (List)super.target;
  31.       int var2 = var1.countItems();
  32.  
  33.       for(int var3 = 0; var3 < var2; ++var3) {
  34.          this.addItem(var1.getItem(var3), -1);
  35.       }
  36.  
  37.       this.setMultipleSelections(var1.allowsMultipleSelections());
  38.       int var4 = var1.getVisibleIndex();
  39.       if (var4 >= 0) {
  40.          this.makeVisible(var4);
  41.       }
  42.  
  43.       int[] var5 = var1.getSelectedIndexes();
  44.  
  45.       for(int var6 = 0; var6 < var5.length; ++var6) {
  46.          this.select(var5[var6]);
  47.       }
  48.  
  49.       super.initialize();
  50.    }
  51.  
  52.    MListPeer(List var1) {
  53.       super(var1);
  54.    }
  55.  
  56.    public void add(String var1, int var2) {
  57.       this.addItem(var1, var2);
  58.    }
  59.  
  60.    public void removeAll() {
  61.       this.clear();
  62.    }
  63.  
  64.    public void setMultipleMode(boolean var1) {
  65.       this.setMultipleSelections(var1);
  66.    }
  67.  
  68.    public Dimension getPreferredSize(int var1) {
  69.       return this.preferredSize(var1);
  70.    }
  71.  
  72.    public Dimension getMinimumSize(int var1) {
  73.       return this.minimumSize(var1);
  74.    }
  75.  
  76.    public native void setMultipleSelections(boolean var1);
  77.  
  78.    public native boolean isSelected(int var1);
  79.  
  80.    public native void addItem(String var1, int var2);
  81.  
  82.    public native void delItems(int var1, int var2);
  83.  
  84.    public native void select(int var1);
  85.  
  86.    public native void deselect(int var1);
  87.  
  88.    public native void makeVisible(int var1);
  89.  
  90.    public void clear() {
  91.       List var1 = (List)super.target;
  92.       this.delItems(0, var1.countItems());
  93.    }
  94.  
  95.    public int[] getSelectedIndexes() {
  96.       List var1 = (List)super.target;
  97.       int var2 = var1.countItems();
  98.       int[] var3 = new int[var2];
  99.       int var4 = 0;
  100.  
  101.       for(int var5 = 0; var5 < var2; ++var5) {
  102.          if (this.isSelected(var5)) {
  103.             var3[var4++] = var5;
  104.          }
  105.       }
  106.  
  107.       int[] var6 = new int[var4];
  108.       System.arraycopy(var3, 0, var6, 0, var4);
  109.       return var6;
  110.    }
  111.  
  112.    public void action(int var1) {
  113.       List var2 = (List)super.target;
  114.       var2.select(var1);
  115.       ((MComponentPeer)this).postEvent(new ActionEvent(super.target, 1001, var2.getItem(var1)));
  116.    }
  117.  
  118.    public void handleListChanged(int var1) {
  119.       List var2 = (List)super.target;
  120.       int[] var3 = ((List)super.target).getSelectedIndexes();
  121.       boolean var4 = false;
  122.  
  123.       for(int var5 = 0; var5 < var3.length; ++var5) {
  124.          if (var1 == var3[var5]) {
  125.             var4 = true;
  126.             break;
  127.          }
  128.       }
  129.  
  130.       ((MComponentPeer)this).postEvent(new ItemEvent(var2, 701, new Integer(var1), var4 ? 1 : 2));
  131.    }
  132.  
  133.    public Dimension minimumSize() {
  134.       return this.minimumSize(4);
  135.    }
  136.  
  137.    public Dimension preferredSize(int var1) {
  138.       return this.minimumSize(var1);
  139.    }
  140.  
  141.    public Dimension minimumSize(int var1) {
  142.       FontMetrics var2 = ((MComponentPeer)this).getFontMetrics(((List)super.target).getFont());
  143.       return new Dimension(20 + var2.stringWidth("0123456789abcde"), (var2.getHeight() + 2) * var1 + 4);
  144.    }
  145.  
  146.    public boolean isFocusTraversable() {
  147.       return true;
  148.    }
  149.  
  150.    public void print(Graphics var1) {
  151.       List var2 = (List)super.target;
  152.       Dimension var3 = ((Component)var2).size();
  153.       Color var4 = ((Component)var2).getBackground();
  154.       Color var5 = ((Component)var2).getForeground();
  155.       int var6 = var2.getItemCount();
  156.       FontMetrics var7 = ((MComponentPeer)this).getFontMetrics(((Component)var2).getFont());
  157.       int var14 = 0;
  158.  
  159.       for(int var15 = 0; var15 < var6; ++var15) {
  160.          int var16 = var7.stringWidth(var2.getItem(var15));
  161.          var14 = Math.max(var14, var16);
  162.       }
  163.  
  164.       this.fontHeight = var7.getHeight();
  165.       this.fontAscent = var7.getAscent();
  166.       this.fontLeading = var7.getLeading();
  167.       byte var12 = 0;
  168.       byte var13 = 0;
  169.       int var10 = this.itemsInWindow(true);
  170.       this.vmax = Math.max(var6 - var10, 0);
  171.       int var9 = var3.height - 16;
  172.       int var8;
  173.       int var11;
  174.       if (this.vmax != 0) {
  175.          var8 = var3.width - 16;
  176.          var11 = var8 - 6;
  177.          this.hmax = Math.max(var14 - var11, 0);
  178.       } else {
  179.          var8 = var3.width;
  180.          var11 = var8 - 6;
  181.          this.hmax = Math.max(var14 - var11, 0);
  182.       }
  183.  
  184.       if (this.hmax == 0) {
  185.          var9 = var3.height;
  186.          var10 = this.itemsInWindow(false);
  187.          this.vmax = Math.max(var6 - var10, 0);
  188.       }
  189.  
  190.       if (this.vmax == 0) {
  191.          var8 = var3.width;
  192.          var11 = var8 - 6;
  193.          this.hmax = Math.max(var14 - var11, 0);
  194.       }
  195.  
  196.       this.hval = 0;
  197.       this.vval = 0;
  198.       var1.setColor(var4);
  199.       var1.fillRect(0, 0, var8, var9);
  200.       if (this.hmax != 0) {
  201.          int var26 = var3.width - (this.vmax == 0 ? 0 : 16);
  202.          Graphics var17 = var1.create();
  203.          var1.fillRect(1, var3.height - 16 - 3, var26 - 1, 13);
  204.  
  205.          try {
  206.             var17.translate(0, var3.height - 14);
  207.             ((MComponentPeer)this).drawScrollbar(var17, var4, 14, var26, var13, this.hmax, this.hval, var11, true);
  208.          } finally {
  209.             var17.dispose();
  210.          }
  211.       }
  212.  
  213.       if (this.vmax != 0) {
  214.          int var27 = var3.height - (this.hmax == 0 ? 0 : 16);
  215.          Graphics var29 = var1.create();
  216.          var1.fillRect(var3.width - 16 - 3, 1, 13, var27 - 1);
  217.  
  218.          try {
  219.             var29.translate(var3.width - 14, 0);
  220.             ((MComponentPeer)this).drawScrollbar(var29, var4, 14, var27, var12, this.vmax, this.vval, var10, false);
  221.          } finally {
  222.             var29.dispose();
  223.          }
  224.       }
  225.  
  226.       ((MComponentPeer)this).draw3DRect(var1, var4, 0, 0, var8 - 1, var9 - 1, false);
  227.       if (var6 > 0) {
  228.          int var28 = this.itemsInWindow(this.hmax != 0);
  229.          int var30 = Math.min(var6 - 1, this.vval + var28 - 1);
  230.          this.paintItems(var1, var4, var5, this.vval, var30);
  231.       }
  232.  
  233.       super.target.print(var1);
  234.    }
  235.  
  236.    int itemsInWindow(boolean var1) {
  237.       Dimension var2 = super.target.size();
  238.       int var3;
  239.       if (var1) {
  240.          var3 = var2.height - 20;
  241.       } else {
  242.          var3 = var2.height - 4;
  243.       }
  244.  
  245.       int var4 = this.fontHeight - this.fontLeading;
  246.       return var3 / (var4 + 2);
  247.    }
  248.  
  249.    void paintItem(Graphics var1, Color var2, Color var3, int var4, boolean var5) {
  250.       List var6 = (List)super.target;
  251.       Dimension var7 = ((Component)var6).size();
  252.       int var8 = var6.getItemCount();
  253.       Color var9 = var2.darker();
  254.       if (var4 >= this.vval && var4 < this.vval + this.itemsInWindow(this.hmax != 0)) {
  255.          int var10 = var7.width - (4 + (this.vmax != 0 ? 16 : 0));
  256.          int var11 = this.fontHeight - this.fontLeading;
  257.          int var12 = var11 + 2;
  258.          int var13 = 2 + var4 * var12 + 1;
  259.          int var14 = var13 - this.vval * var12;
  260.          byte var15 = 3;
  261.          Graphics var16 = var1.create();
  262.          if (var4 > var8 - 1) {
  263.             var16.setColor(var2);
  264.             var16.fillRect(var15 - 2, var14 - 2, var10, var11 + 4);
  265.          } else {
  266.             if (var5) {
  267.                var16.setColor(var9);
  268.                var16.fillRect(var15 - 1, var14 - 1, var10 - 2, var11 + 2);
  269.             } else {
  270.                var16.setColor(var2);
  271.                var16.fillRect(var15 - 1, var14 - 1, var10 - 2, var11 + 2);
  272.             }
  273.  
  274.             var16.setColor(var2);
  275.             var16.drawRect(var15 - 2, var14 - 2, var10 - 1, var11 + 3);
  276.             var16.setColor(var3);
  277.             String var17 = var6.getItem(var4);
  278.             var16.clipRect(var15, var14, var10 - 2, var11);
  279.             var16.drawString(var17, var15 - this.hval, var14 + this.fontAscent);
  280.             var16.dispose();
  281.          }
  282.       }
  283.    }
  284.  
  285.    void paintItems(Graphics var1, Color var2, Color var3, int var4, int var5) {
  286.       for(int var6 = var4; var6 <= var5; ++var6) {
  287.          this.paintItem(var1, var2, var3, var6, false);
  288.       }
  289.  
  290.    }
  291. }
  292.