### Eclipse Workspace Patch 1.0
#P org.eclipse.compare
Index: compare/org/eclipse/compare/internal/CompareEditor.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java,v
retrieving revision 1.29
diff -u -r1.29 CompareEditor.java
--- compare/org/eclipse/compare/internal/CompareEditor.java 14 Nov 2005 20:30:16 -0000 1.29
+++ compare/org/eclipse/compare/internal/CompareEditor.java 2 Feb 2006 18:49:01 -0000
@@ -17,6 +17,7 @@
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.*;
import org.eclipse.jface.util.Assert;
@@ -35,7 +36,7 @@
* A CompareEditor takes a ICompareEditorInput as input.
* Most functionality is delegated to the ICompareEditorInput.
*/
-public class CompareEditor extends EditorPart implements IReusableEditor {
+public class CompareEditor extends EditorPart implements IReusableEditor, ISaveableModelSource, ISaveableModel {
/**
* Internal property change listener for handling changes in the editor's input.
@@ -257,6 +258,15 @@
*/
public boolean isDirty() {
IEditorInput input= getEditorInput();
+ if (input instanceof ISaveableModelSource) {
+ ISaveableModelSource sms = (ISaveableModelSource) input;
+ ISaveableModel[] models = sms.getModels();
+ for (int i = 0; i < models.length; i++) {
+ ISaveableModel model = models[i];
+ if (model.isDirty())
+ return true;
+ }
+ }
if (input instanceof CompareEditorInput)
return ((CompareEditorInput)input).isSaveNeeded();
return false;
@@ -268,5 +278,50 @@
if (old_value == null || new_value == null || !old_value.equals(new_value))
firePropertyChange(PROP_DIRTY);
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.ISaveableModelSource#getModels()
+ */
+ public ISaveableModel[] getModels() {
+ IEditorInput input= getEditorInput();
+ if (input instanceof ISaveableModelSource) {
+ ISaveableModelSource source = (ISaveableModelSource) input;
+ return source.getModels();
+ }
+ return new ISaveableModel[] { this };
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.ISaveableModelSource#getActiveModels()
+ */
+ public ISaveableModel[] getActiveModels() {
+ IEditorInput input= getEditorInput();
+ if (input instanceof ISaveableModelSource) {
+ ISaveableModelSource source = (ISaveableModelSource) input;
+ return source.getActiveModels();
+ }
+ return new ISaveableModel[] { this };
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.ISaveableModel#getName()
+ */
+ public String getName() {
+ return getPartName();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.ISaveableModel#getToolTipText()
+ */
+ public String getToolTipText() {
+ return getTitleToolTip();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.ISaveableModel#getImageDescriptor()
+ */
+ public ImageDescriptor getImageDescriptor() {
+ return ImageDescriptor.createFromImage(getTitleImage());
+ }
}
Index: compare/org/eclipse/compare/CompareEditorInput.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java,v
retrieving revision 1.56
diff -u -r1.56 CompareEditorInput.java
--- compare/org/eclipse/compare/CompareEditorInput.java 11 Jan 2006 10:47:53 -0000 1.56
+++ compare/org/eclipse/compare/CompareEditorInput.java 2 Feb 2006 18:49:01 -0000
@@ -23,8 +23,7 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.*;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.*;
import org.eclipse.jface.util.*;
import org.eclipse.jface.util.Assert;
@@ -88,6 +87,12 @@
* by passing a subclass of CompareConfiguration
and by implementing the prepareInput
method.
* If a subclass cannot use the DiffTreeViewer
which is installed by default in the
* top left pane, method createDiffViewer
can be overridden.
+ *
+ * If subclasses of this class implement {@link ISaveableModelSource}, the compare editor will + * pass these models through to the workbench. The editor will still show the dirty indicator + * if one of these underlying models is dirty. It is the reponsibility of subclasses that + * implement this interface to call {@link #setDirty(boolean)} when the dirty state of + * any of the models managed by the sublcass change dirty state. * * @see CompareUI * @see CompareEditorInput