mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			255 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			255 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* Copyright (C) 1999, 2000  Free Software Foundation
 | |
| 
 | |
|    This file is part of libjava.
 | |
| 
 | |
| This software is copyrighted work licensed under the terms of the
 | |
| Libjava License.  Please consult the file "LIBJAVA_LICENSE" for
 | |
| details.  */
 | |
| 
 | |
| package java.awt;
 | |
| 
 | |
| public class BorderLayout implements LayoutManager2, java.io.Serializable
 | |
| {
 | |
|   public static final String NORTH  = "North",
 | |
|                              SOUTH  = "South",
 | |
|                              EAST   = "East",
 | |
|                              WEST   = "West",
 | |
|                              CENTER = "Center";
 | |
|   
 | |
|   // FIXME: use these too
 | |
|   public static final String BEFORE_FIRST_LINE = "First",
 | |
|                              AFTER_LAST_LINE = "Last",
 | |
|                              BEFORE_LINE_BEGINS = "Before",
 | |
|                              AFTER_LINE_ENDS = "After";
 | |
| 
 | |
| 
 | |
|   // FIXME: check serialization of fields
 | |
|   int hgap;
 | |
|   int vgap;
 | |
|   Component north, south, east, west, center;
 | |
| 
 | |
|   public BorderLayout ()
 | |
|   {
 | |
|     this (0, 0);
 | |
|   }
 | |
| 
 | |
|   public BorderLayout (int hgap, int vgap)
 | |
|   {
 | |
|     this.hgap = hgap;
 | |
|     this.vgap = vgap;
 | |
|   }
 | |
| 
 | |
|   public int getHgap()
 | |
|   {
 | |
|     return hgap;
 | |
|   }    
 | |
| 
 | |
|   public void setHgap(int hgap)
 | |
|   {
 | |
|     this.hgap = hgap;
 | |
|   }
 | |
| 
 | |
|   public int getVgap()
 | |
|   {
 | |
|     return vgap;
 | |
|   }    
 | |
| 
 | |
|   public void setVgap(int vgap)
 | |
|   {
 | |
|     this.vgap = vgap;
 | |
|   }
 | |
|   
 | |
|   public void addLayoutComponent(Component comp, Object constraints)
 | |
|   {
 | |
|     if ((constraints == null) || CENTER.equals(constraints))
 | |
|       {
 | |
| 	center = comp; 
 | |
|       }
 | |
|     else if (NORTH.equals(constraints))
 | |
|       {
 | |
| 	north = comp;
 | |
|       }
 | |
|     else if (SOUTH.equals(constraints))
 | |
|       {
 | |
| 	south = comp;
 | |
|       }
 | |
|     else if (EAST.equals(constraints))
 | |
|       {
 | |
| 	east = comp;
 | |
|       }
 | |
|     else if (WEST.equals(constraints))
 | |
|       {
 | |
| 	west = comp;
 | |
|       }
 | |
|   }
 | |
|     
 | |
|   public void addLayoutComponent(String name, Component comp)
 | |
|   {
 | |
|     addLayoutComponent(comp, name);
 | |
|   }
 | |
| 
 | |
|   public void removeLayoutComponent(Component comp)
 | |
|   {
 | |
|     if (center == comp)
 | |
|       {
 | |
| 	center = null;
 | |
|       }
 | |
|     else if (north == comp)
 | |
|       {
 | |
| 	north = null;
 | |
|       }
 | |
|     else if (south == comp)
 | |
|       {
 | |
| 	south = null;
 | |
|       }
 | |
|     else if (east == comp)
 | |
|       {
 | |
| 	east = null;
 | |
|       }
 | |
|     else if (west == comp)
 | |
|       {
 | |
| 	west = null;
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   public Dimension minimumLayoutSize(Container target)
 | |
|   {
 | |
|     return calcSize(getMinimumSize(center),
 | |
| 		    getMinimumSize(north),
 | |
| 		    getMinimumSize(south),
 | |
| 		    getMinimumSize(east),
 | |
| 		    getMinimumSize(west),
 | |
| 		    target);
 | |
|   }
 | |
| 
 | |
|   public Dimension preferredLayoutSize(Container target)
 | |
|   {
 | |
|     return calcSize(getPreferredSize(center),
 | |
| 		    getPreferredSize(north),
 | |
| 		    getPreferredSize(south),
 | |
| 		    getPreferredSize(east),
 | |
| 		    getPreferredSize(west),
 | |
| 		    target);	
 | |
|   }
 | |
|     
 | |
|   /**
 | |
|    * Completely disregards the requested maximum sizes of the
 | |
|    * components, and states that the container has no upper size
 | |
|    * limit.
 | |
|    *
 | |
|    * @return a dimension of width and height Integer.MAX_VALUE.
 | |
|    */
 | |
|   public Dimension maximumLayoutSize(Container target)
 | |
|   {
 | |
|     return (Dimension) DIM_MAX.clone();
 | |
|   }	
 | |
| 
 | |
|   public float getLayoutAlignmentX(Container parent)
 | |
|   {
 | |
|     return Component.CENTER_ALIGNMENT;
 | |
|   }
 | |
| 
 | |
|   public float getLayoutAlignmentY(Container parent)
 | |
|   {
 | |
|     return Component.CENTER_ALIGNMENT;
 | |
|   }
 | |
|     
 | |
|   public void invalidateLayout(Container target)
 | |
|   {
 | |
|     // TODO... implement caching?
 | |
|   }
 | |
| 
 | |
|   public void layoutContainer(Container target)
 | |
|   {
 | |
|     Insets i = target.getInsets();
 | |
|     Dimension c = getPreferredSize(center);
 | |
|     Dimension n = getPreferredSize(north);
 | |
|     Dimension s = getPreferredSize(south);
 | |
|     Dimension e = getPreferredSize(east);
 | |
|     Dimension w = getPreferredSize(west);
 | |
|     Dimension t = target.getSize();
 | |
|     
 | |
|     /*
 | |
|              <-> hgap     <-> hgap
 | |
|       +----------------------------+          }
 | |
|       |t                           |          } i.top
 | |
|       |  +----------------------+  |  --- y1  }
 | |
|       |  |n                     |  |
 | |
|       |  +----------------------+  |          } vgap
 | |
|       |  +---+ +----------+ +---+  |  --- y2  }        }
 | |
|       |  |w  | |c         | |e  |  |                   } hh
 | |
|       |  +---+ +----------+ +---+  |          } vgap   }
 | |
|       |  +----------------------+  |  --- y3  }
 | |
|       |  |s                     |  |
 | |
|       |  +----------------------+  |          }
 | |
|       |                            |          } i.bottom
 | |
|       +----------------------------+          }
 | |
|          |x1   |x2          |x3
 | |
|          <---------------------->
 | |
|       <-->         ww           <-->
 | |
|      i.left                    i.right
 | |
|     */
 | |
| 
 | |
|     int x1 = i.left;
 | |
|     int x2 = x1 + w.width + hgap;
 | |
|     int x3 = t.width - i.right - e.width;
 | |
|     int ww = t.width - i.right - i.left;
 | |
| 
 | |
|     int y1 = i.top;
 | |
|     int y2 = y1 + n.height + vgap;
 | |
|     int y3 = t.height - i.bottom - s.height;
 | |
|     int hh = y3-y2-vgap;
 | |
| 
 | |
|     setBounds(center, x2, y2, x3-x2-hgap, hh);
 | |
|     setBounds(north, x1, y1, ww, n.height);
 | |
|     setBounds(south, x1, y3, ww, s.height);
 | |
|     setBounds(west, x1, y2, w.width, hh);
 | |
|     setBounds(east, x3, y2, e.width, hh);
 | |
|   }
 | |
|   
 | |
|   public String toString()
 | |
|   {
 | |
|     return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + "]";
 | |
|   }
 | |
| 
 | |
| 
 | |
|   // Support:
 | |
| 
 | |
|   static final Dimension DIM_0   = new Dimension(0, 0);
 | |
|   static final Dimension DIM_MAX = new Dimension(Integer.MAX_VALUE,
 | |
| 						 Integer.MAX_VALUE);
 | |
| 
 | |
|   void setBounds(Component comp, int x, int y, int w, int h)
 | |
|   {
 | |
|     if (comp == null)
 | |
|       return;
 | |
|     comp.setBounds(x, y, w, h);
 | |
|   }
 | |
| 
 | |
|   Dimension getMinimumSize(Component comp)
 | |
|   {
 | |
|     if (comp == null)
 | |
|       return DIM_0;
 | |
|     return comp.getMinimumSize();
 | |
|   }
 | |
| 
 | |
|   Dimension getPreferredSize(Component comp)
 | |
|   {
 | |
|     if (comp == null)
 | |
|       return DIM_0;
 | |
|     return comp.getPreferredSize();
 | |
|   }
 | |
| 
 | |
|   Dimension calcSize(Dimension c, Dimension n, Dimension s,
 | |
| 		     Dimension e, Dimension w, Container target)
 | |
|   {
 | |
|     Insets i = target.getInsets();
 | |
|     
 | |
|     return new Dimension(c.width + e.width + w.width + hgap*2 +
 | |
| 			 i.left + i.right,
 | |
| 			 c.height + n.height + s.height + vgap*2 +
 | |
| 			 i.top + i.bottom
 | |
| 			 );
 | |
|   }
 | |
| }
 |