home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / JLayeredPane.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  6.0 KB  |  334 lines

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.accessibility.Accessible;
  4. import com.sun.java.accessibility.AccessibleContext;
  5. import java.awt.Color;
  6. import java.awt.Component;
  7. import java.awt.Container;
  8. import java.awt.Graphics;
  9. import java.awt.LayoutManager;
  10. import java.awt.Rectangle;
  11. import java.util.Hashtable;
  12.  
  13. public class JLayeredPane extends JComponent implements Accessible {
  14.    public static final Integer DEFAULT_LAYER = new Integer(0);
  15.    public static final Integer PALETTE_LAYER = new Integer(100);
  16.    public static final Integer MODAL_LAYER = new Integer(200);
  17.    public static final Integer POPUP_LAYER = new Integer(300);
  18.    public static final Integer DRAG_LAYER = new Integer(400);
  19.    public static final Integer FRAME_CONTENT_LAYER = new Integer(-30000);
  20.    public static final String LAYER_PROPERTY = "layeredContainerLayer";
  21.    private Hashtable componentToLayer;
  22.    private boolean optimizedDrawingPossible = true;
  23.  
  24.    public JLayeredPane() {
  25.       ((Container)this).setLayout((LayoutManager)null);
  26.    }
  27.  
  28.    private void validateOptimizedDrawing() {
  29.       boolean var1 = false;
  30.       Object var2 = ((Component)this).getTreeLock();
  31.       synchronized(var2){}
  32.  
  33.       try {
  34.          Object var6 = null;
  35.          int var4 = 0;
  36.  
  37.          for(int var5 = ((Container)this).getComponentCount(); var4 < var5; ++var4) {
  38.             Integer var9 = null;
  39.             if ((((Container)this).getComponent(var4) instanceof JInternalFrame || ((Container)this).getComponent(var4) instanceof JComponent && (var9 = (Integer)((JComponent)((Container)this).getComponent(var4)).getClientProperty("layeredContainerLayer")) != null) && (var9 == null || !var9.equals(FRAME_CONTENT_LAYER))) {
  40.                var1 = true;
  41.                break;
  42.             }
  43.          }
  44.       } catch (Throwable var8) {
  45.          throw var8;
  46.       }
  47.  
  48.       if (var1) {
  49.          this.optimizedDrawingPossible = false;
  50.       } else {
  51.          this.optimizedDrawingPossible = true;
  52.       }
  53.    }
  54.  
  55.    protected void addImpl(Component var1, Object var2, int var3) {
  56.       int var4 = DEFAULT_LAYER;
  57.       if (var2 instanceof Integer) {
  58.          var4 = (Integer)var2;
  59.          this.setLayer(var1, var4);
  60.       } else {
  61.          var4 = this.getLayer(var1);
  62.       }
  63.  
  64.       int var5 = this.insertIndexForLayer(var4, var3);
  65.       super.addImpl(var1, var2, var5);
  66.       var1.validate();
  67.       var1.repaint();
  68.       this.validateOptimizedDrawing();
  69.    }
  70.  
  71.    public void remove(int var1) {
  72.       ((Container)this).getComponent(var1);
  73.       super.remove(var1);
  74.       this.validateOptimizedDrawing();
  75.    }
  76.  
  77.    public boolean isOptimizedDrawingEnabled() {
  78.       return this.optimizedDrawingPossible;
  79.    }
  80.  
  81.    public static void putLayer(JComponent var0, int var1) {
  82.       Integer var2 = new Integer(var1);
  83.       var0.putClientProperty("layeredContainerLayer", var2);
  84.    }
  85.  
  86.    public static int getLayer(JComponent var0) {
  87.       Integer var1;
  88.       return (var1 = (Integer)var0.getClientProperty("layeredContainerLayer")) != null ? var1 : DEFAULT_LAYER;
  89.    }
  90.  
  91.    public static JLayeredPane getLayeredPaneAbove(Component var0) {
  92.       if (var0 == null) {
  93.          return null;
  94.       } else {
  95.          Container var1;
  96.          for(var1 = var0.getParent(); var1 != null && !(var1 instanceof JLayeredPane); var1 = ((Component)var1).getParent()) {
  97.          }
  98.  
  99.          return (JLayeredPane)var1;
  100.       }
  101.    }
  102.  
  103.    public void setLayer(Component var1, int var2) {
  104.       this.setLayer(var1, var2, -1);
  105.    }
  106.  
  107.    public void setLayer(Component var1, int var2, int var3) {
  108.       Integer var4 = this.getObjectForLayer(var2);
  109.       if (var2 == this.getLayer(var1) && var3 == this.getPosition(var1)) {
  110.          if (var1 instanceof JComponent) {
  111.             ((JComponent)this).repaint(((JComponent)var1)._bounds);
  112.          } else {
  113.             ((JComponent)this).repaint(var1.getBounds());
  114.          }
  115.       } else {
  116.          if (var1 instanceof JComponent) {
  117.             ((JComponent)var1).putClientProperty("layeredContainerLayer", var4);
  118.          } else {
  119.             this.getComponentToLayer().put("layeredContainerLayer", var4);
  120.          }
  121.  
  122.          if (var1.getParent() != null && var1.getParent() == this) {
  123.             ((Container)this).remove(var1);
  124.             ((Container)this).add(var1, (Object)null, var3);
  125.             if (var1 instanceof JComponent) {
  126.                ((JComponent)this).repaint(((JComponent)var1)._bounds);
  127.             } else {
  128.                ((JComponent)this).repaint(var1.getBounds());
  129.             }
  130.          } else if (var1 instanceof JComponent) {
  131.             ((JComponent)this).repaint(((JComponent)var1)._bounds);
  132.          } else {
  133.             ((JComponent)this).repaint(var1.getBounds());
  134.          }
  135.       }
  136.    }
  137.  
  138.    public int getLayer(Component var1) {
  139.       Integer var2;
  140.       if (var1 instanceof JComponent) {
  141.          var2 = (Integer)((JComponent)var1).getClientProperty("layeredContainerLayer");
  142.       } else {
  143.          var2 = (Integer)this.getComponentToLayer().get("layeredContainerLayer");
  144.       }
  145.  
  146.       return var2 == null ? DEFAULT_LAYER : var2;
  147.    }
  148.  
  149.    public int getIndexOf(Component var1) {
  150.       int var3 = ((Container)this).getComponentCount();
  151.  
  152.       for(int var2 = 0; var2 < var3; ++var2) {
  153.          if (var1 == ((Container)this).getComponent(var2)) {
  154.             return var2;
  155.          }
  156.       }
  157.  
  158.       return -1;
  159.    }
  160.  
  161.    public void moveToFront(Component var1) {
  162.       this.setPosition(var1, 0);
  163.    }
  164.  
  165.    public void moveToBack(Component var1) {
  166.       this.setPosition(var1, this.getComponentCountInLayer(this.getLayer(var1)));
  167.    }
  168.  
  169.    public void setPosition(Component var1, int var2) {
  170.       this.setLayer(var1, this.getLayer(var1), var2);
  171.    }
  172.  
  173.    public int getPosition(Component var1) {
  174.       int var7 = 0;
  175.       int var3 = ((Container)this).getComponentCount();
  176.       int var6 = this.getIndexOf(var1);
  177.       if (var6 == -1) {
  178.          return -1;
  179.       } else {
  180.          int var4 = this.getLayer(var1);
  181.  
  182.          for(int var2 = var6 - 1; var2 >= 0; --var2) {
  183.             int var5 = this.getLayer(((Container)this).getComponent(var2));
  184.             if (var5 != var4) {
  185.                return var7;
  186.             }
  187.  
  188.             ++var7;
  189.          }
  190.  
  191.          return var7;
  192.       }
  193.    }
  194.  
  195.    public int highestLayer() {
  196.       return ((Container)this).getComponentCount() > 0 ? this.getLayer(((Container)this).getComponent(0)) : 0;
  197.    }
  198.  
  199.    public int lowestLayer() {
  200.       int var1 = ((Container)this).getComponentCount();
  201.       return var1 > 0 ? this.getLayer(((Container)this).getComponent(var1 - 1)) : 0;
  202.    }
  203.  
  204.    public int getComponentCountInLayer(int var1) {
  205.       int var5 = 0;
  206.       int var3 = ((Container)this).getComponentCount();
  207.  
  208.       for(int var2 = 0; var2 < var3; ++var2) {
  209.          int var4 = this.getLayer(((Container)this).getComponent(var2));
  210.          if (var4 == var1) {
  211.             ++var5;
  212.          } else if (var5 > 0 || var4 < var1) {
  213.             break;
  214.          }
  215.       }
  216.  
  217.       return var5;
  218.    }
  219.  
  220.    public Component[] getComponentsInLayer(int var1) {
  221.       int var5 = 0;
  222.       Component[] var6 = new Component[this.getComponentCountInLayer(var1)];
  223.       int var3 = ((Container)this).getComponentCount();
  224.  
  225.       for(int var2 = 0; var2 < var3; ++var2) {
  226.          int var4 = this.getLayer(((Container)this).getComponent(var2));
  227.          if (var4 == var1) {
  228.             var6[var5++] = ((Container)this).getComponent(var2);
  229.          } else if (var5 > 0 || var4 < var1) {
  230.             break;
  231.          }
  232.       }
  233.  
  234.       return var6;
  235.    }
  236.  
  237.    public void paint(Graphics var1) {
  238.       if (((JComponent)this).isOpaque()) {
  239.          Rectangle var2 = var1.getClipBounds();
  240.          Color var3 = ((Component)this).getBackground();
  241.          if (var3 == null) {
  242.             var3 = Color.lightGray;
  243.          }
  244.  
  245.          var1.setColor(var3);
  246.          var1.fillRect(var2.x, var2.y, var2.width, var2.height);
  247.       }
  248.  
  249.       super.paint(var1);
  250.    }
  251.  
  252.    protected Hashtable getComponentToLayer() {
  253.       if (this.componentToLayer == null) {
  254.          this.componentToLayer = new Hashtable(4);
  255.       }
  256.  
  257.       return this.componentToLayer;
  258.    }
  259.  
  260.    protected Integer getObjectForLayer(int var1) {
  261.       Integer var2;
  262.       switch (var1) {
  263.          case 0:
  264.             var2 = DEFAULT_LAYER;
  265.             break;
  266.          case 100:
  267.             var2 = PALETTE_LAYER;
  268.             break;
  269.          case 200:
  270.             var2 = MODAL_LAYER;
  271.             break;
  272.          case 300:
  273.             var2 = POPUP_LAYER;
  274.             break;
  275.          case 400:
  276.             var2 = DRAG_LAYER;
  277.             break;
  278.          default:
  279.             var2 = new Integer(var1);
  280.       }
  281.  
  282.       return var2;
  283.    }
  284.  
  285.    protected int insertIndexForLayer(int var1, int var2) {
  286.       int var6 = -1;
  287.       int var7 = -1;
  288.       int var4 = ((Container)this).getComponentCount();
  289.  
  290.       for(int var3 = 0; var3 < var4; ++var3) {
  291.          int var5 = this.getLayer(((Container)this).getComponent(var3));
  292.          if (var6 == -1 && var5 == var1) {
  293.             var6 = var3;
  294.          }
  295.  
  296.          if (var5 < var1) {
  297.             if (var3 == 0) {
  298.                var6 = 0;
  299.                var7 = 0;
  300.             } else {
  301.                var7 = var3;
  302.             }
  303.             break;
  304.          }
  305.       }
  306.  
  307.       if (var6 == -1 && var7 == -1) {
  308.          return var4;
  309.       } else {
  310.          if (var6 != -1 && var7 == -1) {
  311.             var7 = var4;
  312.          }
  313.  
  314.          if (var7 != -1 && var6 == -1) {
  315.             var6 = var7;
  316.          }
  317.  
  318.          if (var2 == -1) {
  319.             return var7;
  320.          } else {
  321.             return var2 > -1 && var6 + var2 <= var7 ? var6 + var2 : var7;
  322.          }
  323.       }
  324.    }
  325.  
  326.    public AccessibleContext getAccessibleContext() {
  327.       if (super.accessibleContext == null) {
  328.          super.accessibleContext = new AccessibleJLayeredPane(this);
  329.       }
  330.  
  331.       return super.accessibleContext;
  332.    }
  333. }
  334.