diff options
author | Michael Valenta | 2006-08-23 20:53:36 +0000 |
---|---|---|
committer | Michael Valenta | 2006-08-23 20:53:36 +0000 |
commit | 9b2c3e249bef32cb90b656427ca968856aca5b0a (patch) | |
tree | 9593c34a5f8d21fe40c0b3af792a959781fa6a66 | |
parent | 454abba0942a945de9ac223069d06b68802b265d (diff) | |
download | eclipse.platform.team-9b2c3e249bef32cb90b656427ca968856aca5b0a.tar.gz eclipse.platform.team-9b2c3e249bef32cb90b656427ca968856aca5b0a.tar.xz eclipse.platform.team-9b2c3e249bef32cb90b656427ca968856aca5b0a.zip |
Got dirty state updating working
2 files changed, 128 insertions, 34 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index 5cfd71b56..73fba1672 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -116,6 +116,7 @@ import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.progress.IProgressService; import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.ui.texteditor.IElementStateListener; import com.ibm.icu.text.MessageFormat; @@ -334,6 +335,34 @@ public class TextMergeViewer extends ContentMergeViewer { private Diff fButtonDiff; private Map fDocumentAccessors = new HashMap(); + + private IElementStateListener fDocumentProviderListener = new IElementStateListener() { + public void elementMoved(Object originalElement, Object movedElement) { + // TODO Not sure what to do + } + public void elementDirtyStateChanged(Object element, boolean isDirty) { + Object input = getInput(); + Object left = ((IMergeViewerContentProvider)getContentProvider()).getLeftContent(input); + IEditorInput leftInput = getDocumentKey(left); + if (leftInput != null && leftInput.equals(element)) { + updateDirtyState(leftInput, getDocumentProvider(left), 'L'); + } + Object right = ((IMergeViewerContentProvider)getContentProvider()).getRightContent(input); + IEditorInput rightInput = getDocumentKey(right); + if (rightInput != null && rightInput.equals(element)) { + updateDirtyState(rightInput, getDocumentProvider(right), 'R'); + } + } + public void elementDeleted(Object element) { + // TODO Not sure what to do + } + public void elementContentReplaced(Object element) { + // TODO Not sure what to do + } + public void elementContentAboutToBeReplaced(Object element) { + // TODO Not sure what to do + } + }; class HeaderPainter implements PaintListener { @@ -694,7 +723,7 @@ public class TextMergeViewer extends ContentMergeViewer { public TextMergeViewer(Composite parent, CompareConfiguration configuration) { this(parent, SWT.NULL, configuration); } - + /** * Creates a text merge viewer under the given parent control. * @@ -1129,6 +1158,7 @@ public class TextMergeViewer extends ContentMergeViewer { Object key = iterator.next(); IDocumentProvider provider = (IDocumentProvider)fDocumentAccessors.get(key); provider.disconnect(key); + provider.removeElementStateListener(fDocumentProviderListener); } fDocumentAccessors.clear(); } @@ -2013,12 +2043,8 @@ public class TextMergeViewer extends ContentMergeViewer { documentProvider.connect(key); fDocumentAccessors.put(key, documentProvider); newDoc = documentProvider.getDocument(key); - if (documentProvider.canSaveDocument(key)) { - if (type == 'L') - setLeftDirty(true); - else if (type == 'R') - setRightDirty(true); - } + updateDirtyState(key, documentProvider, type); + documentProvider.addElementStateListener(fDocumentProviderListener); } catch (CoreException e) { // Connection failed. Log the error and continue without a shared document CompareUIPlugin.log(e); @@ -2141,6 +2167,14 @@ public class TextMergeViewer extends ContentMergeViewer { return enabled; } + private void updateDirtyState(IEditorInput key, + IDocumentProvider documentProvider, char type) { + if (type == 'L') + setLeftDirty(documentProvider.canSaveDocument(key)); + else if (type == 'R') + setRightDirty(documentProvider.canSaveDocument(key)); + } + private Position getNewRange(char type, Object input) { switch (type) { case 'A': @@ -4452,16 +4486,12 @@ public class TextMergeViewer extends ContentMergeViewer { } private boolean hasSharedDocument(Object object) { - IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); - if (content instanceof ITextMergeViewerContentProvider) { - ITextMergeViewerContentProvider contentProvider = (ITextMergeViewerContentProvider) content; - IEditorInput key = contentProvider.getDocumentKey(object); - if (key != null) { - IDocumentProvider provider = (IDocumentProvider)fDocumentAccessors.get(key); - if (provider != null) { - IDocument doc = provider.getDocument(key); - return doc == DocumentManager.get(object); - } + IEditorInput key = getDocumentKey(object); + if (key != null) { + IDocumentProvider provider = getDocumentProvider(key); + if (provider != null) { + IDocument doc = provider.getDocument(key); + return doc == DocumentManager.get(object); } } return false; @@ -4499,4 +4529,21 @@ public class TextMergeViewer extends ContentMergeViewer { } } + /* package*/ IDocumentProvider getDocumentProvider(Object element) { + return getDocumentProvider(getDocumentKey(element)); + } + + private IDocumentProvider getDocumentProvider(IEditorInput input) { + return (IDocumentProvider)fDocumentAccessors.get(input); + } + + /* package*/ IEditorInput getDocumentKey(Object element) { + IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); + if (content instanceof ITextMergeViewerContentProvider) { + ITextMergeViewerContentProvider contentProvider = (ITextMergeViewerContentProvider) content; + return contentProvider.getDocumentKey(element); + } + return null; + } + } diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index 5cfd71b56..73fba1672 100644 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -116,6 +116,7 @@ import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.progress.IProgressService; import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.ui.texteditor.IElementStateListener; import com.ibm.icu.text.MessageFormat; @@ -334,6 +335,34 @@ public class TextMergeViewer extends ContentMergeViewer { private Diff fButtonDiff; private Map fDocumentAccessors = new HashMap(); + + private IElementStateListener fDocumentProviderListener = new IElementStateListener() { + public void elementMoved(Object originalElement, Object movedElement) { + // TODO Not sure what to do + } + public void elementDirtyStateChanged(Object element, boolean isDirty) { + Object input = getInput(); + Object left = ((IMergeViewerContentProvider)getContentProvider()).getLeftContent(input); + IEditorInput leftInput = getDocumentKey(left); + if (leftInput != null && leftInput.equals(element)) { + updateDirtyState(leftInput, getDocumentProvider(left), 'L'); + } + Object right = ((IMergeViewerContentProvider)getContentProvider()).getRightContent(input); + IEditorInput rightInput = getDocumentKey(right); + if (rightInput != null && rightInput.equals(element)) { + updateDirtyState(rightInput, getDocumentProvider(right), 'R'); + } + } + public void elementDeleted(Object element) { + // TODO Not sure what to do + } + public void elementContentReplaced(Object element) { + // TODO Not sure what to do + } + public void elementContentAboutToBeReplaced(Object element) { + // TODO Not sure what to do + } + }; class HeaderPainter implements PaintListener { @@ -694,7 +723,7 @@ public class TextMergeViewer extends ContentMergeViewer { public TextMergeViewer(Composite parent, CompareConfiguration configuration) { this(parent, SWT.NULL, configuration); } - + /** * Creates a text merge viewer under the given parent control. * @@ -1129,6 +1158,7 @@ public class TextMergeViewer extends ContentMergeViewer { Object key = iterator.next(); IDocumentProvider provider = (IDocumentProvider)fDocumentAccessors.get(key); provider.disconnect(key); + provider.removeElementStateListener(fDocumentProviderListener); } fDocumentAccessors.clear(); } @@ -2013,12 +2043,8 @@ public class TextMergeViewer extends ContentMergeViewer { documentProvider.connect(key); fDocumentAccessors.put(key, documentProvider); newDoc = documentProvider.getDocument(key); - if (documentProvider.canSaveDocument(key)) { - if (type == 'L') - setLeftDirty(true); - else if (type == 'R') - setRightDirty(true); - } + updateDirtyState(key, documentProvider, type); + documentProvider.addElementStateListener(fDocumentProviderListener); } catch (CoreException e) { // Connection failed. Log the error and continue without a shared document CompareUIPlugin.log(e); @@ -2141,6 +2167,14 @@ public class TextMergeViewer extends ContentMergeViewer { return enabled; } + private void updateDirtyState(IEditorInput key, + IDocumentProvider documentProvider, char type) { + if (type == 'L') + setLeftDirty(documentProvider.canSaveDocument(key)); + else if (type == 'R') + setRightDirty(documentProvider.canSaveDocument(key)); + } + private Position getNewRange(char type, Object input) { switch (type) { case 'A': @@ -4452,16 +4486,12 @@ public class TextMergeViewer extends ContentMergeViewer { } private boolean hasSharedDocument(Object object) { - IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); - if (content instanceof ITextMergeViewerContentProvider) { - ITextMergeViewerContentProvider contentProvider = (ITextMergeViewerContentProvider) content; - IEditorInput key = contentProvider.getDocumentKey(object); - if (key != null) { - IDocumentProvider provider = (IDocumentProvider)fDocumentAccessors.get(key); - if (provider != null) { - IDocument doc = provider.getDocument(key); - return doc == DocumentManager.get(object); - } + IEditorInput key = getDocumentKey(object); + if (key != null) { + IDocumentProvider provider = getDocumentProvider(key); + if (provider != null) { + IDocument doc = provider.getDocument(key); + return doc == DocumentManager.get(object); } } return false; @@ -4499,4 +4529,21 @@ public class TextMergeViewer extends ContentMergeViewer { } } + /* package*/ IDocumentProvider getDocumentProvider(Object element) { + return getDocumentProvider(getDocumentKey(element)); + } + + private IDocumentProvider getDocumentProvider(IEditorInput input) { + return (IDocumentProvider)fDocumentAccessors.get(input); + } + + /* package*/ IEditorInput getDocumentKey(Object element) { + IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider(); + if (content instanceof ITextMergeViewerContentProvider) { + ITextMergeViewerContentProvider contentProvider = (ITextMergeViewerContentProvider) content; + return contentProvider.getDocumentKey(element); + } + return null; + } + } |