home *** CD-ROM | disk | FTP | other *** search
- package netscape.application;
-
- import netscape.util.ClassInfo;
- import netscape.util.Codable;
- import netscape.util.CodingException;
- import netscape.util.Decoder;
- import netscape.util.Encoder;
- import netscape.util.Hashtable;
- import netscape.util.Vector;
-
- public class PackLayout implements LayoutManager, Codable {
- Hashtable viewConstraints = new Hashtable();
- Vector viewVector = new Vector();
- PackConstraints defaultConstraints;
- static final String VIEWCONSTRAINTS_KEY = "viewConstraints";
- static final String VIEWVECTOR_KEY = "viewVector";
- static final String DEFAULT_CONSTRAINTS_KEY = "defaultConstraints";
-
- public PackConstraints defaultConstraints() {
- if (this.defaultConstraints == null) {
- this.defaultConstraints = new PackConstraints();
- }
-
- return this.defaultConstraints;
- }
-
- public void setDefaultConstraints(PackConstraints var1) {
- if (!var1.equals(this.defaultConstraints())) {
- int var3 = this.viewVector.count();
-
- for(int var2 = 0; var2 < var3; ++var2) {
- this.constraintsFor((View)this.viewVector.elementAt(var2));
- }
- }
-
- this.defaultConstraints = var1;
- }
-
- public PackConstraints constraintsFor(View var1) {
- if (this.viewConstraints.get(var1) == null) {
- this.setConstraints(var1, this.defaultConstraints());
- }
-
- return (PackConstraints)this.viewConstraints.get(var1);
- }
-
- public void addSubview(View var1) {
- this.viewVector.addElementIfAbsent(var1);
- }
-
- public void setConstraints(View var1, PackConstraints var2) {
- this.viewVector.addElementIfAbsent(var1);
- this.viewConstraints.put(var1, var2.clone());
- }
-
- public void removeSubview(View var1) {
- this.viewConstraints.remove(var1);
- this.viewVector.removeElement(var1);
- }
-
- public void layoutView(View var1, int var2, int var3) {
- int var7 = 0;
- int var8 = 0;
- int var9 = var1.bounds.width;
- int var10 = var1.bounds.height;
- Vector var28 = var1.subviews();
- int var6 = var28.count();
-
- for(int var5 = 0; var5 < var6; ++var5) {
- View var4 = (View)var28.elementAt(var5);
- PackConstraints var29 = (PackConstraints)this.viewConstraints.get(var4);
- if (var29 == null) {
- var29 = this.defaultConstraints();
- }
-
- int var19 = var29.side();
- int var20 = var29.padX() * 2;
- int var21 = var29.padY() * 2;
- int var22 = var29.internalPadX();
- int var23 = var29.internalPadY();
- boolean var25 = var29.expand();
- boolean var26 = var29.fillX();
- boolean var27 = var29.fillY();
- int var24 = var29.anchor();
- Size var30 = this.preferredLayoutSize(var4);
- int var11;
- int var12;
- int var13;
- int var14;
- if (var19 != 0 && var19 != 1) {
- var14 = var10;
- var13 = var30.width + var20 + var22;
- if (var25) {
- var13 += this.XExpansion(var4, var9);
- }
-
- var9 -= var13;
- if (var9 < 0) {
- var13 += var9;
- var9 = 0;
- }
-
- var12 = var8;
- if (var19 == 2) {
- var11 = var7;
- var7 += var13;
- } else {
- var11 = var7 + var9;
- }
- } else {
- var13 = var9;
- var14 = var30.height + var21 + var23;
- if (var25) {
- var14 += this.YExpansion(var4, var10);
- }
-
- var10 -= var14;
- if (var10 < 0) {
- var14 += var10;
- var10 = 0;
- }
-
- var11 = var7;
- if (var19 == 0) {
- var12 = var8;
- var8 += var14;
- } else {
- var12 = var8 + var10;
- }
- }
-
- int var15 = var30.width + var22;
- if (var26 || var15 > var13 - var20) {
- var15 = var13 - var20;
- }
-
- int var16 = var30.height + var23;
- if (var27 || var16 > var14 - var21) {
- var16 = var14 - var21;
- }
-
- var20 /= 2;
- var21 /= 2;
- int var17;
- int var18;
- switch (var24) {
- case 0:
- var17 = var11 + (var13 - var15) / 2;
- var18 = var12 + var21;
- break;
- case 1:
- var17 = var11 + var13 - var15 - var20;
- var18 = var12 + var21;
- break;
- case 2:
- var17 = var11 + var13 - var15 - var20;
- var18 = var12 + (var14 - var16) / 2;
- break;
- case 3:
- var17 = var11 + var13 - var15 - var20;
- var18 = var12 + var14 - var16 - var21;
- break;
- case 4:
- var17 = var11 + (var13 - var15) / 2;
- var18 = var12 + var14 - var16 - var21;
- break;
- case 5:
- var17 = var11 + var20;
- var18 = var12 + var14 - var16 - var21;
- break;
- case 6:
- var17 = var11 + var20;
- var18 = var12 + (var14 - var16) / 2;
- break;
- case 7:
- var17 = var11 + var20;
- var18 = var12 + var21;
- break;
- case 8:
- default:
- var17 = var11 + (var13 - var15) / 2;
- var18 = var12 + (var14 - var16) / 2;
- }
-
- var4.setBounds(var17, var18, var15, var16);
- }
-
- }
-
- private int XExpansion(View var1, int var2) {
- int var5 = var2;
- int var4 = 0;
- int var13 = this.viewVector.count();
-
- for(int var12 = this.viewVector.indexOf(var1); var12 < var13; ++var12) {
- View var14 = (View)this.viewVector.elementAt(var12);
- PackConstraints var3 = (PackConstraints)this.viewConstraints.get(var14);
- if (var3 == null) {
- var3 = this.defaultConstraints();
- }
-
- int var8 = var3.padX() * 2;
- int var9 = var3.internalPadX();
- boolean var11 = var3.expand();
- int var10 = var3.side();
- int var7 = this.preferredLayoutSize(var14).width + var8 + var9;
- if (var10 != 0 && var10 != 1) {
- var2 -= var7;
- if (var11) {
- ++var4;
- }
- } else {
- int var6 = (var2 - var7) / var4;
- if (var6 < var5) {
- var5 = var6;
- }
- }
- }
-
- int var15 = var2 / var4;
- if (var15 < var5) {
- var5 = var15;
- }
-
- if (var5 < 0) {
- return 0;
- } else {
- return var5;
- }
- }
-
- private int YExpansion(View var1, int var2) {
- int var5 = var2;
- int var4 = 0;
- int var13 = this.viewVector.count();
-
- for(int var12 = this.viewVector.indexOf(var1); var12 < var13; ++var12) {
- View var14 = (View)this.viewVector.elementAt(var12);
- PackConstraints var3 = (PackConstraints)this.viewConstraints.get(var14);
- if (var3 == null) {
- var3 = this.defaultConstraints();
- }
-
- int var8 = var3.padY() * 2;
- int var9 = var3.internalPadY();
- boolean var10 = var3.expand();
- int var11 = var3.side();
- int var7 = this.preferredLayoutSize(var14).height + var8 + var9;
- if (var11 != 2 && var11 != 3) {
- var2 -= var7;
- if (var10) {
- ++var4;
- }
- } else {
- int var6 = (var2 - var7) / var4;
- if (var6 < var5) {
- var5 = var6;
- }
- }
- }
-
- int var15 = var2 / var4;
- if (var15 < var5) {
- var5 = var15;
- }
-
- if (var5 < 0) {
- return 0;
- } else {
- return var5;
- }
- }
-
- private Rect containedRect(View var1) {
- Rect var4 = new Rect(0, 0, 0, 0);
- Vector var5 = var1.subviews();
- if (var5 != null && var5.count() >= 1) {
- var1.layoutView(0, 0);
- int var3 = var5.count();
-
- for(int var2 = 0; var2 < var3; ++var2) {
- if (var2 == 0) {
- var4 = this.containedRect((View)var5.elementAt(var2));
- }
-
- Rect var6 = this.containedRect((View)var5.elementAt(var2));
- var4.unionWith(var6);
- }
-
- return var4;
- } else {
- return new Rect(var1.bounds.x, var1.bounds.y, var1.minSize().width, var1.minSize().height);
- }
- }
-
- public Size preferredLayoutSize(View var1) {
- Size var2 = var1.minSize();
- if (var2.width == 0 && var2.height == 0) {
- Rect var3 = this.containedRect(var1);
- return new Size(var3.x + var3.width, var3.y + var3.height);
- } else {
- return var2;
- }
- }
-
- public void describeClassInfo(ClassInfo var1) {
- var1.addClass("netscape.application.PackLayout", 2);
- var1.addField("viewConstraints", (byte)18);
- var1.addField("viewVector", (byte)18);
- var1.addField("defaultConstraints", (byte)18);
- }
-
- public void decode(Decoder var1) throws CodingException {
- this.viewConstraints = (Hashtable)var1.decodeObject("viewConstraints");
- this.viewVector = (Vector)var1.decodeObject("viewVector");
- if (var1.versionForClassName("netscape.application.PackLayout") > 1) {
- this.defaultConstraints = (PackConstraints)var1.decodeObject("defaultConstraints");
- }
-
- }
-
- public void encode(Encoder var1) throws CodingException {
- var1.encodeObject("viewConstraints", this.viewConstraints);
- var1.encodeObject("viewVector", this.viewVector);
- var1.encodeObject("defaultConstraints", this.defaultConstraints);
- }
-
- public void finishDecoding() throws CodingException {
- }
- }
-