home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / PackLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  6.0 KB  |  331 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.ClassInfo;
  4. import netscape.util.Codable;
  5. import netscape.util.CodingException;
  6. import netscape.util.Decoder;
  7. import netscape.util.Encoder;
  8. import netscape.util.Hashtable;
  9. import netscape.util.Vector;
  10.  
  11. public class PackLayout implements LayoutManager, Codable {
  12.    Hashtable viewConstraints = new Hashtable();
  13.    Vector viewVector = new Vector();
  14.    PackConstraints defaultConstraints;
  15.    static final String VIEWCONSTRAINTS_KEY = "viewConstraints";
  16.    static final String VIEWVECTOR_KEY = "viewVector";
  17.    static final String DEFAULT_CONSTRAINTS_KEY = "defaultConstraints";
  18.  
  19.    public PackConstraints defaultConstraints() {
  20.       if (this.defaultConstraints == null) {
  21.          this.defaultConstraints = new PackConstraints();
  22.       }
  23.  
  24.       return this.defaultConstraints;
  25.    }
  26.  
  27.    public void setDefaultConstraints(PackConstraints var1) {
  28.       if (!var1.equals(this.defaultConstraints())) {
  29.          int var3 = this.viewVector.count();
  30.  
  31.          for(int var2 = 0; var2 < var3; ++var2) {
  32.             this.constraintsFor((View)this.viewVector.elementAt(var2));
  33.          }
  34.       }
  35.  
  36.       this.defaultConstraints = var1;
  37.    }
  38.  
  39.    public PackConstraints constraintsFor(View var1) {
  40.       if (this.viewConstraints.get(var1) == null) {
  41.          this.setConstraints(var1, this.defaultConstraints());
  42.       }
  43.  
  44.       return (PackConstraints)this.viewConstraints.get(var1);
  45.    }
  46.  
  47.    public void addSubview(View var1) {
  48.       this.viewVector.addElementIfAbsent(var1);
  49.    }
  50.  
  51.    public void setConstraints(View var1, PackConstraints var2) {
  52.       this.viewVector.addElementIfAbsent(var1);
  53.       this.viewConstraints.put(var1, var2.clone());
  54.    }
  55.  
  56.    public void removeSubview(View var1) {
  57.       this.viewConstraints.remove(var1);
  58.       this.viewVector.removeElement(var1);
  59.    }
  60.  
  61.    public void layoutView(View var1, int var2, int var3) {
  62.       int var7 = 0;
  63.       int var8 = 0;
  64.       int var9 = var1.bounds.width;
  65.       int var10 = var1.bounds.height;
  66.       Vector var28 = var1.subviews();
  67.       int var6 = var28.count();
  68.  
  69.       for(int var5 = 0; var5 < var6; ++var5) {
  70.          View var4 = (View)var28.elementAt(var5);
  71.          PackConstraints var29 = (PackConstraints)this.viewConstraints.get(var4);
  72.          if (var29 == null) {
  73.             var29 = this.defaultConstraints();
  74.          }
  75.  
  76.          int var19 = var29.side();
  77.          int var20 = var29.padX() * 2;
  78.          int var21 = var29.padY() * 2;
  79.          int var22 = var29.internalPadX();
  80.          int var23 = var29.internalPadY();
  81.          boolean var25 = var29.expand();
  82.          boolean var26 = var29.fillX();
  83.          boolean var27 = var29.fillY();
  84.          int var24 = var29.anchor();
  85.          Size var30 = this.preferredLayoutSize(var4);
  86.          int var11;
  87.          int var12;
  88.          int var13;
  89.          int var14;
  90.          if (var19 != 0 && var19 != 1) {
  91.             var14 = var10;
  92.             var13 = var30.width + var20 + var22;
  93.             if (var25) {
  94.                var13 += this.XExpansion(var4, var9);
  95.             }
  96.  
  97.             var9 -= var13;
  98.             if (var9 < 0) {
  99.                var13 += var9;
  100.                var9 = 0;
  101.             }
  102.  
  103.             var12 = var8;
  104.             if (var19 == 2) {
  105.                var11 = var7;
  106.                var7 += var13;
  107.             } else {
  108.                var11 = var7 + var9;
  109.             }
  110.          } else {
  111.             var13 = var9;
  112.             var14 = var30.height + var21 + var23;
  113.             if (var25) {
  114.                var14 += this.YExpansion(var4, var10);
  115.             }
  116.  
  117.             var10 -= var14;
  118.             if (var10 < 0) {
  119.                var14 += var10;
  120.                var10 = 0;
  121.             }
  122.  
  123.             var11 = var7;
  124.             if (var19 == 0) {
  125.                var12 = var8;
  126.                var8 += var14;
  127.             } else {
  128.                var12 = var8 + var10;
  129.             }
  130.          }
  131.  
  132.          int var15 = var30.width + var22;
  133.          if (var26 || var15 > var13 - var20) {
  134.             var15 = var13 - var20;
  135.          }
  136.  
  137.          int var16 = var30.height + var23;
  138.          if (var27 || var16 > var14 - var21) {
  139.             var16 = var14 - var21;
  140.          }
  141.  
  142.          var20 /= 2;
  143.          var21 /= 2;
  144.          int var17;
  145.          int var18;
  146.          switch (var24) {
  147.             case 0:
  148.                var17 = var11 + (var13 - var15) / 2;
  149.                var18 = var12 + var21;
  150.                break;
  151.             case 1:
  152.                var17 = var11 + var13 - var15 - var20;
  153.                var18 = var12 + var21;
  154.                break;
  155.             case 2:
  156.                var17 = var11 + var13 - var15 - var20;
  157.                var18 = var12 + (var14 - var16) / 2;
  158.                break;
  159.             case 3:
  160.                var17 = var11 + var13 - var15 - var20;
  161.                var18 = var12 + var14 - var16 - var21;
  162.                break;
  163.             case 4:
  164.                var17 = var11 + (var13 - var15) / 2;
  165.                var18 = var12 + var14 - var16 - var21;
  166.                break;
  167.             case 5:
  168.                var17 = var11 + var20;
  169.                var18 = var12 + var14 - var16 - var21;
  170.                break;
  171.             case 6:
  172.                var17 = var11 + var20;
  173.                var18 = var12 + (var14 - var16) / 2;
  174.                break;
  175.             case 7:
  176.                var17 = var11 + var20;
  177.                var18 = var12 + var21;
  178.                break;
  179.             case 8:
  180.             default:
  181.                var17 = var11 + (var13 - var15) / 2;
  182.                var18 = var12 + (var14 - var16) / 2;
  183.          }
  184.  
  185.          var4.setBounds(var17, var18, var15, var16);
  186.       }
  187.  
  188.    }
  189.  
  190.    private int XExpansion(View var1, int var2) {
  191.       int var5 = var2;
  192.       int var4 = 0;
  193.       int var13 = this.viewVector.count();
  194.  
  195.       for(int var12 = this.viewVector.indexOf(var1); var12 < var13; ++var12) {
  196.          View var14 = (View)this.viewVector.elementAt(var12);
  197.          PackConstraints var3 = (PackConstraints)this.viewConstraints.get(var14);
  198.          if (var3 == null) {
  199.             var3 = this.defaultConstraints();
  200.          }
  201.  
  202.          int var8 = var3.padX() * 2;
  203.          int var9 = var3.internalPadX();
  204.          boolean var11 = var3.expand();
  205.          int var10 = var3.side();
  206.          int var7 = this.preferredLayoutSize(var14).width + var8 + var9;
  207.          if (var10 != 0 && var10 != 1) {
  208.             var2 -= var7;
  209.             if (var11) {
  210.                ++var4;
  211.             }
  212.          } else {
  213.             int var6 = (var2 - var7) / var4;
  214.             if (var6 < var5) {
  215.                var5 = var6;
  216.             }
  217.          }
  218.       }
  219.  
  220.       int var15 = var2 / var4;
  221.       if (var15 < var5) {
  222.          var5 = var15;
  223.       }
  224.  
  225.       if (var5 < 0) {
  226.          return 0;
  227.       } else {
  228.          return var5;
  229.       }
  230.    }
  231.  
  232.    private int YExpansion(View var1, int var2) {
  233.       int var5 = var2;
  234.       int var4 = 0;
  235.       int var13 = this.viewVector.count();
  236.  
  237.       for(int var12 = this.viewVector.indexOf(var1); var12 < var13; ++var12) {
  238.          View var14 = (View)this.viewVector.elementAt(var12);
  239.          PackConstraints var3 = (PackConstraints)this.viewConstraints.get(var14);
  240.          if (var3 == null) {
  241.             var3 = this.defaultConstraints();
  242.          }
  243.  
  244.          int var8 = var3.padY() * 2;
  245.          int var9 = var3.internalPadY();
  246.          boolean var10 = var3.expand();
  247.          int var11 = var3.side();
  248.          int var7 = this.preferredLayoutSize(var14).height + var8 + var9;
  249.          if (var11 != 2 && var11 != 3) {
  250.             var2 -= var7;
  251.             if (var10) {
  252.                ++var4;
  253.             }
  254.          } else {
  255.             int var6 = (var2 - var7) / var4;
  256.             if (var6 < var5) {
  257.                var5 = var6;
  258.             }
  259.          }
  260.       }
  261.  
  262.       int var15 = var2 / var4;
  263.       if (var15 < var5) {
  264.          var5 = var15;
  265.       }
  266.  
  267.       if (var5 < 0) {
  268.          return 0;
  269.       } else {
  270.          return var5;
  271.       }
  272.    }
  273.  
  274.    private Rect containedRect(View var1) {
  275.       Rect var4 = new Rect(0, 0, 0, 0);
  276.       Vector var5 = var1.subviews();
  277.       if (var5 != null && var5.count() >= 1) {
  278.          var1.layoutView(0, 0);
  279.          int var3 = var5.count();
  280.  
  281.          for(int var2 = 0; var2 < var3; ++var2) {
  282.             if (var2 == 0) {
  283.                var4 = this.containedRect((View)var5.elementAt(var2));
  284.             }
  285.  
  286.             Rect var6 = this.containedRect((View)var5.elementAt(var2));
  287.             var4.unionWith(var6);
  288.          }
  289.  
  290.          return var4;
  291.       } else {
  292.          return new Rect(var1.bounds.x, var1.bounds.y, var1.minSize().width, var1.minSize().height);
  293.       }
  294.    }
  295.  
  296.    public Size preferredLayoutSize(View var1) {
  297.       Size var2 = var1.minSize();
  298.       if (var2.width == 0 && var2.height == 0) {
  299.          Rect var3 = this.containedRect(var1);
  300.          return new Size(var3.x + var3.width, var3.y + var3.height);
  301.       } else {
  302.          return var2;
  303.       }
  304.    }
  305.  
  306.    public void describeClassInfo(ClassInfo var1) {
  307.       var1.addClass("netscape.application.PackLayout", 2);
  308.       var1.addField("viewConstraints", (byte)18);
  309.       var1.addField("viewVector", (byte)18);
  310.       var1.addField("defaultConstraints", (byte)18);
  311.    }
  312.  
  313.    public void decode(Decoder var1) throws CodingException {
  314.       this.viewConstraints = (Hashtable)var1.decodeObject("viewConstraints");
  315.       this.viewVector = (Vector)var1.decodeObject("viewVector");
  316.       if (var1.versionForClassName("netscape.application.PackLayout") > 1) {
  317.          this.defaultConstraints = (PackConstraints)var1.decodeObject("defaultConstraints");
  318.       }
  319.  
  320.    }
  321.  
  322.    public void encode(Encoder var1) throws CodingException {
  323.       var1.encodeObject("viewConstraints", this.viewConstraints);
  324.       var1.encodeObject("viewVector", this.viewVector);
  325.       var1.encodeObject("defaultConstraints", this.defaultConstraints);
  326.    }
  327.  
  328.    public void finishDecoding() throws CodingException {
  329.    }
  330. }
  331.