home *** CD-ROM | disk | FTP | other *** search
- package webeq3.util;
-
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Insets;
- import java.awt.LayoutManager;
- import java.util.Hashtable;
- import java.util.NoSuchElementException;
- import java.util.StringTokenizer;
-
- public class PackerLayout implements LayoutManager {
- Hashtable compinfo = new Hashtable();
- Hashtable nameinfo = new Hashtable();
- Component firstcomp = null;
- Component lastcomp = null;
- public static final String initText = "PackerLayout (c) 1995 by Daeron Meyer\n";
- static final String F_ANCHOR = "anchor";
- static final String F_EXPAND = "expand";
- static final String F_FILL = "fill";
- static final String F_FILLX = "fillx";
- static final String F_FILLY = "filly";
- static final String F_IPADX = "ipadx";
- static final String F_IPADY = "ipady";
- static final String F_PADX = "padx";
- static final String F_PADY = "pady";
- static final String F_SIDE = "side";
- static final String F_NAME = "name";
- static final String ANCH_TOK_N = "n";
- static final String ANCH_TOK_NE = "ne";
- static final String ANCH_TOK_E = "e";
- static final String ANCH_TOK_SE = "se";
- static final String ANCH_TOK_S = "s";
- static final String ANCH_TOK_SW = "sw";
- static final String ANCH_TOK_W = "w";
- static final String ANCH_TOK_NW = "nw";
- static final String ANCH_TOK_CENTER = "center";
- static final int ANCHOR_N = 0;
- static final int ANCHOR_NE = 1;
- static final int ANCHOR_E = 2;
- static final int ANCHOR_SE = 3;
- static final int ANCHOR_S = 4;
- static final int ANCHOR_SW = 5;
- static final int ANCHOR_W = 6;
- static final int ANCHOR_NW = 7;
- static final int ANCHOR_CENTER = 8;
- static final String EXPAND_TRUE = "true";
- static final String EXPAND_FALSE = "false";
- static final String EXPAND_YES = "1";
- static final String EXPAND_NO = "0";
- static final String FILL_NONE = "none";
- static final String FILL_X = "x";
- static final String FILL_Y = "y";
- static final String FILL_BOTH = "both";
- static final String SIDE_TOP = "top";
- static final String SIDE_BOTTOM = "bottom";
- static final String SIDE_LEFT = "left";
- static final String SIDE_RIGHT = "right";
- static final String CHAR_SEMI = ";";
- static final String CHAR_EQUAL = "=";
- static final String CHAR_ALL = ";=";
- static final String COMPONENT_NEXT = "next";
- static final String COMPONENT_PREV = "prev";
- static final int debug = 0;
-
- public void addLayoutComponent(String var1, Component var2) {
- Object var3 = null;
- Hashtable var6 = new Hashtable();
-
- try {
- if (var2 == null) {
- return;
- }
-
- StringTokenizer var7 = new StringTokenizer(var1, ";=", true);
- String var9 = new String(var7.nextToken());
- var6.put("anchor", new Integer(8));
- var6.put("expand", new Boolean(false));
- var6.put("fillx", new Boolean(false));
- var6.put("filly", new Boolean(false));
- var6.put("ipadx", new Integer(0));
- var6.put("ipady", new Integer(0));
- var6.put("padx", new Integer(0));
- var6.put("pady", new Integer(0));
- var6.put("side", "top");
- this.nameinfo.put(var9, var2);
- this.compinfo.put(var2, var6);
- var6.put("name", var9);
-
- while(var7.hasMoreTokens()) {
- if (!var7.nextToken().equals(";")) {
- throw new NoSuchElementException();
- }
-
- if (!var7.hasMoreTokens()) {
- return;
- }
-
- String var4 = var7.nextToken();
- if (!var7.nextToken().equals("=")) {
- throw new NoSuchElementException();
- }
-
- if (var4.equals("anchor")) {
- String var13 = var7.nextToken();
- if (var13.equals("n")) {
- var6.put(var4, new Integer(0));
- } else if (var13.equals("ne")) {
- var6.put(var4, new Integer(1));
- } else if (var13.equals("e")) {
- var6.put(var4, new Integer(2));
- } else if (var13.equals("se")) {
- var6.put(var4, new Integer(3));
- } else if (var13.equals("s")) {
- var6.put(var4, new Integer(4));
- } else if (var13.equals("sw")) {
- var6.put(var4, new Integer(5));
- } else if (var13.equals("w")) {
- var6.put(var4, new Integer(6));
- } else if (var13.equals("nw")) {
- var6.put(var4, new Integer(7));
- } else {
- if (!var13.equals("center")) {
- throw new NoSuchElementException();
- }
-
- var6.put(var4, new Integer(8));
- }
- } else if (var4.equals("expand")) {
- String var12 = var7.nextToken();
- if (!var12.equals("true") && !var12.equals("1")) {
- if (!var12.equals("false") && !var12.equals("0")) {
- throw new NoSuchElementException();
- }
-
- var6.put(var4, new Boolean(false));
- } else {
- var6.put(var4, new Boolean(true));
- }
- } else if (var4.equals("fill")) {
- String var11 = var7.nextToken();
- if (var11.equals("none")) {
- var6.put(new String("fillx"), new Boolean(false));
- var6.put(new String("filly"), new Boolean(false));
- } else if (var11.equals("x")) {
- var6.put(new String("fillx"), new Boolean(true));
- var6.put(new String("filly"), new Boolean(false));
- } else if (var11.equals("y")) {
- var6.put(new String("fillx"), new Boolean(false));
- var6.put(new String("filly"), new Boolean(true));
- } else {
- if (!var11.equals("both")) {
- throw new NoSuchElementException();
- }
-
- var6.put(new String("fillx"), new Boolean(true));
- var6.put(new String("filly"), new Boolean(true));
- }
- } else if (!var4.equals("ipadx") && !var4.equals("ipady") && !var4.equals("padx") && !var4.equals("pady")) {
- if (var4.equals("side")) {
- String var10 = var7.nextToken();
- if (!var10.equals("top") && !var10.equals("left") && !var10.equals("right") && !var10.equals("bottom")) {
- throw new NoSuchElementException();
- }
-
- var6.put(var4, var10);
- }
- } else {
- String var5 = var7.nextToken();
- var6.put(var4, Integer.valueOf(var5));
- }
- }
- } catch (Exception var8) {
- if (var3 != null) {
- System.out.println("PackerLayout: Syntax error in component: " + var3);
- this.nameinfo.remove(var3);
- this.compinfo.remove(var2);
- }
-
- return;
- }
-
- if (this.firstcomp == null) {
- this.firstcomp = var2;
- this.lastcomp = var2;
- } else {
- Hashtable var14 = (Hashtable)this.compinfo.get(this.lastcomp);
- var14.put("next", var2);
- var6.put("prev", this.lastcomp);
- this.lastcomp = var2;
- }
-
- }
-
- public void removeLayoutComponent(Component var1) {
- Hashtable var4 = (Hashtable)this.compinfo.get(var1);
- Component var2 = (Component)var4.get("prev");
- Component var3 = (Component)var4.get("next");
- if (var2 == null) {
- this.firstcomp = var3;
- }
-
- if (var3 == null) {
- this.lastcomp = var2;
- }
-
- if (var2 != null) {
- Hashtable var5 = (Hashtable)this.compinfo.get(var2);
- if (var3 != null) {
- var5.put("next", var3);
- } else {
- var5.remove("next");
- }
- }
-
- if (var3 != null) {
- Hashtable var6 = (Hashtable)this.compinfo.get(var3);
- if (var2 != null) {
- var6.put("prev", var3);
- } else {
- var6.remove("prev");
- }
- }
-
- this.compinfo.remove(var1);
- }
-
- public Dimension preferredLayoutSize(Container var1) {
- Dimension var2 = this.minimumLayoutSize(var1);
- Dimension var3 = ((Component)var1).size();
- if (var3.width < var2.width) {
- var3.width = var2.width;
- }
-
- if (var3.height < var2.height) {
- var3.height = var2.height;
- }
-
- return var3;
- }
-
- public Dimension minimumLayoutSize(Container var1) {
- Insets var2 = var1.insets();
- Dimension var3 = new Dimension(0, 0);
- Dimension var5 = new Dimension(0, 0);
- int var6 = var1.countComponents();
-
- for(int var7 = 0; var7 < var6; ++var7) {
- Component var8 = var1.getComponent(var7);
- Dimension var4 = var8.minimumSize();
- Hashtable var9 = (Hashtable)this.compinfo.get(var8);
- if (var9 == null) {
- break;
- }
-
- int var10 = (Integer)var9.get("padx") * 2;
- int var11 = (Integer)var9.get("pady") * 2;
- int var12 = (Integer)var9.get("ipadx");
- int var13 = (Integer)var9.get("ipady");
- String var14 = (String)var9.get("side");
- var4.width += var10 + var12 + var3.width;
- var4.height += var11 + var13 + var3.height;
- if (!var14.equals("top") && !var14.equals("bottom")) {
- if (var4.height > var5.height) {
- var5.height = var4.height;
- }
-
- var3.width = var4.width;
- } else {
- if (var4.width > var5.width) {
- var5.width = var4.width;
- }
-
- var3.height = var4.height;
- }
- }
-
- if (var3.width > var5.width) {
- var5.width = var3.width;
- }
-
- if (var3.height > var5.height) {
- var5.height = var3.height;
- }
-
- var5.width += var2.left + var2.right;
- var5.height += var2.top + var2.bottom;
- return var5;
- }
-
- public void layoutContainer(Container var1) {
- Insets var2 = var1.insets();
- Dimension var3 = ((Component)var1).size();
- int var4 = 0;
- int var5 = 0;
- int var6 = var3.width - (var2.left + var2.right);
- int var7 = var3.height - (var2.top + var2.bottom);
-
- Hashtable var17;
- for(Component var16 = this.firstcomp; var16 != null; var16 = (Component)var17.get("next")) {
- var17 = (Hashtable)this.compinfo.get(var16);
- String var18 = (String)var17.get("side");
- int var19 = (Integer)var17.get("padx") * 2;
- int var20 = (Integer)var17.get("pady") * 2;
- int var21 = (Integer)var17.get("ipadx");
- int var22 = (Integer)var17.get("ipady");
- boolean var23 = (Boolean)var17.get("expand");
- boolean var24 = (Boolean)var17.get("fillx");
- boolean var25 = (Boolean)var17.get("filly");
- int var26 = (Integer)var17.get("anchor");
- String var27 = (String)var17.get("name");
- var16.layout();
- int var8;
- int var9;
- int var10;
- int var11;
- if (!var18.equals("top") && !var18.equals("bottom")) {
- var11 = var7;
- var10 = var16.preferredSize().width + var19 + var21;
- if (var23) {
- var10 += this.XExpansion(var16, var6);
- }
-
- var6 -= var10;
- if (var6 < 0) {
- var10 += var6;
- var6 = 0;
- }
-
- var9 = var5;
- if (var18.equals("left")) {
- var8 = var4;
- var4 += var10;
- } else {
- var8 = var4 + var6;
- }
- } else {
- var10 = var6;
- var11 = var16.preferredSize().height + var20 + var22;
- if (var23) {
- var11 += this.YExpansion(var16, var7);
- }
-
- var7 -= var11;
- if (var7 < 0) {
- var11 += var7;
- var7 = 0;
- }
-
- var8 = var4;
- if (var18.equals("top")) {
- var9 = var5;
- var5 += var11;
- } else {
- var9 = var5 + var7;
- }
- }
-
- int var12 = var16.preferredSize().width + var21;
- if (var24 || var12 > var10 - var19) {
- var12 = var10 - var19;
- }
-
- int var13 = var16.preferredSize().height + var22;
- if (var25 || var13 > var11 - var20) {
- var13 = var11 - var20;
- }
-
- var19 /= 2;
- var20 /= 2;
- int var14;
- int var15;
- switch (var26) {
- case 0:
- var14 = var8 + (var10 - var12) / 2;
- var15 = var9 + var20;
- break;
- case 1:
- var14 = var8 + var10 - var12 - var19;
- var15 = var9 + var20;
- break;
- case 2:
- var14 = var8 + var10 - var12 - var19;
- var15 = var9 + (var11 - var13) / 2;
- break;
- case 3:
- var14 = var8 + var10 - var12 - var19;
- var15 = var9 + var11 - var13 - var20;
- break;
- case 4:
- var14 = var8 + (var10 - var12) / 2;
- var15 = var9 + var11 - var13 - var20;
- break;
- case 5:
- var14 = var8 + var19;
- var15 = var9 + var11 - var13 - var20;
- break;
- case 6:
- var14 = var8 + var19;
- var15 = var9 + (var11 - var13) / 2;
- break;
- case 7:
- var14 = var8 + var19;
- var15 = var9 + var20;
- break;
- case 8:
- default:
- var14 = var8 + (var10 - var12) / 2;
- var15 = var9 + (var11 - var13) / 2;
- }
-
- var16.reshape(var2.left + var14, var15 + var2.top, var12, var13);
- }
-
- }
-
- int XExpansion(Component var1, int var2) {
- Hashtable var3 = (Hashtable)this.compinfo.get(var1);
- int var5 = var2;
-
- int var4;
- for(var4 = 0; var1 != null; var1 = (Component)var3.get("next")) {
- var3 = (Hashtable)this.compinfo.get(var1);
- int var8 = (Integer)var3.get("padx") * 2;
- int var9 = (Integer)var3.get("ipadx");
- boolean var10 = (Boolean)var3.get("expand");
- String var11 = (String)var3.get("side");
- int var7 = var1.preferredSize().width + var8 + var9;
- if (!var11.equals("top") && !var11.equals("bottom")) {
- var2 -= var7;
- if (var10) {
- ++var4;
- }
- } else {
- int var6 = (var2 - var7) / var4;
- if (var6 < var5) {
- var5 = var6;
- }
- }
- }
-
- int var13 = var2 / var4;
- if (var13 < var5) {
- var5 = var13;
- }
-
- if (var5 < 0) {
- return 0;
- } else {
- return var5;
- }
- }
-
- int YExpansion(Component var1, int var2) {
- Hashtable var3 = (Hashtable)this.compinfo.get(var1);
- int var5 = var2;
-
- int var4;
- for(var4 = 0; var1 != null; var1 = (Component)var3.get("next")) {
- var3 = (Hashtable)this.compinfo.get(var1);
- int var8 = (Integer)var3.get("pady") * 2;
- int var9 = (Integer)var3.get("ipady");
- boolean var10 = (Boolean)var3.get("expand");
- String var11 = (String)var3.get("side");
- int var7 = var1.preferredSize().height + var8 + var9;
- if (!var11.equals("left") && !var11.equals("right")) {
- var2 -= var7;
- if (var10) {
- ++var4;
- }
- } else {
- int var6 = (var2 - var7) / var4;
- if (var6 < var5) {
- var5 = var6;
- }
- }
- }
-
- int var13 = var2 / var4;
- if (var13 < var5) {
- var5 = var13;
- }
-
- if (var5 < 0) {
- return 0;
- } else {
- return var5;
- }
- }
-
- public String toString() {
- return this.getClass().getName();
- }
- }
-