]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / util / RowLayouter.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java
new file mode 100644 (file)
index 0000000..78e6367
--- /dev/null
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * 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);
+       }
+}