Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCamille Letavernier2014-03-26 12:42:07 +0000
committerCamille Letavernier2014-03-26 12:42:07 +0000
commit2b3f51cae70a5a5718295cbe5163fcae9fcc16fd (patch)
tree1dee38b608953342da104ddc82b104532dc90fb2
parent87470646b9035778549dfdf3b7b4b8ae679edcb3 (diff)
downloadorg.eclipse.papyrus-2b3f51cae70a5a5718295cbe5163fcae9fcc16fd.tar.gz
org.eclipse.papyrus-2b3f51cae70a5a5718295cbe5163fcae9fcc16fd.tar.xz
org.eclipse.papyrus-2b3f51cae70a5a5718295cbe5163fcae9fcc16fd.zip
430540: [Sash editor] Problem of refresh when close or open diagram
https://bugs.eclipse.org/bugs/show_bug.cgi?id=430540
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/editor/CoreMultiDiagramEditor.java115
1 files changed, 53 insertions, 62 deletions
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/editor/CoreMultiDiagramEditor.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/editor/CoreMultiDiagramEditor.java
index 55082ca12d6..e1d193baa2a 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/editor/CoreMultiDiagramEditor.java
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/editor/CoreMultiDiagramEditor.java
@@ -18,14 +18,12 @@ package org.eclipse.papyrus.infra.core.editor;
import static org.eclipse.papyrus.infra.core.Activator.log;
import java.util.ArrayList;
-import java.util.EventObject;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.common.command.CommandStackListener;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.ui.URIEditorInput;
import org.eclipse.emf.common.util.URI;
@@ -35,7 +33,6 @@ import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
-import org.eclipse.emf.transaction.TransactionalCommandStack;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.action.MenuManager;
@@ -96,15 +93,15 @@ import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
* implementation allows to register editors and context separately. An editor
* should specify which context it need to run. This multi diagram editor allows
* to show editor side by side in one or more sash windows.
- *
+ *
* The real implementation for the generic type T of SashMultiPageEditorPart is
* actually di2.Diagram
- *
+ *
* @author cedric dumoulin
* @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
* @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
* Refactoring.
- *
+ *
* TODO : remove GMF dependency !
*/
public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implements IMultiDiagramEditor, ITabbedPropertySheetPageContributor, IGotoMarker {
@@ -148,9 +145,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* This method is called when the editor input is changed from the
* ISaveAndDirtyService.
- *
+ *
* @see org.eclipse.papyrus.infra.core.lifecycleevents.IEditorInputChangedListener#editorInputChanged(org.eclipse.ui.part.FileEditorInput)
- *
+ *
* @param fileEditorInput
*/
@Override
@@ -162,9 +159,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* The isDirty flag has changed, reflect its new value
- *
+ *
* @see org.eclipse.papyrus.infra.core.lifecycleevents.IEditorInputChangedListener#isDirtyChanged()
- *
+ *
*/
@Override
public void isDirtyChanged() {
@@ -237,17 +234,8 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
*/
@Override
public void contentChanged(ContentEvent event) {
- needsRefresh = true;
- }
- }
-
- private class RefreshTabsCommandStackListener implements CommandStackListener {
-
- @Override
- public void commandStackChanged(EventObject event) {
- refreshTabs();
+ scheduleRefresh();
}
-
}
/**
@@ -255,8 +243,6 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
*/
private ContentChangedListener contentChangedListener = new ContentChangedListener();
- private RefreshTabsCommandStackListener refreshTabsCommandStackListener = new RefreshTabsCommandStackListener();
-
/**
* Undo context used to have the same undo context in all Papyrus related
* views and editors. TODO : move away, use a version independent of GMF,
@@ -267,7 +253,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Get the contentOutlineRegistry. Create it if needed.
- *
+ *
* @return the contentOutlineRegistry
*/
protected ContentOutlineRegistry getContentOutlineRegistry() {
@@ -287,7 +273,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Returns the service registry associated to the editor.
- *
+ *
* @return the servicesRegistry The registry.
*/
@Override
@@ -300,7 +286,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Create the ServicesRegistry.
- *
+ *
* @return
*/
private ServicesRegistry createServicesRegistry() {
@@ -319,7 +305,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Do nothing as we create the provider before any calls to this method.
* Should not be called by subclasses.
- *
+ *
* @see org.eclipse.papyrus.infra.core.sasheditor.editor.AbstractMultiPageSashEditor#createPageProvider()
*/
@Override
@@ -329,14 +315,14 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Create the pageContentProvider.
- *
+ *
* Removed since 0.10.0
- *
+ *
* @param pageFactory
* @param diResource
* Resource used to load/save the SashModel.
- *
- *
+ *
+ *
*/
// protected ISashWindowsContentProvider createPageProvider(IPageModelFactory pageFactory, Resource diResource, TransactionalEditingDomain editingDomain) {
//
@@ -351,7 +337,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
* Get The {@link IPageMngr} used to add, open, remove or close a diagram in
* the SashWindow. This method is available as soon as the {@link CoreMultiDiagramEditor#init(IEditorSite, IEditorInput)} method is
* called.
- *
+ *
* @return
*/
protected IPageManager getIPageManager() throws IllegalStateException {
@@ -364,7 +350,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Get the ActionBarContributorRegistry. Creates it if necessary.
- *
+ *
* @return
*/
protected ActionBarContributorRegistry getActionBarContributorRegistry() {
@@ -388,7 +374,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Create the ActionBarContributorRegistry.
- *
+ *
* @return
*/
private ActionBarContributorRegistry createActionBarContributorRegistry() {
@@ -396,10 +382,10 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
}
/**
- *
- *
+ *
+ *
* @param adapter
- *
+ *
* @return
*/
@SuppressWarnings("rawtypes")
@@ -660,7 +646,6 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
// Listen on contentProvider changes
sashModelMngr.getSashModelContentChangedProvider().addListener(contentChangedListener);
- ((TransactionalCommandStack)transactionalEditingDomain.getCommandStack()).addCommandStackListener(refreshTabsCommandStackListener);
IEditorInput input = getEditorInput();
@@ -740,9 +725,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides getPropertySheetPage.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor#getPropertySheetPage()
*/
public IPropertySheetPage getPropertySheetPage() {
@@ -753,14 +738,13 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* @see org.eclipse.papyrus.infra.core.sasheditor.editor.AbstractMultiPageSashEditor#dispose()
- *
+ *
*/
@Override
public void dispose() {
getLifecycleManager().fireBeforeClose(this);
if(sashModelMngr != null) {
sashModelMngr.getSashModelContentChangedProvider().removeListener(contentChangedListener);
- transactionalEditingDomain.getCommandStack().removeCommandStackListener(refreshTabsCommandStackListener);
}
// Avoid memory leak
@@ -789,10 +773,6 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
this.contentChangedListener = null;
}
- if(refreshTabsCommandStackListener != null) {
- refreshTabsCommandStackListener = null;
- }
-
if(editorInputChangedListener != null) {
this.editorInputChangedListener.dispose();
this.editorInputChangedListener = null;
@@ -820,9 +800,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides doSave.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
@@ -846,9 +826,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides doSaveAs.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
@Override
@@ -859,9 +839,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides isSaveAsAllowed.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
@Override
@@ -871,9 +851,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides getContributorId.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor#getContributorId()
*/
@Override
@@ -888,9 +868,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides getDiagram.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart#getDiagram()
*/
// public org.eclipse.gmf.runtime.notation.Diagram getDiagram() {
@@ -927,9 +907,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides getDiagramGraphicalViewer.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart#getDiagramGraphicalViewer()
*/
// public IDiagramGraphicalViewer getDiagramGraphicalViewer() {
@@ -943,9 +923,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Overrides getEditingDomain.
- *
+ *
* {@inheritDoc}
- *
+ *
* @see org.eclipse.emf.edit.domain.IEditingDomainProvider#getEditingDomain()
*/
public EditingDomain getEditingDomain() {
@@ -954,7 +934,7 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Throws an UnsupportedOperationException.
- *
+ *
* @see org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor#getDiagramEditDomain()
*/
// public DiagramEditDomain getDiagramEditDomain() {
@@ -965,9 +945,9 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
/**
* Change the editor input.<BR>
* <U>Note</U>: that method should be called within the UI-Thread.
- *
+ *
* @see org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor#setEditorInput(org.eclipse.ui.IEditorInput)
- *
+ *
* @param newInput
* The new input
* @deprecated Not used anymore
@@ -1002,6 +982,17 @@ public class CoreMultiDiagramEditor extends AbstractMultiPageSashEditor implemen
private boolean needsRefresh;
+ protected void scheduleRefresh() {
+ needsRefresh = true;
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ refreshTabs();
+ }
+ });
+ }
+
@Override
protected void refreshTabs() {
if(!needsRefresh) {

Back to the top