home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2001 December / dppcpro1201.iso / Extras / maple / Viewer / WebEQ / MMLViewerInstall.cab / MMLViewerApplet.cab / webeq3 / util / PackerLayout.class (.txt) < prev   
Encoding:
Java Class File  |  2001-05-24  |  8.3 KB  |  495 lines

  1. package webeq3.util;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.Insets;
  7. import java.awt.LayoutManager;
  8. import java.util.Hashtable;
  9. import java.util.NoSuchElementException;
  10. import java.util.StringTokenizer;
  11.  
  12. public class PackerLayout implements LayoutManager {
  13.    Hashtable compinfo = new Hashtable();
  14.    Hashtable nameinfo = new Hashtable();
  15.    Component firstcomp = null;
  16.    Component lastcomp = null;
  17.    public static final String initText = "PackerLayout (c) 1995 by Daeron Meyer\n";
  18.    static final String F_ANCHOR = "anchor";
  19.    static final String F_EXPAND = "expand";
  20.    static final String F_FILL = "fill";
  21.    static final String F_FILLX = "fillx";
  22.    static final String F_FILLY = "filly";
  23.    static final String F_IPADX = "ipadx";
  24.    static final String F_IPADY = "ipady";
  25.    static final String F_PADX = "padx";
  26.    static final String F_PADY = "pady";
  27.    static final String F_SIDE = "side";
  28.    static final String F_NAME = "name";
  29.    static final String ANCH_TOK_N = "n";
  30.    static final String ANCH_TOK_NE = "ne";
  31.    static final String ANCH_TOK_E = "e";
  32.    static final String ANCH_TOK_SE = "se";
  33.    static final String ANCH_TOK_S = "s";
  34.    static final String ANCH_TOK_SW = "sw";
  35.    static final String ANCH_TOK_W = "w";
  36.    static final String ANCH_TOK_NW = "nw";
  37.    static final String ANCH_TOK_CENTER = "center";
  38.    static final int ANCHOR_N = 0;
  39.    static final int ANCHOR_NE = 1;
  40.    static final int ANCHOR_E = 2;
  41.    static final int ANCHOR_SE = 3;
  42.    static final int ANCHOR_S = 4;
  43.    static final int ANCHOR_SW = 5;
  44.    static final int ANCHOR_W = 6;
  45.    static final int ANCHOR_NW = 7;
  46.    static final int ANCHOR_CENTER = 8;
  47.    static final String EXPAND_TRUE = "true";
  48.    static final String EXPAND_FALSE = "false";
  49.    static final String EXPAND_YES = "1";
  50.    static final String EXPAND_NO = "0";
  51.    static final String FILL_NONE = "none";
  52.    static final String FILL_X = "x";
  53.    static final String FILL_Y = "y";
  54.    static final String FILL_BOTH = "both";
  55.    static final String SIDE_TOP = "top";
  56.    static final String SIDE_BOTTOM = "bottom";
  57.    static final String SIDE_LEFT = "left";
  58.    static final String SIDE_RIGHT = "right";
  59.    static final String CHAR_SEMI = ";";
  60.    static final String CHAR_EQUAL = "=";
  61.    static final String CHAR_ALL = ";=";
  62.    static final String COMPONENT_NEXT = "next";
  63.    static final String COMPONENT_PREV = "prev";
  64.    static final int debug = 0;
  65.  
  66.    public void addLayoutComponent(String var1, Component var2) {
  67.       Object var3 = null;
  68.       Hashtable var6 = new Hashtable();
  69.  
  70.       try {
  71.          if (var2 == null) {
  72.             return;
  73.          }
  74.  
  75.          StringTokenizer var7 = new StringTokenizer(var1, ";=", true);
  76.          String var9 = new String(var7.nextToken());
  77.          var6.put("anchor", new Integer(8));
  78.          var6.put("expand", new Boolean(false));
  79.          var6.put("fillx", new Boolean(false));
  80.          var6.put("filly", new Boolean(false));
  81.          var6.put("ipadx", new Integer(0));
  82.          var6.put("ipady", new Integer(0));
  83.          var6.put("padx", new Integer(0));
  84.          var6.put("pady", new Integer(0));
  85.          var6.put("side", "top");
  86.          this.nameinfo.put(var9, var2);
  87.          this.compinfo.put(var2, var6);
  88.          var6.put("name", var9);
  89.  
  90.          while(var7.hasMoreTokens()) {
  91.             if (!var7.nextToken().equals(";")) {
  92.                throw new NoSuchElementException();
  93.             }
  94.  
  95.             if (!var7.hasMoreTokens()) {
  96.                return;
  97.             }
  98.  
  99.             String var4 = var7.nextToken();
  100.             if (!var7.nextToken().equals("=")) {
  101.                throw new NoSuchElementException();
  102.             }
  103.  
  104.             if (var4.equals("anchor")) {
  105.                String var13 = var7.nextToken();
  106.                if (var13.equals("n")) {
  107.                   var6.put(var4, new Integer(0));
  108.                } else if (var13.equals("ne")) {
  109.                   var6.put(var4, new Integer(1));
  110.                } else if (var13.equals("e")) {
  111.                   var6.put(var4, new Integer(2));
  112.                } else if (var13.equals("se")) {
  113.                   var6.put(var4, new Integer(3));
  114.                } else if (var13.equals("s")) {
  115.                   var6.put(var4, new Integer(4));
  116.                } else if (var13.equals("sw")) {
  117.                   var6.put(var4, new Integer(5));
  118.                } else if (var13.equals("w")) {
  119.                   var6.put(var4, new Integer(6));
  120.                } else if (var13.equals("nw")) {
  121.                   var6.put(var4, new Integer(7));
  122.                } else {
  123.                   if (!var13.equals("center")) {
  124.                      throw new NoSuchElementException();
  125.                   }
  126.  
  127.                   var6.put(var4, new Integer(8));
  128.                }
  129.             } else if (var4.equals("expand")) {
  130.                String var12 = var7.nextToken();
  131.                if (!var12.equals("true") && !var12.equals("1")) {
  132.                   if (!var12.equals("false") && !var12.equals("0")) {
  133.                      throw new NoSuchElementException();
  134.                   }
  135.  
  136.                   var6.put(var4, new Boolean(false));
  137.                } else {
  138.                   var6.put(var4, new Boolean(true));
  139.                }
  140.             } else if (var4.equals("fill")) {
  141.                String var11 = var7.nextToken();
  142.                if (var11.equals("none")) {
  143.                   var6.put(new String("fillx"), new Boolean(false));
  144.                   var6.put(new String("filly"), new Boolean(false));
  145.                } else if (var11.equals("x")) {
  146.                   var6.put(new String("fillx"), new Boolean(true));
  147.                   var6.put(new String("filly"), new Boolean(false));
  148.                } else if (var11.equals("y")) {
  149.                   var6.put(new String("fillx"), new Boolean(false));
  150.                   var6.put(new String("filly"), new Boolean(true));
  151.                } else {
  152.                   if (!var11.equals("both")) {
  153.                      throw new NoSuchElementException();
  154.                   }
  155.  
  156.                   var6.put(new String("fillx"), new Boolean(true));
  157.                   var6.put(new String("filly"), new Boolean(true));
  158.                }
  159.             } else if (!var4.equals("ipadx") && !var4.equals("ipady") && !var4.equals("padx") && !var4.equals("pady")) {
  160.                if (var4.equals("side")) {
  161.                   String var10 = var7.nextToken();
  162.                   if (!var10.equals("top") && !var10.equals("left") && !var10.equals("right") && !var10.equals("bottom")) {
  163.                      throw new NoSuchElementException();
  164.                   }
  165.  
  166.                   var6.put(var4, var10);
  167.                }
  168.             } else {
  169.                String var5 = var7.nextToken();
  170.                var6.put(var4, Integer.valueOf(var5));
  171.             }
  172.          }
  173.       } catch (Exception var8) {
  174.          if (var3 != null) {
  175.             System.out.println("PackerLayout: Syntax error in component: " + var3);
  176.             this.nameinfo.remove(var3);
  177.             this.compinfo.remove(var2);
  178.          }
  179.  
  180.          return;
  181.       }
  182.  
  183.       if (this.firstcomp == null) {
  184.          this.firstcomp = var2;
  185.          this.lastcomp = var2;
  186.       } else {
  187.          Hashtable var14 = (Hashtable)this.compinfo.get(this.lastcomp);
  188.          var14.put("next", var2);
  189.          var6.put("prev", this.lastcomp);
  190.          this.lastcomp = var2;
  191.       }
  192.  
  193.    }
  194.  
  195.    public void removeLayoutComponent(Component var1) {
  196.       Hashtable var4 = (Hashtable)this.compinfo.get(var1);
  197.       Component var2 = (Component)var4.get("prev");
  198.       Component var3 = (Component)var4.get("next");
  199.       if (var2 == null) {
  200.          this.firstcomp = var3;
  201.       }
  202.  
  203.       if (var3 == null) {
  204.          this.lastcomp = var2;
  205.       }
  206.  
  207.       if (var2 != null) {
  208.          Hashtable var5 = (Hashtable)this.compinfo.get(var2);
  209.          if (var3 != null) {
  210.             var5.put("next", var3);
  211.          } else {
  212.             var5.remove("next");
  213.          }
  214.       }
  215.  
  216.       if (var3 != null) {
  217.          Hashtable var6 = (Hashtable)this.compinfo.get(var3);
  218.          if (var2 != null) {
  219.             var6.put("prev", var3);
  220.          } else {
  221.             var6.remove("prev");
  222.          }
  223.       }
  224.  
  225.       this.compinfo.remove(var1);
  226.    }
  227.  
  228.    public Dimension preferredLayoutSize(Container var1) {
  229.       Dimension var2 = this.minimumLayoutSize(var1);
  230.       Dimension var3 = ((Component)var1).size();
  231.       if (var3.width < var2.width) {
  232.          var3.width = var2.width;
  233.       }
  234.  
  235.       if (var3.height < var2.height) {
  236.          var3.height = var2.height;
  237.       }
  238.  
  239.       return var3;
  240.    }
  241.  
  242.    public Dimension minimumLayoutSize(Container var1) {
  243.       Insets var2 = var1.insets();
  244.       Dimension var3 = new Dimension(0, 0);
  245.       Dimension var5 = new Dimension(0, 0);
  246.       int var6 = var1.countComponents();
  247.  
  248.       for(int var7 = 0; var7 < var6; ++var7) {
  249.          Component var8 = var1.getComponent(var7);
  250.          Dimension var4 = var8.minimumSize();
  251.          Hashtable var9 = (Hashtable)this.compinfo.get(var8);
  252.          if (var9 == null) {
  253.             break;
  254.          }
  255.  
  256.          int var10 = (Integer)var9.get("padx") * 2;
  257.          int var11 = (Integer)var9.get("pady") * 2;
  258.          int var12 = (Integer)var9.get("ipadx");
  259.          int var13 = (Integer)var9.get("ipady");
  260.          String var14 = (String)var9.get("side");
  261.          var4.width += var10 + var12 + var3.width;
  262.          var4.height += var11 + var13 + var3.height;
  263.          if (!var14.equals("top") && !var14.equals("bottom")) {
  264.             if (var4.height > var5.height) {
  265.                var5.height = var4.height;
  266.             }
  267.  
  268.             var3.width = var4.width;
  269.          } else {
  270.             if (var4.width > var5.width) {
  271.                var5.width = var4.width;
  272.             }
  273.  
  274.             var3.height = var4.height;
  275.          }
  276.       }
  277.  
  278.       if (var3.width > var5.width) {
  279.          var5.width = var3.width;
  280.       }
  281.  
  282.       if (var3.height > var5.height) {
  283.          var5.height = var3.height;
  284.       }
  285.  
  286.       var5.width += var2.left + var2.right;
  287.       var5.height += var2.top + var2.bottom;
  288.       return var5;
  289.    }
  290.  
  291.    public void layoutContainer(Container var1) {
  292.       Insets var2 = var1.insets();
  293.       Dimension var3 = ((Component)var1).size();
  294.       int var4 = 0;
  295.       int var5 = 0;
  296.       int var6 = var3.width - (var2.left + var2.right);
  297.       int var7 = var3.height - (var2.top + var2.bottom);
  298.  
  299.       Hashtable var17;
  300.       for(Component var16 = this.firstcomp; var16 != null; var16 = (Component)var17.get("next")) {
  301.          var17 = (Hashtable)this.compinfo.get(var16);
  302.          String var18 = (String)var17.get("side");
  303.          int var19 = (Integer)var17.get("padx") * 2;
  304.          int var20 = (Integer)var17.get("pady") * 2;
  305.          int var21 = (Integer)var17.get("ipadx");
  306.          int var22 = (Integer)var17.get("ipady");
  307.          boolean var23 = (Boolean)var17.get("expand");
  308.          boolean var24 = (Boolean)var17.get("fillx");
  309.          boolean var25 = (Boolean)var17.get("filly");
  310.          int var26 = (Integer)var17.get("anchor");
  311.          String var27 = (String)var17.get("name");
  312.          var16.layout();
  313.          int var8;
  314.          int var9;
  315.          int var10;
  316.          int var11;
  317.          if (!var18.equals("top") && !var18.equals("bottom")) {
  318.             var11 = var7;
  319.             var10 = var16.preferredSize().width + var19 + var21;
  320.             if (var23) {
  321.                var10 += this.XExpansion(var16, var6);
  322.             }
  323.  
  324.             var6 -= var10;
  325.             if (var6 < 0) {
  326.                var10 += var6;
  327.                var6 = 0;
  328.             }
  329.  
  330.             var9 = var5;
  331.             if (var18.equals("left")) {
  332.                var8 = var4;
  333.                var4 += var10;
  334.             } else {
  335.                var8 = var4 + var6;
  336.             }
  337.          } else {
  338.             var10 = var6;
  339.             var11 = var16.preferredSize().height + var20 + var22;
  340.             if (var23) {
  341.                var11 += this.YExpansion(var16, var7);
  342.             }
  343.  
  344.             var7 -= var11;
  345.             if (var7 < 0) {
  346.                var11 += var7;
  347.                var7 = 0;
  348.             }
  349.  
  350.             var8 = var4;
  351.             if (var18.equals("top")) {
  352.                var9 = var5;
  353.                var5 += var11;
  354.             } else {
  355.                var9 = var5 + var7;
  356.             }
  357.          }
  358.  
  359.          int var12 = var16.preferredSize().width + var21;
  360.          if (var24 || var12 > var10 - var19) {
  361.             var12 = var10 - var19;
  362.          }
  363.  
  364.          int var13 = var16.preferredSize().height + var22;
  365.          if (var25 || var13 > var11 - var20) {
  366.             var13 = var11 - var20;
  367.          }
  368.  
  369.          var19 /= 2;
  370.          var20 /= 2;
  371.          int var14;
  372.          int var15;
  373.          switch (var26) {
  374.             case 0:
  375.                var14 = var8 + (var10 - var12) / 2;
  376.                var15 = var9 + var20;
  377.                break;
  378.             case 1:
  379.                var14 = var8 + var10 - var12 - var19;
  380.                var15 = var9 + var20;
  381.                break;
  382.             case 2:
  383.                var14 = var8 + var10 - var12 - var19;
  384.                var15 = var9 + (var11 - var13) / 2;
  385.                break;
  386.             case 3:
  387.                var14 = var8 + var10 - var12 - var19;
  388.                var15 = var9 + var11 - var13 - var20;
  389.                break;
  390.             case 4:
  391.                var14 = var8 + (var10 - var12) / 2;
  392.                var15 = var9 + var11 - var13 - var20;
  393.                break;
  394.             case 5:
  395.                var14 = var8 + var19;
  396.                var15 = var9 + var11 - var13 - var20;
  397.                break;
  398.             case 6:
  399.                var14 = var8 + var19;
  400.                var15 = var9 + (var11 - var13) / 2;
  401.                break;
  402.             case 7:
  403.                var14 = var8 + var19;
  404.                var15 = var9 + var20;
  405.                break;
  406.             case 8:
  407.             default:
  408.                var14 = var8 + (var10 - var12) / 2;
  409.                var15 = var9 + (var11 - var13) / 2;
  410.          }
  411.  
  412.          var16.reshape(var2.left + var14, var15 + var2.top, var12, var13);
  413.       }
  414.  
  415.    }
  416.  
  417.    int XExpansion(Component var1, int var2) {
  418.       Hashtable var3 = (Hashtable)this.compinfo.get(var1);
  419.       int var5 = var2;
  420.  
  421.       int var4;
  422.       for(var4 = 0; var1 != null; var1 = (Component)var3.get("next")) {
  423.          var3 = (Hashtable)this.compinfo.get(var1);
  424.          int var8 = (Integer)var3.get("padx") * 2;
  425.          int var9 = (Integer)var3.get("ipadx");
  426.          boolean var10 = (Boolean)var3.get("expand");
  427.          String var11 = (String)var3.get("side");
  428.          int var7 = var1.preferredSize().width + var8 + var9;
  429.          if (!var11.equals("top") && !var11.equals("bottom")) {
  430.             var2 -= var7;
  431.             if (var10) {
  432.                ++var4;
  433.             }
  434.          } else {
  435.             int var6 = (var2 - var7) / var4;
  436.             if (var6 < var5) {
  437.                var5 = var6;
  438.             }
  439.          }
  440.       }
  441.  
  442.       int var13 = var2 / var4;
  443.       if (var13 < var5) {
  444.          var5 = var13;
  445.       }
  446.  
  447.       if (var5 < 0) {
  448.          return 0;
  449.       } else {
  450.          return var5;
  451.       }
  452.    }
  453.  
  454.    int YExpansion(Component var1, int var2) {
  455.       Hashtable var3 = (Hashtable)this.compinfo.get(var1);
  456.       int var5 = var2;
  457.  
  458.       int var4;
  459.       for(var4 = 0; var1 != null; var1 = (Component)var3.get("next")) {
  460.          var3 = (Hashtable)this.compinfo.get(var1);
  461.          int var8 = (Integer)var3.get("pady") * 2;
  462.          int var9 = (Integer)var3.get("ipady");
  463.          boolean var10 = (Boolean)var3.get("expand");
  464.          String var11 = (String)var3.get("side");
  465.          int var7 = var1.preferredSize().height + var8 + var9;
  466.          if (!var11.equals("left") && !var11.equals("right")) {
  467.             var2 -= var7;
  468.             if (var10) {
  469.                ++var4;
  470.             }
  471.          } else {
  472.             int var6 = (var2 - var7) / var4;
  473.             if (var6 < var5) {
  474.                var5 = var6;
  475.             }
  476.          }
  477.       }
  478.  
  479.       int var13 = var2 / var4;
  480.       if (var13 < var5) {
  481.          var5 = var13;
  482.       }
  483.  
  484.       if (var5 < 0) {
  485.          return 0;
  486.       } else {
  487.          return var5;
  488.       }
  489.    }
  490.  
  491.    public String toString() {
  492.       return this.getClass().getName();
  493.    }
  494. }
  495.