Bug 539884 - [formatter][preferences] Improve preview controls layout
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
index b55267b..bec1385 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
@@ -471,10 +471,17 @@
 	@Override
 	protected Composite createPreviewPane(Composite parent) {
 		Composite previewPane= super.createPreviewPane(parent);
-		((GridLayout) previewPane.getLayout()).makeColumnsEqualWidth= true;
 
-		fPreviewRawButton= new Button(previewPane, SWT.TOGGLE | SWT.WRAP);
-		fPreviewRawButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		Composite controlPane= new Composite(previewPane, SWT.NONE);
+		controlPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		createGridLayout(controlPane, 2, false);
+		Composite buttonsPane= new Composite(controlPane, SWT.NONE);
+		buttonsPane.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false));
+		createGridLayout(buttonsPane, 3, false);
+		((GridLayout) buttonsPane.getLayout()).makeColumnsEqualWidth= true;
+
+		fPreviewRawButton= new Button(buttonsPane, SWT.TOGGLE | SWT.WRAP);
+		fPreviewRawButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
 		fPreviewRawButton.setText(FormatterMessages.FormatterModifyDialog_preview_show_raw_source_toggle);
 		fPreviewRawButton.setFont(previewPane.getFont());
 		fPreviewRawButton.addSelectionListener(new SelectionAdapter() {
@@ -484,8 +491,8 @@
 			}
 		});
 
-		Button customPreviewButton= new Button(previewPane, SWT.TOGGLE | SWT.WRAP);
-		customPreviewButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		Button customPreviewButton= new Button(buttonsPane, SWT.TOGGLE | SWT.WRAP);
+		customPreviewButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
 		customPreviewButton.setText(FormatterMessages.FormatterModifyDialog_preview_custom_contents_toggle);
 		customPreviewButton.setFont(previewPane.getFont());
 		customPreviewButton.setSelection(fDialogSettings.getBoolean(CUSTOM_PREVIEW_TOGGLE_PREFERENCE_KEY));
@@ -501,8 +508,8 @@
 				fDialogSettings.put(CUSTOM_PREVIEW_CONTENT_PREFERENCE_KEY, ((StyledText) e.getSource()).getText());
 		});
 
-		final Button showInvisibleButton= new Button(previewPane, SWT.TOGGLE | SWT.WRAP);
-		showInvisibleButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		final Button showInvisibleButton= new Button(buttonsPane, SWT.TOGGLE | SWT.WRAP);
+		showInvisibleButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
 		showInvisibleButton.setText(FormatterMessages.FormatterModifyDialog_preview_show_whitespace_toggle);
 		showInvisibleButton.setFont(previewPane.getFont());
 		showInvisibleButton.addSelectionListener(new SelectionAdapter() {
@@ -516,8 +523,9 @@
 		fPreview.showInvisibleCharacters(showInvisible);
 		showInvisibleButton.setSelection(showInvisible);
 
-		Composite lineWidthPane= new Composite(previewPane, SWT.NONE);
-		lineWidthPane.setLayoutData(new GridData(SWT.TRAIL, SWT.FILL, true, false, 1, 1));
+		Composite lineWidthPane= new Composite(controlPane, SWT.NONE);
+		GridData lineWidthPaneLayoutData= new GridData(SWT.END, SWT.CENTER, true, false);
+		lineWidthPane.setLayoutData(lineWidthPaneLayoutData);
 		RowLayout layout= new RowLayout();
 		layout.center= true;
 		layout.justify= true;
@@ -529,6 +537,8 @@
 		Spinner lineWidthSpinner= NumberPreference.createSpinner(lineWidthPane, 0, 9999);
 		lineWidthSpinner.setFont(previewPane.getFont());
 		lineWidthSpinner.setLayoutData(null);
+		lineWidthPaneLayoutData.minimumWidth= lineWidthSpinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+
 		int previewLineSplit;
 		try {
 			previewLineSplit= fDialogSettings.getInt(PREVIEW_LINE_WIDTH_PREFERENCE_KEY);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
index 348e4f5..fc3f289 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
@@ -1518,13 +1518,13 @@
 
 	protected Composite createPreviewPane(Composite parent) {
 		final Composite previewPane= new Composite(parent, SWT.NONE);
-		createGridLayout(previewPane, GRID_COLUMNS, true);
+		createGridLayout(previewPane, 1, true);
 		previewPane.setFont(parent.getFont());
 
-		createLabel(GRID_COLUMNS, previewPane, FormatterMessages.ModifyDialogTabPage_preview_label_text, 0);
+		createLabel(1, previewPane, FormatterMessages.ModifyDialogTabPage_preview_label_text, 0);
 
 		fPreview= new JavaPreview(fWorkingValues, previewPane);
-		fPreview.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, GRID_COLUMNS, 1));
+		fPreview.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
 		return previewPane;
 	}