-// $Id$
/**
* Copyright (C) 2007 EDIT
* European Distributed Institute of Taxonomy
package eu.etaxonomy.taxeditor.view.detail;
+import java.util.Collection;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.internal.e4.compatibility.CompatibilityPart;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.description.Feature;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.taxeditor.Messages;
+import eu.etaxonomy.taxeditor.l10n.Messages;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
+import eu.etaxonomy.taxeditor.model.IContextListener;
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
/**
* @created Jun 10, 2010
* @version 1.0
*/
-public class DetailsViewPart extends AbstractCdmEditorViewPart implements IPartContentHasSupplementalData{
+public class DetailsViewPart extends AbstractCdmEditorViewPart implements IPartContentHasSupplementalData, IContextListener{
/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.forms.det"{trunked}</code> */
public static String ID = "eu.etaxonomy.taxeditor.view.detail"; //$NON-NLS-1$
private DetailsViewer viewer;
+ //FIXME E4: this can be removed when working with E4 event system
+ private Object selectionProvidingPart;
+
/** {@inheritDoc} */
@Override
public void createViewer(Composite parent) {
}
@Override
- protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection){
- if(AbstractUtility.getActiveEditor() == null && !(AbstractUtility.getActivePart() instanceof IConversationEnabled)){
+ protected void selectionChanged_internal(IWorkbenchPart workbenchPart, ISelection selection){
+ Object part = workbenchPart;
+ Object wrappedPart = AbstractUtility.getE4WrappedPart(part);
+ if(wrappedPart!=null){
+ part = wrappedPart;
+ }
+ if(AbstractUtility.getActiveE4Editor() == null && !(AbstractUtility.getActiveE4Part() instanceof IConversationEnabled)){
showEmptyPage();
return;
}
- if(part == this){
- return;
- }
+ //special case where the details view still open with details about the closed object #5495
+ try{
+ boolean isSelectionProvidingPartStillActive = false;
+ if(selectionProvidingPart!=null){
+ EPartService partService = TaxeditorStorePlugin.getDefault().getWorkbench().getService(EPartService.class);
+ Collection<MPart> parts = partService.getParts();
+ for (MPart mPart : parts) {
+ Object object = mPart.getObject();
+ if(object instanceof CompatibilityPart){
+ object = ((CompatibilityPart) object).getPart();
+ }
+ if(selectionProvidingPart.equals(object)){
+ isSelectionProvidingPartStillActive = true;
+ break;
+ }
+ }
+ if(!isSelectionProvidingPartStillActive &&
+ selection instanceof IStructuredSelection && ((IStructuredSelection) selection).getFirstElement() !=null){
+ showEmptyPage();
+ return;
+ }
+ }
+ }catch(IllegalStateException e){
+ //nothing
+ }
+
+ if(part == this){
+ return;
+ }
if(!(selection instanceof IStructuredSelection)){
return;
return;
}
}
+ selectionProvidingPart = part;
showViewer(part, structuredSelection);
}else{
showEmptyPage();
@Override
public void showEmptyPage() {
+ selectionProvidingPart = null;
viewer.setSelection(null);
super.showEmptyPage();
}
public boolean onComplete() {
return true;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void contextStop(IMemento memento, IProgressMonitor monitor) {
+ showEmptyPage();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void contextStart(IMemento memento, IProgressMonitor monitor) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void contextRefresh(IProgressMonitor monitor) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
+ }
+
+
+
}