[izpack-changes] r1510 - in izpack-src/trunk/src/lib/com/izforge/izpack: gui installer panels
noreply at berlios.de
noreply at berlios.de
Wed Aug 2 16:44:58 CEST 2006
Author: bartzkau
Date: 2006-08-02 16:44:57 +0200 (Wed, 02 Aug 2006)
New Revision: 1510
Added:
izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelConstraints.java
izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelLayout.java
izpack-src/trunk/src/lib/com/izforge/izpack/gui/LayoutConstants.java
izpack-src/trunk/src/lib/com/izforge/izpack/installer/LayoutHelper.java
Modified:
izpack-src/trunk/src/lib/com/izforge/izpack/installer/IzPanel.java
izpack-src/trunk/src/lib/com/izforge/izpack/panels/FinishPanel.java
izpack-src/trunk/src/lib/com/izforge/izpack/panels/PathInputPanel.java
izpack-src/trunk/src/lib/com/izforge/izpack/panels/SimpleFinishPanel.java
Log:
Handling of layout changed; now there is a separate class
which handles layout. Additional there is a new layout manager
to simplify layout handling in the IzPanel panels.
Added: izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelConstraints.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelConstraints.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelConstraints.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -0,0 +1,188 @@
+package com.izforge.izpack.gui;
+
+import java.awt.Component;
+import java.awt.Rectangle;
+
+public class IzPanelConstraints implements Cloneable, LayoutConstants
+{
+
+ /**
+ * Current defined gaps. Here are the defaults which can be overwritten at the first call to
+ * method getGap. The gap type will be determined by the array index and has to be synchron to
+ * the gap identifier and the indices of array GAP_NAME_LOOK_UP
+ */
+ protected static int[] DEFAULT_Y_GAPS = { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, 0};
+
+ protected static int[] DEFAULT_X_GAPS = { 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, 0};
+
+ protected static int[] DEFAULT_X_ALIGNMENT = { LEFT, LEFT, LEFT, LEFT};
+
+ protected static int[] DEFAULT_Y_ALIGNMENT = { CENTER, CENTER, CENTER, CENTER};
+
+ private int xCellAlignment = DEFAULT_X_ALIGNMENT[0];
+
+ private int yCellAlignment = DEFAULT_Y_ALIGNMENT[0];
+
+ private int xPos = 0;
+
+ private int yPos = NEXT_ROW;
+
+ private int xWeight = 1;
+
+ private int yWeight = 1;
+
+ private int xGap = DEFAULT_X_GAPS[-LABEL_GAP];
+
+ private int yGap = DEFAULT_Y_GAPS[-LABEL_GAP];
+
+ private double stretch = 0.0;
+
+ private Rectangle bounds;
+
+ /** for private use by the layout manager */
+ Component component = null;
+
+ public static IzPanelConstraints LABEL_CONSTRAINT = new IzPanelConstraints();
+
+
+ public double getStretch()
+ {
+ return stretch;
+ }
+
+ public void setStretch(double stretch)
+ {
+ this.stretch = stretch;
+ }
+
+ public int getXGap()
+ {
+ return xGap;
+ }
+
+ public void setXGap(int gap)
+ {
+ xGap = gap;
+ }
+
+ public int getYGap()
+ {
+ return yGap;
+ }
+
+ public void setYGap(int gap)
+ {
+ yGap = gap;
+ }
+
+ public IzPanelConstraints(int xCellAlignment, int yCellAlignment, int xPos, int yPos,
+ int xWeight, int yWeight, int xGap, int yGap, double stretch)
+ {
+ this.xCellAlignment = xCellAlignment;
+ this.yCellAlignment = yCellAlignment;
+ this.xPos = xPos;
+ this.yPos = yPos;
+ this.xWeight = xWeight;
+ this.yWeight = yWeight;
+ setXGap(xGap);
+ setYGap(yGap);
+ setStretch(stretch);
+ }
+
+ public IzPanelConstraints()
+ {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#clone()
+ */
+ public Object clone()
+ {
+ try
+ {
+ IzPanelConstraints c = (IzPanelConstraints) super.clone();
+ return c;
+ }
+ catch (CloneNotSupportedException e)
+ {
+ // this shouldn't happen, since we are Cloneable
+ throw new InternalError();
+ }
+ }
+
+ public int getXCellAlignment()
+ {
+ return xCellAlignment;
+ }
+
+ public void setXCellAlignment(int cellAlignment)
+ {
+ xCellAlignment = cellAlignment;
+ }
+
+ public int getXPos()
+ {
+ return xPos;
+ }
+
+ public void setXPos(int pos)
+ {
+ xPos = pos;
+ }
+
+ public int getXWeight()
+ {
+ return xWeight;
+ }
+
+ public void setXWeight(int weight)
+ {
+ xWeight = weight;
+ }
+
+ public int getYCellAlignment()
+ {
+ return yCellAlignment;
+ }
+
+ public void setYCellAlignment(int cellAlignment)
+ {
+ yCellAlignment = cellAlignment;
+ }
+
+ public int getYPos()
+ {
+ return yPos;
+ }
+
+ public void setYPos(int pos)
+ {
+ yPos = pos;
+ }
+
+ public int getYWeight()
+ {
+ return yWeight;
+ }
+
+ public void setYWeight(int weight)
+ {
+ yWeight = weight;
+ }
+
+
+ public Rectangle getBounds()
+ {
+ if(bounds != null )
+ return(Rectangle) (bounds.clone());
+ return( new Rectangle());
+ }
+
+
+ public void setBounds(Rectangle bounds)
+ {
+ this.bounds = (Rectangle) bounds.clone();
+ }
+}
Property changes on: izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelConstraints.java
___________________________________________________________________
Name: svn:executable
+ *
Added: izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelLayout.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelLayout.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelLayout.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -0,0 +1,808 @@
+package com.izforge.izpack.gui;
+
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.LayoutManager;
+import java.awt.LayoutManager2;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+import javax.swing.text.JTextComponent;
+
+import com.izforge.izpack.util.MultiLineLabel;
+
+public class IzPanelLayout implements LayoutManager, LayoutManager2, LayoutConstants
+{
+
+ /** holds all the components and layout constraints. */
+ private ArrayList components = new ArrayList();
+
+ /** Maximum rows to handle symbolic values like NEXT_ROW in constraints. */
+ private int currentYPos = -1;
+
+ /** Current column to handle symbolic values like NEXT_COLUMN in constraints. */
+ private int currentXPos = -1;
+
+ /** Dimension object with prefered size. Will be computed new if invalidateLayout will be called. */
+ private Dimension prefLayoutDim;
+
+ private Dimension oldParentSize;
+
+ private Insets oldParentInsets;
+
+ public static IzPanelConstraints DEFAULT_CONSTRAINTS[] = {
+ new IzPanelConstraints(DEFAULT_LABEL_ALIGNMENT, DEFAULT_LABEL_ALIGNMENT, NEXT_COLUMN,
+ CURRENT_ROW, 1, 1, LABEL_GAP, LABEL_GAP, 0.0),
+ new IzPanelConstraints(DEFAULT_TEXT_ALIGNMENT, DEFAULT_TEXT_ALIGNMENT, NEXT_COLUMN,
+ CURRENT_ROW, 1, 1, TEXT_GAP, TEXT_GAP, 0.0),
+ new IzPanelConstraints(DEFAULT_CONTROL_ALIGNMENT, DEFAULT_CONTROL_ALIGNMENT,
+ NEXT_COLUMN, CURRENT_ROW, 10, 10, CONTROL_GAP, CONTROL_GAP, 0.0),
+ new IzPanelConstraints(DEFAULT_LABEL_ALIGNMENT, DEFAULT_LABEL_ALIGNMENT, 0, NEXT_ROW,
+ 10, 10, LABEL_GAP, LABEL_GAP, 0.7),
+ new IzPanelConstraints(DEFAULT_LABEL_ALIGNMENT, DEFAULT_LABEL_ALIGNMENT, NEXT_COLUMN,
+ CURRENT_ROW, 1, 1, 0, 0, 0.0),
+ new IzPanelConstraints(DEFAULT_LABEL_ALIGNMENT, DEFAULT_LABEL_ALIGNMENT,
+ CURRENT_COLUMN, NEXT_ROW, 1, 1, 0, 0, 0.0)
+
+ };
+
+ /** Anchor to be used for the controls in all panels. */
+ private static int ANCHOR = CENTER;
+
+ private static int X_STRETCH_TYPE = RELATIVE_STRETCH;
+
+ private static final int[][] GAP_INTERMEDIAER_LOOKUP = {
+ { LABEL_GAP, LABEL_TO_TEXT_GAP, LABEL_TO_CONTROL_GAP, LABEL_GAP},
+ { TEXT_TO_LABEL_GAP, TEXT_GAP, TEXT_TO_CONTROL_GAP, TEXT_GAP},
+ { CONTROL_TO_LABEL_GAP, CONTROL_TO_TEXT_GAP, CONTROL_GAP, CONTROL_GAP},
+ { NO_GAP, NO_GAP, NO_GAP, NO_GAP}};
+
+ /**
+ * Default constructor
+ */
+ public IzPanelLayout()
+ {
+ }
+
+ public static int getYGap(IzPanelConstraints curConst, IzPanelConstraints nextYConst)
+ {
+
+ Class nextClass = (nextYConst != null) ? nextYConst.component.getClass()
+ : DummyComponent.class;
+ int interId = GAP_INTERMEDIAER_LOOKUP[getIntermediarId(curConst.component.getClass(), false)][getIntermediarId(nextClass, false)];
+ return (IzPanelConstraints.DEFAULT_Y_GAPS[interId]);
+
+ }
+
+ public static int getXGap(IzPanelConstraints curConst, IzPanelConstraints nextXConst)
+ {
+
+ Class nextClass = (nextXConst != null) ? nextXConst.component.getClass()
+ : DummyComponent.class;
+ int interId = GAP_INTERMEDIAER_LOOKUP[getIntermediarId(curConst.component.getClass(), false)][getIntermediarId(nextClass, false)];
+ return (IzPanelConstraints.DEFAULT_X_GAPS[interId]);
+
+ }
+
+ private static int getIntermediarId(Class clazz, boolean ext)
+ {
+ if(ext)
+ {
+ if (MultiLineLabel.class.isAssignableFrom(clazz)) return (3);
+ if (DummyComponent.class.isAssignableFrom(clazz)) return (4);
+ }
+ if (JLabel.class.isAssignableFrom(clazz)) return (0);
+ if (JTextComponent.class.isAssignableFrom(clazz)) return (1);
+ if (DummyComponent.class.isAssignableFrom(clazz)) return (3);
+ return (2); // Other controls.
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager#addLayoutComponent(java.lang.String, java.awt.Component)
+ */
+ public void addLayoutComponent(String name, Component comp)
+ {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)
+ */
+ public void removeLayoutComponent(Component comp)
+ {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)
+ */
+ public Dimension minimumLayoutSize(Container parent)
+ {
+ return preferredLayoutSize(parent);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)
+ */
+ public Dimension preferredLayoutSize(Container parent)
+ {
+ return (determineSize());
+ }
+
+ /**
+ * Method which determine minimum with and height of this layout. The size will be stored after
+ * cumputing in a class member. With a call to invalidateLayout this will be deleted and at the
+ * next call to this method the values are computed again.
+ *
+ * @return current minimum size
+ */
+ private Dimension determineSize()
+ {
+ if (prefLayoutDim == null)
+ {
+ int width = minimumAllColumnsWidth();
+ int height = minimumOverallHeight();
+ prefLayoutDim = new Dimension(width, height);
+ }
+ return (Dimension) (prefLayoutDim.clone());
+ }
+
+ /**
+ * Returns the number of rows that need to be laid out.
+ */
+ private int rows()
+ {
+ int maxRows = 0;
+ for (int i = 0; i < components.size(); ++i)
+ {
+ int curRows = ((ArrayList) components.get(i)).size();
+ if (curRows > maxRows) maxRows = curRows;
+
+ }
+ return (maxRows);
+ }
+
+ /**
+ * Returns the number of columns that need to be laid out.
+ */
+ private int columns()
+ {
+ return (components.size());
+ }
+
+ /**
+ * Minimum height of all rows.
+ *
+ * @return minimum height of all rows
+ */
+ private int minimumOverallHeight()
+ {
+ int height = 0;
+
+ for (int i = 0; i < rows(); i++)
+ {
+ height += rowHeight(i);
+ }
+
+ return (height);
+ }
+
+ /**
+ * Measures and returns the minimum height required to render the components in the indicated
+ * row.
+ *
+ * @param row the index of the row to measure
+ */
+ private int rowHeight(int row)
+ {
+ int height = 0;
+ for (int i = 0; i < components.size(); ++i)
+ {
+ int retval = cellSize(row, i).height;
+ if (retval > height) height = retval;
+ }
+ return (height);
+ }
+
+ /**
+ * Measures and returns the minimum size required to render the component in the indicated row
+ * and column.
+ *
+ * @param row the index of the row to measure
+ * @param column the column of the component
+ */
+ private Dimension cellSize(int row, int column)
+ {
+ Dimension retval = new Dimension();
+ Component component;
+ IzPanelConstraints constraints;
+
+ try
+ {
+ constraints = getConstraint(column, row);
+ if (constraints != null)
+ {
+ component = constraints.component;
+ Dimension dim = component.getMinimumSize();
+ retval.height = dim.height;
+ retval.width = dim.width;
+ if (needsReEvaluation(component)) retval.width = 0;
+ }
+ }
+ // ----------------------------------------------------
+ // we might get an exception if one of the array list is
+ // shorter, because we index out of bounds. If there
+ // is nothing there then the height is 0, nothing
+ // further to worry about!
+ // ----------------------------------------------------
+ catch (Throwable exception)
+ {}
+
+ return (retval);
+ }
+
+ /**
+ * Returns the minimum width of the column requested. This contains not the gaps.
+ *
+ * @param column the columns to measure
+ *
+ * @return the minimum width required to fit the components in this column
+ */
+ private int minimumColumnWidth(int column)
+ {
+ int maxWidth = 0;
+ for (int i = 0; i < rows(); ++i)
+ {
+ Dimension cs = cellSize(i, column);
+ if (maxWidth < cs.width) maxWidth = cs.width;
+ }
+ return (maxWidth);
+ }
+
+ /**
+ * Returns the minimum width needed by all columns
+ *
+ * @return
+ */
+ private int minimumAllColumnsWidth()
+ {
+ int width = 0;
+ for (int i = 0; i < this.components.size(); ++i)
+ width += minimumColumnWidth(i);
+ return (width);
+ }
+
+ /**
+ * Returns the constraint object of the component at the given place.
+ *
+ * @param col column of the component
+ * @param row row of the component
+ * @return the constraint object of the component at the given place
+ */
+ private IzPanelConstraints getConstraint(int col, int row)
+ {
+ Object obj = components.get(col);
+ if (obj != null && obj instanceof ArrayList)
+ obj = ((ArrayList) components.get(col)).get(row);
+ if (obj != null) return ((IzPanelConstraints) obj);
+ return (null);
+ }
+
+ private int getAdaptedXPos(int xpos, int curWidth, Dimension curDim,
+ IzPanelConstraints currentConst)
+ {
+ int adaptedXPos = xpos + currentConst.getXGap();
+ switch (currentConst.getXCellAlignment())
+ {
+ case LEFT:
+ break;
+ case RIGHT:
+ adaptedXPos += curWidth - curDim.width;
+ break;
+ case CENTER:
+ default:
+ adaptedXPos += (curWidth - curDim.width) / 2;
+ break;
+
+ }
+ return (adaptedXPos);
+
+ }
+
+ private int getAdaptedYPos(int ypos, int curHeight, Dimension curDim,
+ IzPanelConstraints currentConst)
+ {
+ int adaptedYPos = ypos + currentConst.getYGap();
+ switch (currentConst.getYCellAlignment())
+ {
+ case TOP:
+ break;
+ case BOTTOM:
+ adaptedYPos += curHeight - curDim.height;
+ break;
+ case CENTER:
+ default:
+ adaptedYPos += (curHeight - curDim.height) / 2;
+ break;
+
+ }
+ return (adaptedYPos);
+ }
+
+ private void resolveDefaultSettings(int col, int row)
+ {
+ IzPanelConstraints currentConst = getConstraint(col, row);
+ IzPanelConstraints nextYConst = (row < rows() - 1) ? getConstraint(col, row + 1) : null;
+ IzPanelConstraints nextXConst = (col < columns() - 1) ? getConstraint(col + 1, row) : null;
+ int gap = currentConst.getYGap();
+ if (gap == AUTOMATIC_GAP)
+ { // Automatic gap; determine now.
+ currentConst.setYGap(getYGap(currentConst, nextYConst));
+ }
+ else if (gap < 0)
+ {
+ currentConst.setYGap(IzPanelConstraints.DEFAULT_Y_GAPS[-gap]);
+ }
+ gap = currentConst.getXGap();
+ if (gap == AUTOMATIC_GAP)
+ { // Automatic gap; determine now.
+ currentConst.setXGap(getXGap(currentConst, nextXConst));
+ }
+ else if (gap < 0)
+ {
+ currentConst.setXGap(IzPanelConstraints.DEFAULT_X_GAPS[-gap]);
+ }
+
+ if (currentConst.getXCellAlignment() < 0)
+ {
+ currentConst.setXCellAlignment(IzPanelConstraints.DEFAULT_X_ALIGNMENT[-currentConst
+ .getXCellAlignment()]);
+ }
+ if (currentConst.getYCellAlignment() < 0)
+ {
+ currentConst.setYCellAlignment(IzPanelConstraints.DEFAULT_Y_ALIGNMENT[-currentConst
+ .getYCellAlignment()]);
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager#layoutContainer(java.awt.Container)
+ */
+ public void layoutContainer(Container parent)
+ {
+ if( ! needNewLayout(parent ))
+ {
+ fastLayoutContainer(parent);
+ return;
+ }
+ prefLayoutDim = null;
+ preferredLayoutSize(parent);
+ Dimension realSizeDim = parent.getSize();
+ Insets insets = parent.getInsets();
+
+ int rowHeight;
+ int onceAgain = 0;
+ int[] generellOffset = new int[] { 0, 0};
+ // int generellYOffset = 0;
+ // int generellXOffset = 0;
+ int maxWidth = 0;
+ int overallHeight = 0;
+ int anchorNeedsReEval = 0;
+ Rectangle curRect = new Rectangle();
+ while (anchorNeedsReEval < 2)
+ {
+ int ypos = insets.top;
+
+ int row = 0;
+ int minWidth = 0xffff;
+ int minHeight = 0xffff;
+ maxWidth = 0;
+ overallHeight = 0;
+ while (row < rows())
+ {
+ int outerRowHeight = 0;
+ int xpos = insets.left;
+ rowHeight = rowHeight(row);
+ int col = 0;
+ IzPanelConstraints[] colConstraints = new IzPanelConstraints[columns()];
+ int usedWidth = 0;
+ Dimension curDim;
+ while (col < columns())
+ {
+ resolveDefaultSettings(col, row);
+ IzPanelConstraints currentConst = getConstraint(col, row);
+ colConstraints[col] = currentConst;
+ Component currentComp = currentConst.component;
+ curDim = currentComp.getPreferredSize();
+ int curWidth = minimumColumnWidth(col);
+ col++;
+ if (currentConst.getXWeight() > 1)
+ {
+ int weight = currentConst.getXWeight();
+ while (weight > 1 && col < columns())
+ {
+ colConstraints[col] = getConstraint(col, row);
+ if (!(colConstraints[col].component instanceof DummyComponent)) break;
+ curWidth += minimumColumnWidth(col);
+ col++;
+ weight--;
+ }
+ }
+ // width known
+ int adaptedXPos = getAdaptedXPos(xpos, curWidth, curDim, currentConst);
+ int adaptedYPos = getAdaptedYPos(ypos, rowHeight, curDim, currentConst);
+ currentComp.setBounds(adaptedXPos + generellOffset[0], ypos
+ + currentConst.getYGap() + generellOffset[1], curWidth, rowHeight);
+ currentComp.getBounds(curRect);
+
+ if (!(currentComp instanceof DummyComponent))
+ {
+ if (curRect.x < minWidth) minWidth = curRect.x;
+ if (curRect.y < minHeight) minHeight = curRect.y;
+ }
+ int curMax = (int) curRect.getMaxX();
+ if (curMax - minWidth > maxWidth) maxWidth = curMax - minWidth;
+ curMax = (int) curRect.getMaxY();
+ currentConst.setBounds(curRect);
+ if (curMax - minHeight > overallHeight) overallHeight = curMax - minHeight;
+ xpos += currentComp.getSize().width + currentConst.getXGap();
+ usedWidth += curWidth;
+ if (outerRowHeight < rowHeight + currentConst.getYGap())
+ outerRowHeight = rowHeight + currentConst.getYGap();
+ }
+ // Now we have made a row, but may be there are place across or/and a component
+ // needs a reevaluation.
+ double rowStretch = 0.0;
+ int i;
+ // Determine hole stretch of this row.
+ for (i = 0; i < colConstraints.length; ++i)
+ {
+ rowStretch += colConstraints[i].getStretch();
+ }
+ // Modify rowStretch depending on the current X-Stretch type.
+ if (rowStretch > 0.0)
+ {
+ switch (IzPanelLayout.getXStretchType())
+ {
+ case RELATIVE_STRETCH:
+ break;
+ case ABSOLUTE_STRETCH:
+ rowStretch = 1.0;
+ break;
+ case NO_STRETCH:
+ default:
+ rowStretch = 0.0;
+ break;
+ }
+ }
+ if (realSizeDim.width - insets.right > xpos && rowStretch > 0.0)
+ { // Compute only if there is space to share and at least one control should be
+ // stretched.
+ int pixel = realSizeDim.width - insets.right - xpos; // How many pixel we
+ // can use for stretching.
+ int offset = 0;
+ int oldOnceAgain = onceAgain;
+ for (i = 0; i < colConstraints.length; ++i)
+ {
+ int curPixel = (int) ((colConstraints[i].getStretch() / rowStretch) * pixel);
+
+ Rectangle curBounds = colConstraints[i].component.getBounds();
+ int newWidth = curPixel + curBounds.width;
+ Dimension oldDim = colConstraints[i].component.getPreferredSize();
+
+ colConstraints[i].component.setBounds(curBounds.x + offset, curBounds.y,
+ newWidth, curBounds.height);
+ colConstraints[i].component.getBounds(curRect);
+ if (!(colConstraints[i].component instanceof DummyComponent))
+ {
+ if (curRect.x < minWidth) minWidth = curRect.x;
+ if (curRect.y < minHeight) minHeight = curRect.y;
+ }
+ int curMax = (int) curRect.getMaxX();
+ if (curMax - minWidth > maxWidth) maxWidth = curMax - minWidth;
+ curMax = (int) curRect.getMaxY();
+ colConstraints[i].setBounds(curRect);
+
+ if (curMax - minHeight > overallHeight) overallHeight = curMax - minHeight;
+
+ offset += curPixel;
+ if (needsReEvaluation(colConstraints[i].component))
+ {
+ if (oldDim.height != colConstraints[i].component.getPreferredSize().height
+ && oldOnceAgain == onceAgain) onceAgain++;
+ }
+ }
+
+ }
+ // Seems so that height has changed. Reevaluate only one time else it is possible
+ // to go in a endless loop.
+
+ if (onceAgain == 1) continue;
+ onceAgain = 0;
+ ypos = ypos + outerRowHeight;
+ row++;
+ }
+ anchorNeedsReEval += resolveGenerellOffsets(generellOffset, realSizeDim, insets,
+ maxWidth, overallHeight);
+
+ }
+ }
+
+ private void fastLayoutContainer(Container parent)
+ {
+ for( int row = 0; row < rows(); ++ row)
+ {
+ for( int col = 0; col < columns(); ++ col)
+ {
+ IzPanelConstraints currentConst = getConstraint(col, row);
+ currentConst.component.setBounds(currentConst.getBounds());
+
+ }
+
+ }
+ }
+
+ private boolean needNewLayout(Container parent)
+ {
+ Dimension ops = oldParentSize;
+ Insets opi = oldParentInsets;
+ oldParentSize = parent.getSize();
+ oldParentInsets = parent.getInsets();
+ if( opi == null || opi == null)
+ return(true);
+ if( ops.equals(parent.getSize()) && opi.equals(parent.getInsets()))
+ return(false);
+ return(true);
+
+ }
+
+ private int resolveGenerellOffsets(int[] generellOffset, Dimension realSizeDim, Insets insets,
+ int maxWidth, int overallHeight)
+ {
+ int retval = 1;
+ switch (getAnchor())
+ {
+ case CENTER:
+ generellOffset[0] = (realSizeDim.width - insets.left - insets.right - maxWidth) / 2;
+ generellOffset[1] = (realSizeDim.height - insets.top - insets.bottom - overallHeight) / 2;
+ break;
+ case WEST:
+ generellOffset[0] = 0;
+ generellOffset[1] = (realSizeDim.height - insets.top - insets.bottom - overallHeight) / 2;
+ break;
+ case EAST:
+ generellOffset[0] = realSizeDim.width - insets.left - insets.right - maxWidth;
+ generellOffset[1] = (realSizeDim.height - insets.top - insets.bottom - overallHeight) / 2;
+ break;
+ case NORTH:
+ generellOffset[0] = (realSizeDim.width - insets.left - insets.right - maxWidth) / 2;
+ generellOffset[1] = 0;
+ break;
+ case SOUTH:
+ generellOffset[0] = (realSizeDim.width - insets.left - insets.right - maxWidth) / 2;
+ generellOffset[1] = realSizeDim.height - insets.top - insets.bottom - overallHeight;
+ break;
+ case NORTH_WEST:
+ generellOffset[0] = 0;
+ generellOffset[1] = 0;
+ retval = 2;
+ break;
+ case NORTH_EAST:
+ generellOffset[0] = realSizeDim.width - insets.left - insets.right - maxWidth;
+ generellOffset[1] = 0;
+ break;
+ case SOUTH_WEST:
+ generellOffset[0] = 0;
+ generellOffset[1] = realSizeDim.height - insets.top - insets.bottom - overallHeight;
+ break;
+ case SOUTH_EAST:
+ generellOffset[0] = realSizeDim.width - insets.left - insets.right - maxWidth;
+ generellOffset[1] = realSizeDim.height - insets.top - insets.bottom - overallHeight;
+ break;
+
+ }
+ return (retval);
+ }
+
+ /**
+ * Returns whether the type of component needs potential a reevaluation or not.
+ *
+ * @param comp component to check
+ * @return whether the type of component needs potential a reevaluation or not
+ */
+ private boolean needsReEvaluation(Component comp)
+ {
+ return (comp instanceof com.izforge.izpack.util.MultiLineLabel);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager2#getLayoutAlignmentX(java.awt.Container)
+ */
+ public float getLayoutAlignmentX(Container target)
+ {
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager2#getLayoutAlignmentY(java.awt.Container)
+ */
+ public float getLayoutAlignmentY(Container target)
+ {
+ return 0;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager2#invalidateLayout(java.awt.Container)
+ */
+ public void invalidateLayout(Container target)
+ {
+ //prefLayoutDim = null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.awt.LayoutManager2#maximumLayoutSize(java.awt.Container)
+ */
+ public Dimension maximumLayoutSize(Container target)
+ {
+ return (minimumLayoutSize(target));
+ }
+
+ public void addLayoutComponent(Component comp, Object constraints)
+ {
+ if( comp == null ) throw new NullPointerException("component has to be not null");
+ if (!(constraints instanceof IzPanelConstraints ))
+ {
+ Object oldVal = constraints;
+ constraints = IzPanelLayout.DEFAULT_CONSTRAINTS[getIntermediarId(comp.getClass(), true)];
+ if( NEXT_LINE.equals(oldVal))
+ {
+ ((IzPanelConstraints) constraints).setXPos(0);
+ ((IzPanelConstraints) constraints).setYPos(NEXT_ROW);
+ }
+ }
+ IzPanelConstraints cc = (IzPanelConstraints) ((IzPanelConstraints) constraints).clone();
+ cc.component = comp;
+ int i;
+ // Modify positions if constraint value is one of the symbolic ints.
+ int yPos = cc.getYPos();
+ if (yPos == IzPanelConstraints.NEXT_ROW) yPos = currentYPos + 1;
+ if (yPos == IzPanelConstraints.CURRENT_ROW) yPos = currentYPos;
+ cc.setYPos(yPos);
+ int xPos = cc.getXPos();
+ if (xPos == IzPanelConstraints.NEXT_COLUMN) xPos = currentXPos + 1;
+ if (xPos == IzPanelConstraints.CURRENT_COLUMN) xPos = currentXPos;
+ cc.setXPos(xPos);
+ // Now we know real x and y position. If needed, expand array or
+ // array of array.
+ if (components.size() <= cc.getXPos())
+ {
+ for (i = components.size() - 1; i < cc.getXPos(); ++i)
+ components.add(new ArrayList());
+ }
+ ArrayList xComp = (ArrayList) components.get(xPos);
+
+ if (xComp.size() <= yPos)
+ {
+ for (i = xComp.size() - 1; i < yPos - 1; ++i)
+ {
+ IzPanelConstraints dc = getDefaultConstraint(XDUMMY_CONSTRAINT);
+ dc.component = new DummyComponent();
+ xComp.add(dc);
+
+ }
+ }
+ xComp.add(yPos, cc);
+ if (currentYPos < xComp.size() - 1) currentYPos = xComp.size() - 1;
+ currentXPos = xPos;
+
+ }
+
+ public static IzPanelConstraints getDefaultConstraint(int type)
+ {
+ return ((IzPanelConstraints) DEFAULT_CONSTRAINTS[type].clone());
+ }
+
+ /**
+ * Component which will be used as placeholder if not extern component will be set.
+ *
+ * @author Klaus Bartz
+ *
+ */
+ private static class DummyComponent extends Component
+ {
+
+ public Dimension getMinimumSize()
+ {
+ return (new Dimension(0, 0));
+ }
+
+ public Dimension getPreferredSize()
+ {
+ return getMinimumSize();
+ }
+
+ public Dimension getMaximumSize()
+ {
+ return getMinimumSize();
+ }
+
+ public Rectangle getBounds()
+ {
+ return (getBounds(new Rectangle()));
+ }
+
+ public Rectangle getBounds(Rectangle rect)
+ {
+ Rectangle rv = (rect != null) ? rect : new Rectangle();
+ rv.setBounds(0, 0, 0, 0);
+ return (rv);
+ }
+
+ }
+
+ /**
+ * Returns the anchor constant.
+ *
+ * @return the anchor constant
+ */
+ public static int getAnchor()
+ {
+ return ANCHOR;
+ }
+
+ /**
+ * Sets the anchor constant.
+ *
+ * @param anchor symbolic constant to be used
+ */
+ public static void setAnchor(int anchor)
+ {
+ ANCHOR = anchor;
+ }
+
+ /**
+ * Returns the current used type of stretching for the X-direction. Possible values are NO,
+ * RELATIVE and ABSOLUTE.
+ *
+ * @return the current used type of stretching for the X-direction
+ */
+ public static int getXStretchType()
+ {
+ return X_STRETCH_TYPE;
+ }
+
+ /**
+ * Sets the type of stretching to be used for the X-Direction. Possible values are NO, RELATIVE
+ * and ABSOLUTE.
+ *
+ * @param x_stretch constant to be used for stretch type
+ */
+ public static void setXStretchType(int x_stretch)
+ {
+ X_STRETCH_TYPE = x_stretch;
+ }
+
+}
Property changes on: izpack-src/trunk/src/lib/com/izforge/izpack/gui/IzPanelLayout.java
___________________________________________________________________
Name: svn:executable
+ *
Added: izpack-src/trunk/src/lib/com/izforge/izpack/gui/LayoutConstants.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/gui/LayoutConstants.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/gui/LayoutConstants.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -0,0 +1,98 @@
+package com.izforge.izpack.gui;
+
+import javax.swing.SwingConstants;
+
+
+public interface LayoutConstants extends SwingConstants
+{
+ public final static int NO_GAP = -13;
+
+ /** Identifier for gaps between labels */
+ public final static int LABEL_GAP = -1;
+
+ /** Identifier for gaps between labels and text fields */
+ public final static int TEXT_GAP = -2;
+
+ /** Identifier for gaps between labels and controls like radio buttons/groups */
+ public final static int CONTROL_GAP = -3;
+
+ /** Identifier for gaps between paragraphs */
+ public final static int PARAGRAPH_GAP = -4;
+
+ /** Identifier for gaps between labels and text fields */
+ public final static int LABEL_TO_TEXT_GAP = -5;
+
+ /** Identifier for gaps between labels and controls like radio buttons/groups */
+ public final static int LABEL_TO_CONTROL_GAP = -6;
+
+ /** Identifier for gaps between text fields and labels */
+ public final static int TEXT_TO_LABEL_GAP = -7;
+
+ /** Identifier for gaps between controls like radio buttons/groups and labels */
+ public final static int CONTROL_TO_LABEL_GAP = -8;
+
+ /** Identifier for gaps between controls like radio buttons/groups and labels */
+ public final static int CONTROL_TO_TEXT_GAP = -9;
+
+ /** Identifier for gaps between controls like radio buttons/groups and labels */
+ public final static int TEXT_TO_CONTROL_GAP = -10;
+
+ /** Identifier for gaps between panel top and the first control. */
+ public final static int TOP_GAP = -11;
+
+ /** Identifier for gaps to be evaluated automatically at a late time. */
+ public final static int AUTOMATIC_GAP = -12;
+
+ /** Identifier for relative row positioning (next). */
+ public static final int NEXT_ROW = -1;
+
+ /** Identifier for relative row positioning (current). */
+ public static final int CURRENT_ROW = -2;
+
+ /** Identifier for relative column positioning (next). */
+ public static final int NEXT_COLUMN = -1;
+
+ /** Identifier for relative column positioning (current). */
+ public static final int CURRENT_COLUMN = -2;
+
+ /** Identifier for using the default alignment defined for labels. The
+ * value will be resolved at layouting, therefore it is possible to change
+ * the default values in </code>IzPanelConstraints</code>.
+ */
+ public static final int DEFAULT_LABEL_ALIGNMENT = -1;
+
+ /** Identifier for using the default alignment defined for text fields. The
+ * value will be resolved at layouting, therefore it is possible to change
+ * the default values in </code>IzPanelConstraints</code>.
+ */
+ public static final int DEFAULT_TEXT_ALIGNMENT = -2;
+
+ /** Identifier for using the default alignment defined for other controls. The
+ * value will be resolved at layouting, therefore it is possible to change
+ * the default values in </code>IzPanelConstraints</code>.
+ */
+ public static final int DEFAULT_CONTROL_ALIGNMENT = -3;
+
+ public static final int LABEL_CONSTRAINT = 0;
+
+ public static final int TEXT_CONSTRAINT = 1;
+
+ public static final int CONTROL_CONSTRAINT = 2;
+
+ public static final int MULTILINE_LABEL_CONSTRAINT = 3;
+
+ public static final int XDUMMY_CONSTRAINT = 4;
+
+ public static final int YDUMMY_CONSTRAINT = 5;
+
+ /** Constant used to specify that no action should be done. Useable for X_STRETCH. */
+ public static final int NO_STRETCH = 0;
+
+ /** X_STRETCH constant used to specify relative weighting of stretch factors. */
+ public static final int RELATIVE_STRETCH = 1;
+
+ /** X_STRETCH constant used to specify absolute weighting of stretch factors. */
+ public static final int ABSOLUTE_STRETCH = 2;
+
+ public static final String NEXT_LINE = "nextLine";
+}
Property changes on: izpack-src/trunk/src/lib/com/izforge/izpack/gui/LayoutConstants.java
___________________________________________________________________
Name: svn:executable
+ *
Modified: izpack-src/trunk/src/lib/com/izforge/izpack/installer/IzPanel.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/installer/IzPanel.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/installer/IzPanel.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -1,5 +1,5 @@
/*
- * $Id:$
+ * $Id$
* IzPack - Copyright 2001-2006 Julien Ponge, All Rights Reserved.
*
* http://www.izforge.com/izpack/
@@ -45,17 +45,27 @@
/**
* Defines the base class for the IzPack panels. Any panel should be a subclass of it and should
* belong to the <code>com.izforge.izpack.panels</code> package.
+ * Since IzPack version 3.9 the layout handling will be delegated to the class
+ * LayoutHelper which can be accessed by <code>getLayoutHelper</code>.
+ * There are some layout helper methods in this class which will be exist some time longer,
+ * but they are deprecated. At a redesign or new panel use the layout helper.
+ * There is a special layout manager for IzPanels. This layout manager will be supported
+ * by the layout helper. There are some points which should be observed at layouting.
+ * One point e.g. is the anchor. All IzPanels have to be able to use different anchors, as
+ * minimum CENTER and NORTHWEST.
+ * To use a consistent appearance use this special layout manger and not others.
*
* @author Julien Ponge
+ * @author Klaus Bartz
*/
public class IzPanel extends JPanel implements AbstractUIHandler
{
private static final long serialVersionUID = 3256442495255786038L;
- /** Indicates whether grid bag layout was started or not */
- protected boolean gridBagLayoutStarted = false;
-
+ /** The helper object which handles layout */
+ protected LayoutHelper layoutHelper;
+
/** The component which should get the focus at activation */
protected Component initialFocus = null;
@@ -66,15 +76,6 @@
/** The parent IzPack installer frame. */
protected InstallerFrame parent;
-
- /** The default grid bag constraint. */
- protected GridBagConstraints defaultGridBagConstraints = new GridBagConstraints();
-
- /** Current x position of grid. */
- protected int gridxCounter = -1;
-
- /** Current y position of grid. */
- protected int gridyCounter = -1;
/** i.e. "com.izforge.izpack.panels.HelloPanel" */
protected String myFullClassname;
@@ -88,55 +89,12 @@
/** internal headline string */
protected String headline;
- /** internal layout */
- protected GridBagLayout izPanelLayout;
-
/** internal headline Label */
protected JLabel headLineLabel;
/** Is this panel general hidden or not */
protected boolean hidden;
- /** Layout anchor declared in the xml file
- * with the guiprefs modifier "layoutAnchor"
- */
- protected static int ANCHOR = -1;
-
- /** Identifier for using no gaps */
- public final static int NO_GAP = 0;
-
- /** Identifier for gaps between labels */
- public final static int LABEL_GAP = 1;
-
- /** Identifier for gaps between paragraphs */
- public final static int PARAGRAPH_GAP = 2;
-
- /** Identifier for gaps between labels and text fields */
- public final static int LABEL_TO_TEXT_GAP = 3;
-
- /** Identifier for gaps between labels and controls like radio buttons/groups */
- public final static int LABEL_TO_CONTROL_GAP = 4;
-
- /** Identifier for gaps between text fields and labels*/
- public final static int TEXT_TO_LABEL_GAP = 5;
-
- /** Identifier for gaps between controls like radio buttons/groups and labels*/
- public final static int CONTROL_TO_LABEL_GAP = 6;
-
- /**
- * Look-up table for gap identifier to gap names. The gap names can be used in the XML
- * installation configuration file. Be aware that case sensitivity should be used.
- */
- public final static String[] GAP_NAME_LOOK_UP = { "noGap", "labelGap", "paragraphGap",
- "labelToTextGap", "labelToControlGap", "textToLabelGap", "controlToLabelGap"};
-
- /**
- * Current defined gaps. Here are the defaults which can be overwritten at the first call to
- * method getGap. The gap type will be determined by the array index and has to be synchron to
- * the gap identifier and the indices of array GAP_NAME_LOOK_UP
- */
- protected static int[] GAPS = { 0, 5, 5, 5, 5, 5, 5, 5, -1};
-
/** HEADLINE = "headline" */
public final static String HEADLINE = "headline";
@@ -194,10 +152,7 @@
{
super( );
init( parent, idata );
-
- setLayout( );
buildHeadline( iconName, instance );
- gridyCounter++;
}
/**
@@ -281,7 +236,7 @@
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets( 0, 0, 0, 0 );
headLineLabel.setName( HEADLINE );
- izPanelLayout.setConstraints( headLineLabel, gbc );
+ ((GridBagLayout) getLayout()).addLayoutComponent( headLineLabel, gbc );
add( headLineLabel );
}
@@ -315,19 +270,12 @@
- /**
- * Inits and sets teh internal LayoutObjects.
- *
- * @return true if finshed.
+ /**
+ * Inits and sets the internal layout helper object.
*/
- protected boolean setLayout( )
+ protected void initLayoutHelper()
{
- izPanelLayout = new GridBagLayout( );
- defaultGridBagConstraints = new GridBagConstraints( );
-
- setLayout( izPanelLayout );
-
- return true;
+ layoutHelper = new LayoutHelper(this);
}
@@ -353,8 +301,8 @@
this.idata = idata;
this.parent = parent;
-
- gridyCounter = -1;
+ initLayoutHelper( );
+
}
/**
@@ -672,32 +620,32 @@
* Returns the default GridBagConstraints of this panel.
*
* @return the default GridBagConstraints of this panel
+ * @deprecated use <code>getLayoutHelper().getDefaulConstraints</code> instead
*/
public GridBagConstraints getDefaultGridBagConstraints()
{
- startGridBagLayout();
- return defaultGridBagConstraints;
+ return(GridBagConstraints) ( layoutHelper.getDefaultConstraints());
}
/**
* Sets the default GridBagConstraints of this panel to the given object.
*
* @param constraints which should be set as default for this object
+ * @deprecated use <code>getLayoutHelper().setDefaultConstraints</code> instead
*/
public void setDefaultGridBagConstraints(GridBagConstraints constraints)
{
- startGridBagLayout();
- defaultGridBagConstraints = constraints;
+ layoutHelper.setDefaultConstraints(constraints);
}
/**
* Resets the grid counters which are used at getNextXGridBagConstraints and
* getNextYGridBagConstraints.
+ * @deprecated use <code>getLayoutHelper().resetGridCounter</code> instead
*/
public void resetGridCounter()
{
- gridxCounter = -1;
- gridyCounter = -1;
+ layoutHelper.resetGridCounter();
}
/**
@@ -708,14 +656,11 @@
* @param gridy value to be used for the new constraint
* @return newly created GridBagConstraints with the given values and the values from the
* defaultGridBagConstraints for the other parameters
+ * @deprecated use <code>getLayoutHelper().getNewConstraints</code> instead
*/
public GridBagConstraints getNewGridBagConstraints(int gridx, int gridy)
{
- GridBagConstraints retval = (GridBagConstraints) getDefaultGridBagConstraints().clone();
- retval.gridx = gridx;
- retval.gridy = gridy;
- return (retval);
-
+ return(GridBagConstraints) ( layoutHelper.getNewConstraints(gridx, gridy));
}
/**
@@ -728,14 +673,12 @@
* @param gridheight value to be used for the new constraint
* @return newly created GridBagConstraints with the given values and the values from the
* defaultGridBagConstraints for the other parameters
+ * @deprecated use <code>getLayoutHelper().getNewConstraints</code> instead
*/
public GridBagConstraints getNewGridBagConstraints(int gridx, int gridy, int gridwidth,
int gridheight)
{
- GridBagConstraints retval = getNewGridBagConstraints(gridx, gridy);
- retval.gridwidth = gridwidth;
- retval.gridheight = gridheight;
- return (retval);
+ return(GridBagConstraints) (layoutHelper.getNewConstraints(gridx, gridy, gridwidth, gridheight));
}
/**
@@ -743,43 +686,23 @@
*
* @return a newly created GridBagConstraints for the next column of the current layout row
*
+ * @deprecated use <code>getLayoutHelper().getNextXConstraints</code> instead
*/
public GridBagConstraints getNextXGridBagConstraints()
{
- gridxCounter++;
- GridBagConstraints retval = getNewGridBagConstraints(gridxCounter, gridyCounter);
- return (retval);
+ return(GridBagConstraints) (layoutHelper.getNextXConstraints());
}
/**
- * Returns a newly created GridBagConstraints for the next column of the current layout row
- * using the given parameters.
- *
- * @param gridwidth width for this constraint
- * @param gridheight height for this constraint
- * @return a newly created GridBagConstraints for the next column of the current layout row
- * using the given parameters
- */
-// private GridBagConstraints getNextXGridBagConstraints(int gridwidth, int gridheight)
-// {
-// GridBagConstraints retval = getNextXGridBagConstraints();
-// retval.gridwidth = gridwidth;
-// retval.gridheight = gridheight;
-// return (retval);
-// }
-
- /**
* Returns a newly created GridBagConstraints with column 0 for the next row.
*
* @return a newly created GridBagConstraints with column 0 for the next row
*
+ * @deprecated use <code>getLayoutHelper().getNextYConstraints</code> instead
*/
public GridBagConstraints getNextYGridBagConstraints()
{
- gridyCounter++;
- gridxCounter = 0;
- GridBagConstraints retval = getNewGridBagConstraints(0, gridyCounter);
- return (retval);
+ return(GridBagConstraints) (layoutHelper.getNextYConstraints());
}
/**
@@ -790,14 +713,11 @@
* @param gridheight height for this constraint
* @return a newly created GridBagConstraints with column 0 for the next row using the given
* parameters
+ * @deprecated use <code>getLayoutHelper().getNextYConstraints</code> instead
*/
public GridBagConstraints getNextYGridBagConstraints(int gridwidth, int gridheight)
{
- startGridBagLayout();
- GridBagConstraints retval = getNextYGridBagConstraints();
- retval.gridwidth = gridwidth;
- retval.gridheight = gridheight;
- return (retval);
+ return(GridBagConstraints) (layoutHelper.getNextYConstraints(gridwidth, gridheight));
}
/**
@@ -805,31 +725,11 @@
* This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
* "SOUTH" or "SOUTHWEST". The earlier used value "BOTTOM" and the declaration via the IzPack
* variable <code>IzPanel.LayoutType</code> are also supported.
+ * @deprecated use <code>getLayoutHelper().startLayout</code> instead
*/
public void startGridBagLayout()
{
- if (gridBagLayoutStarted) return;
- gridBagLayoutStarted = true;
- GridBagLayout layout = new GridBagLayout();
- defaultGridBagConstraints.insets = new Insets(0, 0, getLabelGap(), 0);
- defaultGridBagConstraints.anchor = GridBagConstraints.WEST;
- setLayout(layout);
- switch (getAnchor())
- {
- case GridBagConstraints.SOUTH:
- case GridBagConstraints.SOUTHWEST:
- // Make a header to push the rest to the bottom.
- Filler dummy = new Filler();
- GridBagConstraints gbConstraint = getNextYGridBagConstraints();
- gbConstraint.weighty = 1.0;
- gbConstraint.fill = GridBagConstraints.BOTH;
- gbConstraint.anchor = GridBagConstraints.WEST;
- this.add(dummy, gbConstraint);
- break;
- default:
- break;
- }
- // TODO: impl for layout type CENTER, ...
+ layoutHelper.startLayout(new GridBagLayout());
}
/**
@@ -837,111 +737,13 @@
* This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
* "NORTH" or "NORTHWEST". The earlier used value "TOP" and the declaration via the IzPack
* variable <code>IzPanel.LayoutType</code> are also supported.
+ * @deprecated use <code>getLayoutHelper().completeLayout</code> instead
*/
public void completeGridBagLayout()
{
- switch (getAnchor())
- {
- case GridBagConstraints.NORTH:
- case GridBagConstraints.NORTHWEST:
- // Make a footer to push the rest to the top.
- Filler dummy = new Filler();
- GridBagConstraints gbConstraint = getNextYGridBagConstraints();
- gbConstraint.weighty = 1.0;
- gbConstraint.fill = GridBagConstraints.BOTH;
- gbConstraint.anchor = GridBagConstraints.WEST;
- add(dummy, gbConstraint);
- break;
- default:
- break;
- }
+ layoutHelper.completeLayout();
}
- /**
- * Returns the anchor as value declared in GridBagConstraints. Possible are NORTH,
- * NORTHWEST, SOUTH, SOUTHWEST and CENTER. The values can be configured in the
- * xml description file with the variable "IzPanel.LayoutType". The old values
- * "TOP" and "BOTTOM" from the xml file are mapped to NORTH and SOUTH.
- *
- * @return the anchor defined in the IzPanel.LayoutType variable.
- */
- public static int getAnchor()
- {
- if( ANCHOR >= 0)
- return(ANCHOR);
- AutomatedInstallData idata = AutomatedInstallData.getInstance();
- String todo;
- if (idata instanceof InstallData
- && ((InstallData) idata).guiPrefs.modifier.containsKey("layoutAnchor"))
- todo = (String) ((InstallData) idata).guiPrefs.modifier.get("layoutAnchor");
- else
- todo = idata.getVariable("IzPanel.LayoutType");
- if (todo == null) // No command, no work.
- ANCHOR = GridBagConstraints.NONE;
- else if("TOP".equals(todo) || "NORTH".equals(todo))
- ANCHOR = GridBagConstraints.NORTH;
- else if("BOTTOM".equals(todo) || "SOUTH".equals(todo))
- ANCHOR = GridBagConstraints.SOUTH;
- else if("SOUTHWEST".equals(todo))
- ANCHOR = GridBagConstraints.SOUTHWEST;
- else if("NORTHWEST".equals(todo))
- ANCHOR = GridBagConstraints.NORTHWEST;
- else if("CENTER".equals(todo))
- ANCHOR = GridBagConstraints.CENTER;
- return(ANCHOR);
- }
-
- /**
- * Returns the gap which should be used for (multiline) labels
- * to create a consistent view. The value will
- * be configurable by the guiprefs modifier "labelGap".
- * @return the label gap depend on the xml-configurable guiprefs modifier "labelGap"
- */
- public static int getLabelGap()
- {
- return (getGap(LABEL_GAP));
- }
-
- /**
- * Returns the gap which should be used between the given gui objects. The
- * value will be configurable by guiprefs modifiers. Valid values are all
- * entries in the static String array GAP_NAME_LOOK_UP of this class.
- * There are constant ints for the indexes of this array.
- *
- * @param gapId index in array GAP_NAME_LOOK_UP for the needed gap
- *
- * @return the gap depend on the xml-configurable guiprefs modifier
- */
- public static int getGap(int gapId)
- {
- if (gapId < 0 || gapId >= GAPS.length - 2)
- throw new IllegalArgumentException("gapId out of range.");
- if (GAPS[GAPS.length - 1] >= 0) return (GAPS[gapId]);
- AutomatedInstallData idata = AutomatedInstallData.getInstance();
- if (!(idata instanceof InstallData)) return (GAPS[gapId]);
- String var = null;
- for (int i = 0; i < GAP_NAME_LOOK_UP.length; ++i)
- {
- if (((InstallData) idata).guiPrefs.modifier.containsKey(GAP_NAME_LOOK_UP[i]))
- {
- var = (String) ((InstallData) idata).guiPrefs.modifier.get(GAP_NAME_LOOK_UP[i]);
- if (var != null)
- {
- try
- {
- GAPS[i] = Integer.parseInt(var);
- }
- catch (NumberFormatException nfe)
- {
- // Do nothing else use the default value.
- // Need to set it again at this position??
- }
- }
- }
-
- }
- return (GAPS[gapId]);
- }
// ------------------- Layout stuff -------------------- END ---
// ------------------- Summary stuff -------------------- START ---
@@ -1008,4 +810,15 @@
this.hidden = hidden;
}
+
+ /**
+ * Returns the used layout helper. Can be used in a derived class
+ * to create custom layout.
+ * @return the used layout helper
+ */
+ public LayoutHelper getLayoutHelper()
+ {
+ return layoutHelper;
+ }
+
}
Added: izpack-src/trunk/src/lib/com/izforge/izpack/installer/LayoutHelper.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/installer/LayoutHelper.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/installer/LayoutHelper.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -0,0 +1,483 @@
+/*
+ * $Id:$ IzPack - Copyright 2001-2006 Julien Ponge, All Rights Reserved.
+ *
+ * http://www.izforge.com/izpack/ http://developer.berlios.de/projects/izpack/
+ *
+ * Copyright 2006 Klaus Bartz
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.izforge.izpack.installer;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.LayoutManager2;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.SwingConstants;
+
+import com.izforge.izpack.gui.IzPanelConstraints;
+import com.izforge.izpack.gui.IzPanelLayout;
+import com.izforge.izpack.gui.LayoutConstants;
+import com.izforge.izpack.installer.IzPanel.Filler;
+
+/**
+ * This class manages the layout for IzPanels. The layout related methods in IzPanel delegates the
+ * work to this class. Use the layout helper directly because the delegating methods in IzPanel will
+ * be removed in the future.<br>
+ * This layout helper works with a GridBagLayout or a IzPanelLayout as layout manager. The layout
+ * manager has to be set at calling the method <code>startLayout</code>. This method has to be
+ * called before the first add of a component to the IzPanel.<br>
+ *
+ *
+ * @author Klaus Bartz
+ *
+ */
+public class LayoutHelper implements LayoutConstants
+{
+
+ IzPanel parent;
+
+ /** Indicates whether grid bag layout was started or not */
+ protected boolean layoutStarted = false;
+
+ /** The default grid bag constraint. */
+ protected Object defaultConstraints;
+
+ /** Current x position of grid. */
+ protected int gridxCounter = -1;
+
+ /** Current y position of grid. */
+ protected int gridyCounter = -1;
+
+ /** internal layout */
+ protected LayoutManager2 izPanelLayout;
+
+ /**
+ * Layout anchor declared in the xml file with the guiprefs modifier "layoutAnchor"
+ */
+ protected static int ANCHOR = -1;
+
+ protected static int X_STRETCH_TYPE = -1;
+
+ /**
+ * Look-up table for gap identifier to gap names. The gap names can be used in the XML
+ * installation configuration file. Be aware that case sensitivity should be used.
+ */
+ public final static String[] GAP_NAME_LOOK_UP = { "noGap", "labelGap", "paragraphGap",
+ "textGab", "controlGap", "labelToTextGap", "labelToControlGap", "textToLabelGap",
+ "controlToLabelGap", "controlToTextGap", "textToControlGap", "topGap"};
+
+ /**
+ * Current defined gaps. Here are the defaults which can be overwritten at the first call to
+ * method getGap. The gap type will be determined by the array index and has to be synchron to
+ * the gap identifier and the indices of array GAP_NAME_LOOK_UP
+ */
+ protected static int[] GAPS = { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, 0, -1};
+
+ public LayoutHelper(IzPanel parent)
+ {
+ this.parent = parent;
+ izPanelLayout = new GridBagLayout();
+ parent.setLayout(izPanelLayout);
+ gridyCounter++;
+ }
+
+ private boolean isGridBag()
+ {
+ return (izPanelLayout instanceof GridBagLayout);
+ }
+
+ private boolean isIzPanel()
+ {
+ return (izPanelLayout instanceof IzPanelLayout);
+ }
+
+ // ----------------------------------------------------------------------
+ public void add(Component comp)
+ {
+
+ }
+
+ // ------------------- Common Layout stuff -------------------- START ---
+
+ /**
+ * Start layout determining. If it is needed, a dummy component will be created as first row.
+ * This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
+ * "SOUTH" or "SOUTHWEST". The earlier used value "BOTTOM" and the declaration via the IzPack
+ * variable <code>IzPanel.LayoutType</code> are also supported.
+ */
+ public void startLayout(LayoutManager2 layout)
+ {
+ if (layoutStarted) return;
+ izPanelLayout = layout;
+ if (isGridBag())
+ {
+ startGridBagLayout();
+ return;
+ }
+ // TODO: impl for IzPanelLayout
+ if (isIzPanel()) startIzPanelLayout();
+ }
+
+ private void startIzPanelLayout()
+ {
+ IzPanelLayout.setAnchor(getAnchor());
+ IzPanelLayout.setXStretchType(getXStretchType());
+ parent.setLayout(izPanelLayout);
+
+ }
+
+ /**
+ * Complete layout determining. If it is needed, a dummy component will be created as last row.
+ * This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
+ * "NORTH" or "NORTHWEST". The earlier used value "TOP" and the declaration via the IzPack
+ * variable <code>IzPanel.LayoutType</code> are also supported.
+ */
+ public void completeLayout()
+ {
+ if (isGridBag())
+ {
+ completeGridBagLayout();
+ return;
+ }
+ // TODO: impl for IzPanelLayout
+ }
+
+ /**
+ * Returns the default constraints of this panel.
+ *
+ * @return the default constraints of this panel
+ */
+ public Object getDefaultConstraints()
+ {
+ startLayout(izPanelLayout);
+ return defaultConstraints;
+ }
+
+ /**
+ * Sets the default constraints of this panel to the given object.
+ *
+ * @param constraints which should be set as default for this object
+ */
+ public void setDefaultConstraints(Object constraints)
+ {
+
+ startLayout(izPanelLayout);
+ if ((isGridBag() && !(constraints instanceof GridBagConstraints))
+ || (isIzPanel() && !(constraints instanceof IzPanelConstraints)))
+ throw new IllegalArgumentException(
+ "Layout and constraints have to be from the same type.");
+ defaultConstraints = constraints;
+ }
+
+ /**
+ * Resets the grid counters which are used at getNextXConstraints and getNextYConstraints.
+ */
+ public void resetGridCounter()
+ {
+ gridxCounter = -1;
+ gridyCounter = -1;
+ }
+
+ /**
+ * Returns a newly created constraints with the given values and the values from the default
+ * constraints for the other parameters.
+ *
+ * @param gridx value to be used for the new constraint
+ * @param gridy value to be used for the new constraint
+ * @return newly created constraints with the given values and the values from the default
+ * constraints for the other parameters
+ */
+ public Object getNewConstraints(int gridx, int gridy)
+ {
+ if (isGridBag())
+ {
+ GridBagConstraints retval = (GridBagConstraints) ((GridBagConstraints) getDefaultConstraints())
+ .clone();
+ retval.gridx = gridx;
+ retval.gridy = gridy;
+ return (retval);
+ }
+ if (isIzPanel())
+ {
+ IzPanelConstraints retval = (IzPanelConstraints) ((IzPanelConstraints) getDefaultConstraints())
+ .clone();
+ retval.setXPos(gridx);
+ retval.setYPos(gridy);
+ return (retval);
+ }
+ return (null);
+ }
+
+ /**
+ * Returns a newly created constraints with the given values and the values from the
+ * defaultGridBagConstraints for the other parameters.
+ *
+ * @param gridx value to be used for the new constraint
+ * @param gridy value to be used for the new constraint
+ * @param gridwidth value to be used for the new constraint
+ * @param gridheight value to be used for the new constraint
+ * @return newly created constraints with the given values and the values from the default
+ * constraints for the other parameters
+ */
+ public Object getNewConstraints(int gridx, int gridy, int gridwidth, int gridheight)
+ {
+ Object retval = getNewConstraints(gridx, gridy);
+ if (isGridBag())
+ {
+ GridBagConstraints gbc = (GridBagConstraints) retval;
+ gbc.gridwidth = gridwidth;
+ gbc.gridheight = gridheight;
+ }
+ if (isIzPanel())
+ {
+ IzPanelConstraints gbc = (IzPanelConstraints) retval;
+ gbc.setXWeight(gridwidth);
+ gbc.setYWeight(gridheight);
+ }
+ return (retval);
+ }
+
+ /**
+ * Returns a newly created constraints for the next column of the current layout row.
+ *
+ * @return a newly created constraints for the next column of the current layout row
+ *
+ */
+ public Object getNextXConstraints()
+ {
+ gridxCounter++;
+ return (getNewConstraints(gridxCounter, gridyCounter));
+ }
+
+ /**
+ * Returns a newly created constraints with column 0 for the next row.
+ *
+ * @return a newly created constraints with column 0 for the next row
+ *
+ */
+ public Object getNextYConstraints()
+ {
+ gridyCounter++;
+ gridxCounter = 0;
+ return (getNewConstraints(0, gridyCounter));
+ }
+
+ /**
+ * Returns a newly created constraints with column 0 for the next row using the given
+ * parameters.
+ *
+ * @param gridwidth width for this constraint
+ * @param gridheight height for this constraint
+ * @return a newly created constraints with column 0 for the next row using the given parameters
+ */
+ public Object getNextYConstraints(int gridwidth, int gridheight)
+ {
+ gridyCounter++;
+ gridxCounter = 0;
+ return (getNewConstraints(0, gridyCounter, gridwidth, gridheight));
+ }
+
+ // ------------------- Common Layout stuff -------------------- END ---
+
+ // ------------------- GridBag Layout stuff -------------------- START ---
+ /**
+ * Start layout determining. If it is needed, a dummy component will be created as first row.
+ * This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
+ * "SOUTH" or "SOUTHWEST". The earlier used value "BOTTOM" and the declaration via the IzPack
+ * variable <code>IzPanel.LayoutType</code> are also supported.
+ */
+ private void startGridBagLayout()
+ {
+ if (layoutStarted) return;
+ layoutStarted = true;
+ if (izPanelLayout == null || !(izPanelLayout instanceof GridBagLayout))
+ izPanelLayout = new GridBagLayout();
+ GridBagConstraints dgbc = new GridBagConstraints();
+ dgbc.insets = new Insets(0, 0, getGap(LABEL_GAP), 0);
+ dgbc.anchor = GridBagConstraints.WEST;
+ defaultConstraints = dgbc;
+ parent.setLayout(izPanelLayout);
+ switch (getAnchor())
+ {
+ case SOUTH:
+ case SOUTH_WEST:
+ // Make a header to push the rest to the bottom.
+ Filler dummy = new Filler();
+ GridBagConstraints gbConstraint = (GridBagConstraints) getNextYConstraints();
+ gbConstraint.weighty = 1.0;
+ gbConstraint.fill = GridBagConstraints.BOTH;
+ gbConstraint.anchor = GridBagConstraints.WEST;
+ parent.add(dummy, gbConstraint);
+ break;
+ default:
+ break;
+ }
+ // TODO: impl for layout type CENTER, ...
+ }
+
+ /**
+ * Complete layout determining. If it is needed, a dummy component will be created as last row.
+ * This will be done, if the IzPack guiprefs modifier with the key "layoutAnchor" has the value
+ * "NORTH" or "NORTHWEST". The earlier used value "TOP" and the declaration via the IzPack
+ * variable <code>IzPanel.LayoutType</code> are also supported.
+ */
+ private void completeGridBagLayout()
+ {
+ switch (getAnchor())
+ {
+ case NORTH:
+ case NORTH_WEST:
+ // Make a footer to push the rest to the top.
+ Filler dummy = new Filler();
+ GridBagConstraints gbConstraint = (GridBagConstraints) getNextYConstraints();
+ gbConstraint.weighty = 1.0;
+ gbConstraint.fill = GridBagConstraints.BOTH;
+ gbConstraint.anchor = GridBagConstraints.WEST;
+ parent.add(dummy, gbConstraint);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Returns the anchor as value declared in GridBagConstraints. Possible are NORTH, NORTHWEST,
+ * SOUTH, SOUTHWEST and CENTER. The values can be configured in the xml description file with
+ * the variable "IzPanel.LayoutType". The old values "TOP" and "BOTTOM" from the xml file are
+ * mapped to NORTH and SOUTH.
+ *
+ * @return the anchor defined in the IzPanel.LayoutType variable.
+ */
+ public static int getAnchor()
+ {
+ if (ANCHOR >= 0) return (ANCHOR);
+ AutomatedInstallData idata = AutomatedInstallData.getInstance();
+ String todo;
+ if (idata instanceof InstallData
+ && ((InstallData) idata).guiPrefs.modifier.containsKey("layoutAnchor"))
+ todo = (String) ((InstallData) idata).guiPrefs.modifier.get("layoutAnchor");
+ else
+ todo = idata.getVariable("IzPanel.LayoutType");
+ if (todo == null) // No command, no work.
+ ANCHOR = CENTER;
+ else if ("EAST".equalsIgnoreCase(todo))
+ ANCHOR = EAST;
+ else if ("WEST".equalsIgnoreCase(todo))
+ ANCHOR = WEST;
+ else if ("TOP".equalsIgnoreCase(todo) || "NORTH".equalsIgnoreCase(todo))
+ ANCHOR = NORTH;
+ else if ("BOTTOM".equalsIgnoreCase(todo) || "SOUTH".equalsIgnoreCase(todo))
+ ANCHOR = SOUTH;
+ else if ("SOUTHWEST".equalsIgnoreCase(todo) || "SOUTH_WEST".equalsIgnoreCase(todo))
+ ANCHOR = SOUTH_WEST;
+ else if ("SOUTHEAST".equalsIgnoreCase(todo) || "SOUTH_EAST".equalsIgnoreCase(todo))
+ ANCHOR = SOUTH_EAST;
+ else if ("NORTHWEST".equalsIgnoreCase(todo) || "NORTH_WEST".equalsIgnoreCase(todo))
+ ANCHOR = NORTH_WEST;
+ else if ("NORTHEAST".equalsIgnoreCase(todo) || "NORTH_EAST".equalsIgnoreCase(todo))
+ ANCHOR = NORTH_EAST;
+ else if ("CENTER".equalsIgnoreCase(todo)) ANCHOR = CENTER;
+ return (ANCHOR);
+ }
+
+ /**
+ * Returns the gap which should be used between the given gui objects. The value will be
+ * configurable by guiprefs modifiers. Valid values are all entries in the static String array
+ * GAP_NAME_LOOK_UP of this class. There are constant ints for the indexes of this array.
+ *
+ * @param gapId index in array GAP_NAME_LOOK_UP for the needed gap
+ *
+ * @return the gap depend on the xml-configurable guiprefs modifier
+ */
+ public static int getGap(int gapId)
+ {
+ if (gapId < 0) gapId = -gapId;
+ if (gapId >= GAPS.length - 2) throw new IllegalArgumentException("gapId out of range.");
+ if (GAPS[GAPS.length - 1] >= 0) return (GAPS[gapId]);
+ AutomatedInstallData idata = AutomatedInstallData.getInstance();
+ if (!(idata instanceof InstallData)) return (GAPS[gapId]);
+ String var = null;
+ for (int i = 0; i < GAP_NAME_LOOK_UP.length; ++i)
+ {
+ if (((InstallData) idata).guiPrefs.modifier.containsKey(GAP_NAME_LOOK_UP[i]))
+ {
+ var = (String) ((InstallData) idata).guiPrefs.modifier.get(GAP_NAME_LOOK_UP[i]);
+ if (var != null)
+ {
+ try
+ {
+ GAPS[i] = Integer.parseInt(var);
+ }
+ catch (NumberFormatException nfe)
+ {
+ // Do nothing else use the default value.
+ // Need to set it again at this position??
+ }
+ }
+ }
+
+ }
+ GAPS[GAPS.length - 1] = 0; // Mark external settings allready loaded.
+ return (GAPS[gapId]);
+ }
+
+ public static int getXStretchType()
+ {
+ X_STRETCH_TYPE = ABSOLUTE_STRETCH;
+ if (X_STRETCH_TYPE > -1) return (X_STRETCH_TYPE);
+ AutomatedInstallData idata = AutomatedInstallData.getInstance();
+ if (!(idata instanceof InstallData)) return (RELATIVE_STRETCH);
+ String var = null;
+ if (((InstallData) idata).guiPrefs.modifier.containsKey("layoutXStretchType"))
+ {
+ var = (String) ((InstallData) idata).guiPrefs.modifier.get("layoutXStretchType");
+ if (var != null)
+ {
+ if ("RELATIVE_STRETCH".equalsIgnoreCase(var) || "RELATIVE".equalsIgnoreCase(var))
+ X_STRETCH_TYPE = RELATIVE_STRETCH;
+ else if ("ABSOLUTE_STRETCH".equalsIgnoreCase(var)
+ || "ABSOLUTE".equalsIgnoreCase(var))
+ X_STRETCH_TYPE = ABSOLUTE_STRETCH;
+ else if ("NO_STRETCH".equalsIgnoreCase(var) || "NO".equalsIgnoreCase(var))
+ X_STRETCH_TYPE = NO_STRETCH;
+ }
+ }
+ return (X_STRETCH_TYPE);
+
+ }
+
+ /**
+ * Returns the layout manager which current used by this layout helper. The layout manager
+ * implements LayoutManager2. It can be a GridBagLayout or a IzPanelLayout.
+ *
+ * @return current used layout manager
+ */
+ public LayoutManager2 getLayout()
+ {
+ return izPanelLayout;
+ }
+
+ /**
+ * Sets the given layout manager for this layout helper to be used.
+ *
+ * @param izPanelLayout layout manager to be used
+ */
+ public void setLayout(LayoutManager2 izPanelLayout)
+ {
+ this.izPanelLayout = izPanelLayout;
+ }
+
+}
Property changes on: izpack-src/trunk/src/lib/com/izforge/izpack/installer/LayoutHelper.java
___________________________________________________________________
Name: svn:executable
+ *
Modified: izpack-src/trunk/src/lib/com/izforge/izpack/panels/FinishPanel.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/panels/FinishPanel.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/panels/FinishPanel.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -79,12 +79,12 @@
gbConstraints.insets = new Insets(0, 0, 0, 0);
gbConstraints.fill = GridBagConstraints.NONE;
- if (getAnchor() == GridBagConstraints.NONE || getAnchor() == GridBagConstraints.CENTER)
+ if (getLayoutHelper().getAnchor() == GridBagConstraints.NONE || getLayoutHelper().getAnchor() == GridBagConstraints.CENTER)
gbConstraints.anchor = GridBagConstraints.CENTER;
else
{
gbConstraints.weightx = 1.0;
- gbConstraints.anchor = getAnchor();
+ gbConstraints.anchor = getLayoutHelper().getAnchor();
}
Modified: izpack-src/trunk/src/lib/com/izforge/izpack/panels/PathInputPanel.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/panels/PathInputPanel.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/panels/PathInputPanel.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -36,6 +36,7 @@
import com.izforge.izpack.installer.InstallData;
import com.izforge.izpack.installer.InstallerFrame;
import com.izforge.izpack.installer.IzPanel;
+import com.izforge.izpack.installer.LayoutHelper;
import com.izforge.izpack.installer.ResourceNotFoundException;
import com.izforge.izpack.util.AbstractUIHandler;
import com.izforge.izpack.util.Debug;
@@ -92,7 +93,8 @@
// Customize the default GridBagConstraints.
GridBagConstraints gbConstraint = getDefaultGridBagConstraints();
gbConstraint.gridwidth = GridBagConstraints.REMAINDER;
- if(getAnchor() == GridBagConstraints.NORTH || getAnchor() == GridBagConstraints.NORTHWEST)
+ if (LayoutHelper.getAnchor() == GridBagConstraints.NORTH
+ || LayoutHelper.getAnchor() == GridBagConstraints.NORTHWEST)
gbConstraint.weightx = 1.0;
else
gbConstraint.weightx = 0.0;
Modified: izpack-src/trunk/src/lib/com/izforge/izpack/panels/SimpleFinishPanel.java
===================================================================
--- izpack-src/trunk/src/lib/com/izforge/izpack/panels/SimpleFinishPanel.java 2006-07-30 04:16:20 UTC (rev 1509)
+++ izpack-src/trunk/src/lib/com/izforge/izpack/panels/SimpleFinishPanel.java 2006-08-02 14:44:57 UTC (rev 1510)
@@ -32,6 +32,7 @@
import com.izforge.izpack.installer.InstallData;
import com.izforge.izpack.installer.InstallerFrame;
import com.izforge.izpack.installer.IzPanel;
+import com.izforge.izpack.installer.LayoutHelper;
import com.izforge.izpack.util.VariableSubstitutor;
/**
@@ -71,12 +72,13 @@
gbConstraints.insets = new Insets(0, 0, 0, 0);
gbConstraints.fill = GridBagConstraints.NONE;
- if (getAnchor() == GridBagConstraints.NONE || getAnchor() == GridBagConstraints.CENTER)
+ if (LayoutHelper.getAnchor() == GridBagConstraints.NONE
+ || LayoutHelper.getAnchor() == GridBagConstraints.CENTER)
gbConstraints.anchor = GridBagConstraints.CENTER;
else
{
gbConstraints.weightx = 1.0;
- gbConstraints.anchor = getAnchor();
+ gbConstraints.anchor = LayoutHelper.getAnchor();
}
// We initialize our 'real' layout
centerPanel = new JPanel();
More information about the izpack-changes
mailing list