home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.motif;
-
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.List;
- import java.awt.event.ActionEvent;
- import java.awt.event.ItemEvent;
- import java.awt.peer.ListPeer;
-
- class MListPeer extends MComponentPeer implements ListPeer {
- static final int MARGIN = 2;
- static final int SPACE = 1;
- static final int SCROLLBAR = 16;
- int fontHeight;
- int fontAscent;
- int fontLeading;
- int vval;
- int hval;
- int vmax;
- int hmax;
-
- native void create(MComponentPeer var1);
-
- native void pDispose();
-
- void initialize() {
- List var1 = (List)super.target;
- int var2 = var1.countItems();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.addItem(var1.getItem(var3), -1);
- }
-
- this.setMultipleSelections(var1.allowsMultipleSelections());
- int var4 = var1.getVisibleIndex();
- if (var4 >= 0) {
- this.makeVisible(var4);
- }
-
- int[] var5 = var1.getSelectedIndexes();
-
- for(int var6 = 0; var6 < var5.length; ++var6) {
- this.select(var5[var6]);
- }
-
- super.initialize();
- }
-
- MListPeer(List var1) {
- super(var1);
- }
-
- public void add(String var1, int var2) {
- this.addItem(var1, var2);
- }
-
- public void removeAll() {
- this.clear();
- }
-
- public void setMultipleMode(boolean var1) {
- this.setMultipleSelections(var1);
- }
-
- public Dimension getPreferredSize(int var1) {
- return this.preferredSize(var1);
- }
-
- public Dimension getMinimumSize(int var1) {
- return this.minimumSize(var1);
- }
-
- public native void setMultipleSelections(boolean var1);
-
- public native boolean isSelected(int var1);
-
- public native void addItem(String var1, int var2);
-
- public native void delItems(int var1, int var2);
-
- public native void select(int var1);
-
- public native void deselect(int var1);
-
- public native void makeVisible(int var1);
-
- public void clear() {
- List var1 = (List)super.target;
- this.delItems(0, var1.countItems());
- }
-
- public int[] getSelectedIndexes() {
- List var1 = (List)super.target;
- int var2 = var1.countItems();
- int[] var3 = new int[var2];
- int var4 = 0;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- if (this.isSelected(var5)) {
- var3[var4++] = var5;
- }
- }
-
- int[] var6 = new int[var4];
- System.arraycopy(var3, 0, var6, 0, var4);
- return var6;
- }
-
- public void action(int var1) {
- List var2 = (List)super.target;
- var2.select(var1);
- ((MComponentPeer)this).postEvent(new ActionEvent(super.target, 1001, var2.getItem(var1)));
- }
-
- public void handleListChanged(int var1) {
- List var2 = (List)super.target;
- int[] var3 = ((List)super.target).getSelectedIndexes();
- boolean var4 = false;
-
- for(int var5 = 0; var5 < var3.length; ++var5) {
- if (var1 == var3[var5]) {
- var4 = true;
- break;
- }
- }
-
- ((MComponentPeer)this).postEvent(new ItemEvent(var2, 701, new Integer(var1), var4 ? 1 : 2));
- }
-
- public Dimension minimumSize() {
- return this.minimumSize(4);
- }
-
- public Dimension preferredSize(int var1) {
- return this.minimumSize(var1);
- }
-
- public Dimension minimumSize(int var1) {
- FontMetrics var2 = ((MComponentPeer)this).getFontMetrics(((List)super.target).getFont());
- return new Dimension(20 + var2.stringWidth("0123456789abcde"), (var2.getHeight() + 2) * var1 + 4);
- }
-
- public boolean isFocusTraversable() {
- return true;
- }
-
- public void print(Graphics var1) {
- List var2 = (List)super.target;
- Dimension var3 = ((Component)var2).size();
- Color var4 = ((Component)var2).getBackground();
- Color var5 = ((Component)var2).getForeground();
- int var6 = var2.getItemCount();
- FontMetrics var7 = ((MComponentPeer)this).getFontMetrics(((Component)var2).getFont());
- int var14 = 0;
-
- for(int var15 = 0; var15 < var6; ++var15) {
- int var16 = var7.stringWidth(var2.getItem(var15));
- var14 = Math.max(var14, var16);
- }
-
- this.fontHeight = var7.getHeight();
- this.fontAscent = var7.getAscent();
- this.fontLeading = var7.getLeading();
- byte var12 = 0;
- byte var13 = 0;
- int var10 = this.itemsInWindow(true);
- this.vmax = Math.max(var6 - var10, 0);
- int var9 = var3.height - 16;
- int var8;
- int var11;
- if (this.vmax != 0) {
- var8 = var3.width - 16;
- var11 = var8 - 6;
- this.hmax = Math.max(var14 - var11, 0);
- } else {
- var8 = var3.width;
- var11 = var8 - 6;
- this.hmax = Math.max(var14 - var11, 0);
- }
-
- if (this.hmax == 0) {
- var9 = var3.height;
- var10 = this.itemsInWindow(false);
- this.vmax = Math.max(var6 - var10, 0);
- }
-
- if (this.vmax == 0) {
- var8 = var3.width;
- var11 = var8 - 6;
- this.hmax = Math.max(var14 - var11, 0);
- }
-
- this.hval = 0;
- this.vval = 0;
- var1.setColor(var4);
- var1.fillRect(0, 0, var8, var9);
- if (this.hmax != 0) {
- int var26 = var3.width - (this.vmax == 0 ? 0 : 16);
- Graphics var17 = var1.create();
- var1.fillRect(1, var3.height - 16 - 3, var26 - 1, 13);
-
- try {
- var17.translate(0, var3.height - 14);
- ((MComponentPeer)this).drawScrollbar(var17, var4, 14, var26, var13, this.hmax, this.hval, var11, true);
- } finally {
- var17.dispose();
- }
- }
-
- if (this.vmax != 0) {
- int var27 = var3.height - (this.hmax == 0 ? 0 : 16);
- Graphics var29 = var1.create();
- var1.fillRect(var3.width - 16 - 3, 1, 13, var27 - 1);
-
- try {
- var29.translate(var3.width - 14, 0);
- ((MComponentPeer)this).drawScrollbar(var29, var4, 14, var27, var12, this.vmax, this.vval, var10, false);
- } finally {
- var29.dispose();
- }
- }
-
- ((MComponentPeer)this).draw3DRect(var1, var4, 0, 0, var8 - 1, var9 - 1, false);
- if (var6 > 0) {
- int var28 = this.itemsInWindow(this.hmax != 0);
- int var30 = Math.min(var6 - 1, this.vval + var28 - 1);
- this.paintItems(var1, var4, var5, this.vval, var30);
- }
-
- super.target.print(var1);
- }
-
- int itemsInWindow(boolean var1) {
- Dimension var2 = super.target.size();
- int var3;
- if (var1) {
- var3 = var2.height - 20;
- } else {
- var3 = var2.height - 4;
- }
-
- int var4 = this.fontHeight - this.fontLeading;
- return var3 / (var4 + 2);
- }
-
- void paintItem(Graphics var1, Color var2, Color var3, int var4, boolean var5) {
- List var6 = (List)super.target;
- Dimension var7 = ((Component)var6).size();
- int var8 = var6.getItemCount();
- Color var9 = var2.darker();
- if (var4 >= this.vval && var4 < this.vval + this.itemsInWindow(this.hmax != 0)) {
- int var10 = var7.width - (4 + (this.vmax != 0 ? 16 : 0));
- int var11 = this.fontHeight - this.fontLeading;
- int var12 = var11 + 2;
- int var13 = 2 + var4 * var12 + 1;
- int var14 = var13 - this.vval * var12;
- byte var15 = 3;
- Graphics var16 = var1.create();
- if (var4 > var8 - 1) {
- var16.setColor(var2);
- var16.fillRect(var15 - 2, var14 - 2, var10, var11 + 4);
- } else {
- if (var5) {
- var16.setColor(var9);
- var16.fillRect(var15 - 1, var14 - 1, var10 - 2, var11 + 2);
- } else {
- var16.setColor(var2);
- var16.fillRect(var15 - 1, var14 - 1, var10 - 2, var11 + 2);
- }
-
- var16.setColor(var2);
- var16.drawRect(var15 - 2, var14 - 2, var10 - 1, var11 + 3);
- var16.setColor(var3);
- String var17 = var6.getItem(var4);
- var16.clipRect(var15, var14, var10 - 2, var11);
- var16.drawString(var17, var15 - this.hval, var14 + this.fontAscent);
- var16.dispose();
- }
- }
- }
-
- void paintItems(Graphics var1, Color var2, Color var3, int var4, int var5) {
- for(int var6 = var4; var6 <= var5; ++var6) {
- this.paintItem(var1, var2, var3, var6, false);
- }
-
- }
- }
-