Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java')
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java166
1 files changed, 166 insertions, 0 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
new file mode 100644
index 000000000..28dff2473
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
@@ -0,0 +1,166 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal.patch;
+
+import java.lang.reflect.InvocationTargetException;
+import java.text.MessageFormat;
+import java.util.Arrays;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Button;
+
+import org.eclipse.jface.dialogs.*;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.util.Assert;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.*;
+import org.eclipse.jface.action.IAction;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.internal.*;
+import org.eclipse.ui.IActionDelegate;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+
+import org.eclipse.compare.internal.*;
+
+public class CompareWithPatchAction implements IActionDelegate {
+
+ static class PatchWizardDialog extends WizardDialog {
+
+ PatchWizardDialog(Shell parent, IWizard wizard) {
+ super(parent, wizard);
+
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setMinimumPageSize(700, 500);
+ }
+ }
+
+ private ISelection fSelection;
+ private boolean fSavedFiles;
+ private boolean fAutobuildState;
+
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ fSelection= selection;
+ action.setEnabled(fSelection != null && !fSelection.isEmpty());
+ }
+
+ public void run(IAction action) {
+ PatchWizard wizard= new PatchWizard(fSelection);
+
+ if (areAllEditorsSaved()) {
+ //RefactoringStatus activationStatus= refactoring.checkActivation(new NullProgressMonitor());
+ //if (! activationStatus.hasFatalError()){
+ // wizard.setActivationStatus(activationStatus);
+ PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard);
+ if (dialog.open() == Dialog.CANCEL)
+ triggerBuild();
+
+ //} else{
+ //RefactoringErrorDialog.open(dialogTitle, activationStatus);
+ //}
+ }
+ }
+
+ private boolean areAllEditorsSaved(){
+ if (CompareUIPlugin.getDirtyEditors().length == 0)
+ return true;
+ if (! saveAllDirtyEditors())
+ return false;
+ Shell shell= CompareUIPlugin.getShell();
+ try {
+ // Save isn't cancelable.
+ IWorkspace workspace= ResourcesPlugin.getWorkspace();
+ IWorkspaceDescription description= workspace.getDescription();
+ boolean autoBuild= description.isAutoBuilding();
+ description.setAutoBuilding(false);
+ workspace.setDescription(description);
+ try {
+ new ProgressMonitorDialog(shell).run(false, false, createRunnable());
+ fSavedFiles= true;
+ } finally {
+ description.setAutoBuilding(autoBuild);
+ workspace.setDescription(description);
+ }
+ return true;
+ } catch (InvocationTargetException e) {
+ ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$
+ return false;
+ } catch (CoreException e) {
+ ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$
+ return false;
+ } catch (InterruptedException e) {
+ Assert.isTrue(false); // Can't happen. Operation isn't cancelable.
+ return false;
+ }
+ }
+
+ private IRunnableWithProgress createRunnable() {
+ return new IRunnableWithProgress() {
+ public void run(IProgressMonitor pm) {
+ IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors();
+ pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$
+ for (int i= 0; i < editorsToSave.length; i++) {
+ editorsToSave[i].doSave(new SubProgressMonitor(pm, 1));
+ pm.worked(1);
+ }
+ pm.done();
+ }
+ };
+ }
+
+ private boolean saveAllDirtyEditors() {
+ if (ComparePreferencePage.getSaveAllEditors()) //must save everything
+ return true;
+ ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) {
+ protected Control createDialogArea(Composite parent) {
+ Composite result= (Composite) super.createDialogArea(parent);
+ final Button check= new Button(result, SWT.CHECK);
+ check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$
+ check.setSelection(ComparePreferencePage.getSaveAllEditors());
+ check.addSelectionListener(
+ new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ ComparePreferencePage.setSaveAllEditors(check.getSelection());
+ }
+ }
+ );
+ return result;
+ }
+ };
+ dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$
+ dialog.setAddCancelButton(true);
+ dialog.setLabelProvider(createDialogLabelProvider());
+ dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$
+ dialog.setContentProvider(new ListContentProvider());
+ dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors()));
+ return dialog.open() == Dialog.OK;
+ }
+
+ private ILabelProvider createDialogLabelProvider() {
+ return new LabelProvider() {
+ public Image getImage(Object element) {
+ return ((IEditorPart) element).getTitleImage();
+ }
+ public String getText(Object element) {
+ return ((IEditorPart) element).getTitle();
+ }
+ };
+ }
+
+ private void triggerBuild() {
+ if (fSavedFiles && ResourcesPlugin.getWorkspace().getDescription().isAutoBuilding()) {
+ new GlobalBuildAction(CompareUIPlugin.getActiveWorkbench(), IncrementalProjectBuilder.INCREMENTAL_BUILD).run();
+ }
+ }
+}

Back to the top