Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Rennie2009-03-04 22:37:14 +0000
committerMichael Rennie2009-03-04 22:37:14 +0000
commitbffdb71831602b8f78a08aa7b715a733a369903a (patch)
treece60af6c347a07f764348ebba5a7bba795a7a9d0 /org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java
parent4b3ca41cb9969c2ef485c715840df451bc280709 (diff)
downloadeclipse.platform.debug-bffdb71831602b8f78a08aa7b715a733a369903a.tar.gz
eclipse.platform.debug-bffdb71831602b8f78a08aa7b715a733a369903a.tar.xz
eclipse.platform.debug-bffdb71831602b8f78a08aa7b715a733a369903a.zip
Bug 266162 Duplicates in prompt to save dirty resources before launching
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java177
1 files changed, 168 insertions, 9 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java
index b97c451bf..5e692cc09 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/SaveScopeResourcesHandler.java
@@ -19,16 +19,34 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.IStatusHandler;
+import org.eclipse.debug.internal.ui.AbstractDebugCheckboxSelectionDialog;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.model.AdaptableList;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* Status handler to prompt for saving of resources prior to launching.
@@ -43,11 +61,113 @@ import org.eclipse.ui.ide.IDE;
* @since 3.2
*/
public class SaveScopeResourcesHandler implements IStatusHandler {
+
+ /**
+ * Opens a resizable dialog listing possible files to save, the user can select none, some or all of the files before pressing OK.
+ * @since 3.2
+ */
+ class ScopedResourcesSelectionDialog extends AbstractDebugCheckboxSelectionDialog {
+
+ private final String SETTINGS_ID = IDebugUIConstants.PLUGIN_ID + ".SCOPED_SAVE_SELECTION_DIALOG"; //$NON-NLS-1$
+ Button fSavePref;
+ Object fInput;
+ IStructuredContentProvider fContentProvider;
+ ILabelProvider fLabelProvider;
+
+ public ScopedResourcesSelectionDialog(Shell parentShell, Object input, IStructuredContentProvider contentProvider, ILabelProvider labelProvider) {
+ super(parentShell);
+ fInput = input;
+ fContentProvider = contentProvider;
+ fLabelProvider = labelProvider;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setShowSelectAllButtons(true);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getContentProvider()
+ */
+ protected IContentProvider getContentProvider() {
+ return fContentProvider;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getLabelProvider()
+ */
+ protected IBaseLabelProvider getLabelProvider() {
+ return fLabelProvider;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getDialogSettingsId()
+ */
+ protected String getDialogSettingsId() {
+ return SETTINGS_ID;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getHelpContextId()
+ */
+ protected String getHelpContextId() {
+ return IDebugHelpContextIds.SELECT_RESOURCES_TO_SAVE_DIALOG;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getViewerInput()
+ */
+ protected Object getViewerInput() {
+ return fInput;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getViewerLabel()
+ */
+ protected String getViewerLabel() {
+ return LaunchConfigurationsMessages.SaveScopeResourcesHandler_2;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugCheckboxSelectionDialog#addCustomFooterControls(org.eclipse.swt.widgets.Composite)
+ */
+ protected void addCustomFooterControls(Composite parent) {
+ super.addCustomFooterControls(parent);
+ fSavePref = new Button(parent, SWT.CHECK);
+ fSavePref.setText(LaunchConfigurationsMessages.SaveScopeResourcesHandler_1);
+ fSavePref.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ getCheckBoxTableViewer().setAllChecked(fSavePref.getSelection());
+ }
+ });
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugCheckboxSelectionDialog#okPressed()
+ */
+ protected void okPressed() {
+ IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore();
+ String val = (fSavePref.getSelection() ? MessageDialogWithToggle.ALWAYS : MessageDialogWithToggle.PROMPT);
+ store.setValue(IInternalDebugUIConstants.PREF_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH, val);
+ super.okPressed();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugCheckboxSelectionDialog#addViewerListeners(org.eclipse.jface.viewers.StructuredViewer)
+ */
+ protected void addViewerListeners(StructuredViewer viewer) {
+ // Override to remove listener that affects the ok button
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.AbstractDebugCheckboxSelectionDialog#isValid()
+ */
+ protected boolean isValid() {
+ return true;
+ }
+ }
/**
* The objects to save (if any)
*/
- Object[] fSaves = null;
+ IResource[] fSaves = null;
/* (non-Javadoc)
*
@@ -74,13 +194,9 @@ public class SaveScopeResourcesHandler implements IStatusHandler {
if (projects != null) {
IPreferenceStore store = DebugUIPlugin.getDefault().getPreferenceStore();
String save = store.getString(IInternalDebugUIConstants.PREF_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH);
- boolean prompt = save.equals(MessageDialogWithToggle.PROMPT);
- if(prompt || save.equals(MessageDialogWithToggle.ALWAYS)) {
- if(IDE.saveAllEditors(getScopedDirtyResources(projects), prompt)) {
- return Boolean.TRUE;
- }
- }
- else {
+ int ret = showSaveDialog(projects, !save.equals(MessageDialogWithToggle.NEVER), save.equals(MessageDialogWithToggle.PROMPT));
+ if(ret == IDialogConstants.OK_ID) {
+ doSave();
return Boolean.TRUE;
}
return Boolean.FALSE;
@@ -109,7 +225,7 @@ public class SaveScopeResourcesHandler implements IStatusHandler {
IResource resource = (IResource)eparts[j].getEditorInput().getAdapter(IResource.class);
if(resource != null) {
for(int k = 0; k < projects.length; k++) {
- if(projects[k].equals(resource.getProject()) && !dirtyres.contains(resource)) {
+ if(projects[k].equals(resource.getProject())) {
dirtyres.add(resource);
}
}
@@ -119,4 +235,47 @@ public class SaveScopeResourcesHandler implements IStatusHandler {
}
return (IResource[])dirtyres.toArray(new IResource[dirtyres.size()]);
}
+
+ /**
+ * Performs the save of the editor parts returned by getScopedResources
+ */
+ protected void doSave() {
+ if(fSaves != null) {
+ IDE.saveAllEditors(fSaves, false);
+ }
+ }
+
+ /**
+ * show the save dialog with a list of editors to save (if any)
+ * The dialog is also not shown if the the preference for automatically saving dirty before launch is set to always
+ * @param projects the projects to consider for the save
+ * @param save if we should save
+ * @param prompt if we should prompt to save or do it automatically
+ * @return the dialog status, to be propagated back to the <code>handleStatus</code> method
+ */
+ protected int showSaveDialog(IProject[] projects, boolean save, boolean prompt) {
+ if(save) {
+ IResource[] resources = getScopedDirtyResources(projects);
+ if(prompt && (resources.length > 0)) {
+ ScopedResourcesSelectionDialog lsd = new ScopedResourcesSelectionDialog(DebugUIPlugin.getShell(),
+ new AdaptableList(resources),
+ new WorkbenchContentProvider(),
+ new WorkbenchLabelProvider());
+ lsd.setInitialSelections(resources);
+ lsd.setTitle(LaunchConfigurationsMessages.SaveScopeResourcesHandler_3);
+ if(lsd.open() == IDialogConstants.CANCEL_ID) {
+ return IDialogConstants.CANCEL_ID;
+ }
+ Object[] objs = lsd.getResult();
+ fSaves = new IResource[objs.length];
+ for (int i = 0; i < objs.length; i++) {
+ fSaves[i] = (IResource) objs[i];
+ }
+ }
+ else {
+ fSaves = resources;
+ }
+ }
+ return IDialogConstants.OK_ID;
+ }
}

Back to the top