X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/3be6ef3e47d2a22ca199d2d66a13caf1252fd0d1..840d4d5dea0b490cfd7887cfbacbe3b922893138:/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java index 84e7ac6de..1eb100f10 100644 --- a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java +++ b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java @@ -15,7 +15,6 @@ import java.util.Map; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; -import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; @@ -24,6 +23,8 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; @@ -35,13 +36,16 @@ import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.editor.key.AbstractKeyEditor; import eu.etaxonomy.taxeditor.editor.view.AbstractCdmEditorViewPart; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; +import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree; import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; import eu.etaxonomy.taxeditor.model.ImageResources; @@ -60,12 +64,14 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP private TreeViewer viewer; - private Map featureNodeContainerCache = new HashMap(); + private Map featureNodeContainerCache = new HashMap(); private ToggleDescriptionAction showAllElementsAction; private ToggleDescriptionAction hideAllElementsAction; - + + private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE; + /** {@inheritDoc} */ @Override public void createViewer(Composite parent) { @@ -75,23 +81,26 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP viewer.setContentProvider(new DescriptiveContentProvider(featureNodeContainerCache)); viewer.setLabelProvider(new DescriptiveLabelProvider()); + viewer.setSorter(new DescriptiveViewerSorter()); + viewer.setAutoExpandLevel(2); + + + Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() }; + viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener( + this)); + viewer.addDropSupport(dndOperations, transfers, + new DescriptionElementDropAdapter(viewer)); // Propagate selection from viewer getSite().setSelectionProvider(viewer); - // Add context menu to tree - MenuManager menuMgr = new MenuManager(); - menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); - getSite().registerContextMenu(menuMgr, viewer); - - Control control = viewer.getControl(); - Menu menu = menuMgr.createContextMenu(control); - control.setMenu(menu); - showAllElementsAction = new ToggleDescriptionAction(false); hideAllElementsAction = new ToggleDescriptionAction(true); + // Add context menu to tree + createMenu(); + createToolbar(); // set initial input @@ -123,9 +132,19 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP * TODO add to the views menu */ private void createMenu(){ - IMenuManager menuManager = getViewSite().getActionBars().getMenuManager(); + MenuManager menuManager = new MenuManager(); + menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); + + getSite().registerContextMenu(menuManager, viewer); + + // FIXME for some reason this is not working menuManager.add(showAllElementsAction); menuManager.add(hideAllElementsAction); + + Control control = viewer.getControl(); + Menu menu = menuManager.createContextMenu(control); + + control.setMenu(menu); } /** {@inheritDoc} */ @@ -140,6 +159,11 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP return; } + if(part instanceof AbstractKeyEditor){ + showEmptyPage(); + return; + } + if(part instanceof MultiPageTaxonEditor){ if(! part.equals(this.part)){ IEditorInput input = ((IEditorPart) part).getEditorInput(); @@ -169,6 +193,7 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP setImageDescriptor(new ImageDescriptor() { @Override public ImageData getImageData() { + setText(expanded ? "Collapse All" : "Expand All"); String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL; return ImageResources.getImage(resource).getImageData(); } @@ -192,41 +217,32 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP /** {@inheritDoc} */ @Override public boolean postOperation(CdmBase objectAffectedByOperation) { - boolean result = super.postOperation(objectAffectedByOperation); + return super.postOperation(objectAffectedByOperation); + } + + /** {@inheritDoc} */ + @Override + public void changed(Object object) { + for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){ + containerTree.buildTree(); + } + viewer.refresh(); - if(objectAffectedByOperation != null){ + if(object instanceof DescriptionElementBase){ + DescriptionElementBase descriptionElement = (DescriptionElementBase) object; + DescriptionBase description = descriptionElement.getInDescription(); + FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description); - if(objectAffectedByOperation instanceof DescriptionElementBase){ - DescriptionElementBase descriptionElement = (DescriptionElementBase) objectAffectedByOperation; - FeatureNodeContainer container = getFeatureNodeContainerForDescriptionElement(descriptionElement); - viewer.expandToLevel(container, 1); - } + FeatureNodeContainer featureNodeContainer = containerTree.getFeatureNodeContainerForDescriptionElement(descriptionElement); + viewer.expandToLevel(featureNodeContainer, 1); - StructuredSelection selection = new StructuredSelection(objectAffectedByOperation); - viewer.setSelection(selection, true); } - return result; - } - - /** - * - * @param descriptionElement - * @return - */ - private FeatureNodeContainer getFeatureNodeContainerForDescriptionElement( - DescriptionElementBase descriptionElement) { - FeatureNodeContainer featureNodeContainerBranch = featureNodeContainerCache.get(descriptionElement.getInDescription()); - FeatureNodeContainer featureNodeContainer = featureNodeContainerBranch.getFeatureNodeContainerForDescriptionElement(descriptionElement); - return featureNodeContainer; - } + if(object != null){ + StructuredSelection selection = new StructuredSelection(object); + viewer.setSelection(selection, true); + } - /** {@inheritDoc} */ - @Override - public void changed(Object object) { -// viewer.refresh(true); -// viewer.update(object, null); - viewer.refresh(object, true); super.changed(object); }