--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jdt.internal.ui.refactoring.ExtractConstantWizard.ExtractConstantInputPage;
+import org.eclipse.jdt.internal.ui.refactoring.ExtractTempWizard.ExtractTempInputPage;
+import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
+import org.eclipse.jdt.internal.ui.refactoring.contentassist.VariableNamesProcessor;
+import org.eclipse.jdt.internal.ui.refactoring.reorg.RenameInputWizardPage;
+import org.eclipse.jdt.internal.ui.refactoring.reorg.RenamePackageWizard.RenamePackageInputWizardPage;
+
+
+/**
+ * Helper class to layout a number of children if the composite uses a <code>GridLayout</code>.
+ * If the numbers of widgets to be layouted into one row is smaller than the number of columns
+ * defined for the grid layout the helper class assigns a corresponing value to the <code>
+ * GridData.horizontalSpan</code> field.
+ *
+ * Additionally a row layouter manages a default <code>GridData</code> object for each column.
+ * If set this grid data is used for the widget if it doesn't manage its own grid data object.
+ *
+ * Call one of the <code>perform</code> methods to assign the correct grid data objects to
+ * a set of widgets according to the number of columns passed to the layouter's constructor.
+ */
+public class RowLayouter {
+
+ public int spanHorizontalAlignment= -1;
+ public int spanGrabExcessHorizontalSpace= -1;
+ public int spanHorizontalSpan= -1;
+ public int spanHorizontalIndent= -1;
+ public int spanWidthHint= -1;
+
+ public int spanVerticalAlignment= -1;
+ public int spanGrabExcessVerticalSpace= -1;
+ public int spanVerticalSpan= -1;
+ public int spanHeightHint= -1;
+
+ private int fNumColumns;
+ private boolean fOrder;
+ private Control fLastControl;
+ private GridData[] fDefaultGridDatas= new GridData[4];
+
+ public RowLayouter(int numColumns) {
+ this(numColumns, false);
+ }
+
+ public RowLayouter(int numColumns, boolean order) {
+ fNumColumns= numColumns;
+ fOrder= order;
+ }
+
+ public void setDefaultSpan() {
+ spanHorizontalAlignment= GridData.FILL;
+ spanGrabExcessHorizontalSpace= 1;
+ }
+
+ public void perform(Control c1) {
+ perform(new Control[] {c1}, 0);
+ }
+
+ public void perform(Control c1, Control c2, int span) {
+ perform(new Control[] {c1, c2}, span);
+ }
+
+ public void perform(Control c1, Control c2, Control c3, int span) {
+ perform(new Control[] {c1, c2, c3}, span);
+ }
+
+ public void perform(Control[] controls, int spanColumn) {
+ int numColumns= numColumns();
+ Assert.isTrue(controls.length <= numColumns);
+ order(controls);
+ int gridIndex= 0;
+ for (int i= 0; i < controls.length; i++) {
+ Control control= controls[i];
+ GridData gd= (GridData)control.getLayoutData();
+ if (gd == null)
+ gd= getGridData(gridIndex);
+
+ if (i == spanColumn) {
+ int span= numColumns - (controls.length - 1);
+ gridIndex+= span;
+ if (gd == null)
+ gd= new GridData();
+ applyDelta(gd);
+ gd.horizontalSpan= span;
+ } else {
+ gridIndex++;
+ }
+ control.setLayoutData(gd);
+ }
+ }
+
+ private void applyDelta(GridData gd) {
+ if (spanHorizontalAlignment != -1)
+ gd.horizontalAlignment= spanHorizontalAlignment;
+
+ if (spanGrabExcessHorizontalSpace != -1) {
+ if (spanGrabExcessHorizontalSpace == 0)
+ gd.grabExcessHorizontalSpace= false;
+ else
+ gd.grabExcessHorizontalSpace= true;
+ }
+
+
+ if (spanHorizontalSpan != -1)
+ gd.horizontalSpan= spanHorizontalSpan;
+
+ if (spanHorizontalIndent != -1)
+ gd.horizontalIndent= spanHorizontalIndent;
+
+ if (spanWidthHint != -1)
+ gd.widthHint= spanWidthHint;
+
+ if (spanVerticalAlignment != -1)
+ gd.verticalAlignment= spanVerticalAlignment;
+
+ if (spanGrabExcessVerticalSpace != -1) {
+ if (spanGrabExcessVerticalSpace == 0)
+ gd.grabExcessVerticalSpace= false;
+ else
+ gd.grabExcessVerticalSpace= true;
+ }
+
+ if (spanVerticalSpan != -1)
+ gd.verticalSpan= spanVerticalSpan;
+
+ if (spanHeightHint != -1)
+ gd.heightHint= spanHeightHint;
+ }
+ public void setDefaultGridData(GridData gd, int index) {
+ if (index >= fDefaultGridDatas.length) {
+ GridData[] newDatas= new GridData[index + 4];
+ System.arraycopy(fDefaultGridDatas, 0, newDatas, 0, fDefaultGridDatas.length);
+ fDefaultGridDatas= newDatas;
+ }
+ fDefaultGridDatas[index]= gd;
+ }
+
+ public GridData getGridData(int index) {
+ if (index > fDefaultGridDatas.length)
+ return null;
+
+ return cloneGridData(fDefaultGridDatas[index]);
+ }
+
+ public int numColumns() {
+ return fNumColumns;
+ }
+
+ protected void order(Control[] controls) {
+ if (!fOrder)
+ return;
+
+ for (int i= 0; i < controls.length; i++) {
+ Control control= controls[i];
+ control.moveBelow(fLastControl);
+ fLastControl= control;
+ }
+ }
+
+ protected GridData cloneGridData(GridData gd) {
+ if (gd == null)
+ return null;
+
+ GridData result= new GridData();
+ result.horizontalAlignment= gd.horizontalAlignment;
+ result.grabExcessHorizontalSpace= gd.grabExcessHorizontalSpace;
+ result.horizontalSpan= gd.horizontalSpan;
+ result.horizontalIndent= gd.horizontalIndent;
+ result.widthHint= gd.widthHint;
+
+ result.verticalAlignment= gd.verticalAlignment;
+ result.grabExcessVerticalSpace= gd.grabExcessVerticalSpace;
+ result.verticalSpan= gd.verticalSpan;
+ result.heightHint= gd.heightHint;
+ return result;
+ }
+
+ public void generated_8202845485680551635(Composite result, ExtractConstantInputPage extractconstantinputpage, Label label, Text text) {
+ perform(label, text, 1);
+
+ extractconstantinputpage.addAccessModifierGroup(result, this);
+ extractconstantinputpage.addReplaceAllCheckbox(result, this);
+ extractconstantinputpage.addQualifyReferencesCheckbox(result, this);
+ extractconstantinputpage.addSeparator(result, this);
+ extractconstantinputpage.addLabel(result, this);
+ }
+
+ public void generated_5978075167440212650(Composite result, ExtractTempInputPage extracttempinputpage, Label label, Text text) {
+ text.selectAll();
+ text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ ControlContentAssistHelper.createTextContentAssistant(text, new VariableNamesProcessor(extracttempinputpage.fTempNameProposals));
+
+ perform(label, text, 1);
+
+ extracttempinputpage.addReplaceAllCheckbox(result, this);
+ extracttempinputpage.addDeclareFinalCheckbox(result, this);
+ }
+
+ public void generated_3766949527355685968(Composite composite, RenamePackageInputWizardPage renamepackageinputwizardpage) {
+ perform(renamepackageinputwizardpage.fRenameSubpackages);
+
+ Label separator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
+ separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ perform(separator);
+ }
+
+ public void generated_2695516571520329765(Composite composite, RenameInputWizardPage renameinputwizardpage, int indent) {
+ renameinputwizardpage.addOptionalUpdateTextualMatches(composite, this);
+ renameinputwizardpage.addOptionalUpdateQualifiedNameComponent(composite, this, indent);
+ renameinputwizardpage.addOptionalLeaveDelegateCheckbox(composite, this);
+ renameinputwizardpage.addOptionalDeprecateDelegateCheckbox(composite, this, indent);
+ }
+}