import java.util.HashMap;
import java.util.Map;
-import org.apache.log4j.Logger;
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;
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;
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;
/**
+ * <p>DescriptiveViewPart class.</p>
+ *
* @author n.hoffmann
* @created Jun 9, 2010
* @version 1.0
*/
public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
- private static final Logger logger = Logger
- .getLogger(DescriptiveViewPart.class);
+ /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
public static final String ID = "eu.etaxonomy.taxeditor.editor.view.description";
private TreeViewer viewer;
- private Map<TaxonDescription, FeatureNodeContainer> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainer>();
+ private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
private ToggleDescriptionAction showAllElementsAction;
private ToggleDescriptionAction hideAllElementsAction;
-
+
+ private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
+
+ /** {@inheritDoc} */
@Override
public void createViewer(Composite parent) {
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
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
*/
+ /** {@inheritDoc} */
@Override
protected ISelection getInitialSelection() {
if(getEditor() != null){
toolBarManager.add(hideAllElementsAction);
}
+ /*
+ * 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} */
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if(EditorUtil.getActiveEditor() == null){
showEmptyPage();
return;
}
+ if(part instanceof AbstractKeyEditor){
+ showEmptyPage();
+ return;
+ }
+
if(part instanceof MultiPageTaxonEditor){
if(! part.equals(this.part)){
IEditorInput input = ((IEditorPart) part).getEditorInput();
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();
}
}
}
+ /** {@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);
+ }
- @Override
- public void dirtyStateChanged() {
- viewer.refresh(true);
- super.dirtyStateChanged();
+ super.changed(object);
}
+ /** {@inheritDoc} */
@Override
public Viewer getViewer() {
return viewer;
}
+ /**
+ * <p>onComplete</p>
+ *
+ * @return a boolean.
+ */
public boolean onComplete() {
return false;
}