Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/FuzzFactorDialog.java')
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/FuzzFactorDialog.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/FuzzFactorDialog.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/FuzzFactorDialog.java
new file mode 100644
index 000000000..47b66bfe8
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/FuzzFactorDialog.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.team.internal.ui.mapping;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.compare.internal.patch.WorkspacePatcher;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.team.internal.ui.TeamUIMessages;
+import org.eclipse.ui.PlatformUI;
+
+public class FuzzFactorDialog extends Dialog {
+
+ private Text valueText;
+ private Text errorMessageText;
+
+ private WorkspacePatcher patcher;
+ private int fuzzFactor;
+
+ public FuzzFactorDialog(Shell parentShell, WorkspacePatcher patcher) {
+ super(parentShell);
+ this.patcher = patcher;
+ }
+
+ public int getFuzzFactor() {
+ return fuzzFactor;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ applyDialogFont(composite);
+
+ Label label = new Label(composite, SWT.WRAP);
+ label.setText(TeamUIMessages.FuzzFactorDialog_message);
+ GridData data = new GridData();
+ data.horizontalSpan = 2;
+ label.setLayoutData(data);
+ label.setFont(parent.getFont());
+
+ valueText = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ data = new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL);
+ data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
+ valueText.setLayoutData(data);
+ valueText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validateInput();
+ }
+ });
+ fuzzFactor = patcher.getFuzz();
+ if (fuzzFactor >= 0)
+ valueText.setText(new Integer(fuzzFactor).toString());
+
+ Button guessButton = new Button(composite, SWT.NONE);
+ guessButton.setText(TeamUIMessages.FuzzFactorDialog_guess);
+ data = new GridData();
+ guessButton.setLayoutData(data);
+ guessButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ patcher.setFuzz(-1);
+ int fuzz = guessFuzzFactor();
+ if (fuzz >= 0) {
+ String value = new Integer(fuzz).toString();
+ valueText.setText(value);
+ }
+ }
+ });
+
+ errorMessageText = new Text(composite, SWT.READ_ONLY | SWT.WRAP);
+ errorMessageText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL));
+ errorMessageText.setBackground(errorMessageText.getDisplay()
+ .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+ validateInput();
+
+ applyDialogFont(composite);
+ return composite;
+ }
+
+ private void validateInput() {
+ String message = null;
+ String value = valueText.getText();
+ try {
+ fuzzFactor = Integer.parseInt(value);
+ if (fuzzFactor < 0)
+ message = TeamUIMessages.FuzzFactorDialog_numberOutOfRange;
+ } catch (NumberFormatException x) {
+ message = TeamUIMessages.FuzzFactorDialog_notANumber;
+ }
+ setErrorMessage(message);
+ }
+
+ private void setErrorMessage(String errorMessage) {
+ if (errorMessageText != null && !errorMessageText.isDisposed()) {
+ errorMessageText.setText(errorMessage == null ? " \n " //$NON-NLS-1$
+ : errorMessage);
+ boolean hasError = errorMessage != null
+ && (StringConverter.removeWhiteSpaces(errorMessage))
+ .length() > 0;
+ errorMessageText.setEnabled(hasError);
+ errorMessageText.setVisible(hasError);
+ errorMessageText.getParent().update();
+ Control button = getButton(IDialogConstants.OK_ID);
+ if (button != null) {
+ button.setEnabled(errorMessage == null);
+ }
+ }
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(TeamUIMessages.FuzzFactorDialog_title);
+ }
+
+ private int guessFuzzFactor() {
+ final int[] result = new int[] { -1 };
+ try {
+ PlatformUI.getWorkbench().getProgressService().run(true, true,
+ new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ result[0] = patcher.guessFuzzFactor(monitor);
+ }
+ });
+ } catch (InvocationTargetException ex) {
+ // NeedWork
+ } catch (InterruptedException ex) {
+ // NeedWork
+ }
+ return result[0];
+ }
+
+}

Back to the top