/* * NAME * $RCSfile$ - * DESCRIPTION * [given below in javadoc format] * DELTA * $Revision: 11553 $ * CREATED * $Date: 2007-06-05 15:06:23 -0700 (星期二, 05 六月 2007) $ by birgit * COPYRIGHT * West Consulting bv * TO DO * */ package tablelayout; import java.awt.Component; import java.util.Vector; // TableLoc methods //==================== // The TableLayout Manager keeps its layout as a TableLoc, which are // vectors of TableLocRecs. // // Each TableLocRec defines the component's location information (the // row, col, spans, and layout options like justification and sizing controls). // The layout describes where components may be placed if and when they // become layout-ed. // // The layout is created from a string by the TableLocRec constructor. // Allocate, Grow, and Free Arrays of TableLocRec's //==================================================== // /** * The TableLayout Manager keeps its layout * description as a TableLoc, which contains * a vector of TableLocRec and of the * components. * * Each TableLocRec defines the component's location information (the * row, col, spans, and layout options like justification and sizing * controls). * The layout describes where components may be placed if and when they * become layout-ed. * * The layout is created from a string by the TableLocRec constructor. * * @see tablelayout.TableLayout * @see tablelayout.TableLocRec * @author Birgit Arkesteijn * @version $Revision: 11553 $ $Date: 2007-06-05 15:06:23 -0700 (星期二, 05 六月 2007) $ */ public class TableLoc extends Object { private static final String version_id = "@(#)$Id: TableLoc.java 11553 2007-06-05 22:06:23Z duns $ Copyright West Consulting bv"; Vector compinfo; Vector recinfo; static final String CHAR_SEMI = ";"; static final String CHAR_BLANC = " "; static final String CHAR_ALL = CHAR_SEMI + CHAR_BLANC; static final String COMPONENT_REC = "rec"; static final String COMPONENT_NEXT = "next"; static final String COMPONENT_PREV = "prev"; /** * */ public TableLoc() { compinfo = new Vector(); recinfo = new Vector(); } /** * Adds a component with its layout * * @param rec the layout information of the component * @param comp the component */ public void addElement (TableLocRec rec, Component comp) { compinfo.addElement((Object)comp); recinfo.addElement((Object)rec); } /** * Adds a TableLoc vector * * @param loc the TableLoc vector to add */ public void addElement (TableLoc loc) { int index, sz; sz = loc.size(); for (index=0; index<sz; index++) { compinfo.addElement(loc.compinfo.elementAt(index)); recinfo.addElement(loc.recinfo.elementAt(index)); } } /** * Removes the information about a component * * @param comp the component */ public void removeElement(Component comp) { int index; if ((index = compinfo.indexOf(comp)) > -1) { compinfo.removeElementAt(index); recinfo.removeElementAt(index); } } /** * Returns the number of components in the layout */ public int size() { return compinfo.size(); } // Find things in TableLocs //============================ // Linear search of TableLoc array looking for various parameters // /** * Returns the TableLocRec layout information on a given position * * @param index the index of the information */ public TableLocRec recElementAt(int index) { return ((TableLocRec)recinfo.elementAt(index)); } /** * Returns the component on a given position * * @param index the index of the information */ public Component compElementAt(int index) { return ((Component)compinfo.elementAt(index)); } /** * Returns the TableLocRec layout information of a given component * * @param w the component */ public TableLocRec element(Component w) { int index; if ((index = compinfo.indexOf(w)) > -1) { return ((TableLocRec)recinfo.elementAt(index)); } return ((TableLocRec)null); } /** * Returns the number of columns of the layout */ public int numCols() { int index, sz; TableLocRec rec = null; int cols = 0; index = 0; sz = compinfo.size(); while (index < sz) { rec = (TableLocRec)recinfo.elementAt(index); if (cols < (rec.col + rec.col_span)) cols = rec.col + rec.col_span; index ++; } return cols; } /** * Returns the number of rows of the layout */ public int numRows() { int index, sz; TableLocRec rec = null; int rows = 0; index = 0; sz = compinfo.size(); while (index < sz) { rec = (TableLocRec)recinfo.elementAt(index); if (rows < (rec.row + rec.row_span)) rows = rec.row + rec.row_span; index ++; } return rows; } // Definitly ported from "C". Java does not allow function pointers to pass /** * Sorts the colums of row to their position * * @param left left element * @param right right element * @param do_col are these columns? */ public void qsort(int left, int right, boolean do_col) { int i, last; if (left >= right) return; swap (left, (left+right)/2); last = left; for (i=left+1; i<=right; i++) { if (do_col) { if (TableLocRec.compareColSpan((TableLocRec)recinfo.elementAt(i), (TableLocRec)recinfo.elementAt(left)) < 0) swap (last, i); } else { if (TableLocRec.compareRowSpan((TableLocRec)recinfo.elementAt(i), (TableLocRec)recinfo.elementAt(left)) < 0) swap (last, i); } last++; } swap(left, last); qsort(left, last-1, do_col); qsort(last+1, right, do_col); } /** * Swap two cells * * @param one cell no. 1 * @param two cell no. 2 */ public void swap(int one, int two) { TableLocRec trec = (TableLocRec)recinfo.elementAt(one); TableLocRec rec1 = (TableLocRec)recinfo.elementAt(one); TableLocRec rec2 = (TableLocRec)recinfo.elementAt(two); trec = rec2; rec2 = rec1; rec1 = trec; Component tcom = (Component)compinfo.elementAt(one); Component com1 = (Component)compinfo.elementAt(one); Component com2 = (Component)compinfo.elementAt(two); tcom = com2; com2 = com1; com1 = tcom; } /** * Creates a clone of the object. A new instance is allocated and all * the variables of the class are cloned */ public Object clone() { TableLoc elem = new TableLoc(); elem.compinfo = (Vector) compinfo.clone(); elem.recinfo = (Vector) recinfo.clone(); return ((Object) elem); } /** * Returns the String representation */ public String toString() { return ( "TableLoc [" + "\ncompinfo " + compinfo.toString() + "\nrecinfo " + recinfo.toString() + "]"); } }