*/
package eu.etaxonomy.taxeditor.editor.workingSet;
-import java.util.Collections;
import java.util.UUID;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
+import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.model.application.ui.MDirtyable;
import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.description.Character;
import eu.etaxonomy.cdm.model.description.FeatureNode;
import eu.etaxonomy.cdm.model.description.FeatureTree;
+import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDragListener;
+import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDropAdapter;
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
-import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
+import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditorComposite;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
/**
* @author pplitzner
* @date 24.05.2017
*
*/
-public class CharacterEditor {
+public class CharacterEditor implements ISelectionChangedListener, ModifyListener{
- private TreeViewer treeViewerCharacters;
+ private FeatureTreeEditorComposite featureTreeEditorComposite;
private TreeViewer treeViewerProperties;
private TreeViewer treeViewerStructures;
- private FeatureTreeEditor editor;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private Button btnAddCharacter;
+ @Inject
+ private ESelectionService selService;
+
+ @Inject
+ private MDirtyable dirty;
+
private ConversationHolder conversation;
+ private FeatureTree featureTree;
public CharacterEditor() {
conversation = CdmStore.createConversation();
btnAddCharacter = new Button(composite_2, SWT.NONE);
btnAddCharacter.setText(">>");
- btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
+ btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, true, 1, 1));
formToolkit.adapt(btnAddCharacter, true, true);
-
Composite composite_3 = new Composite(sashForm, SWT.NONE);
formToolkit.adapt(composite_3);
formToolkit.paintBordersFor(composite_3);
composite_3.setLayout(new GridLayout(1, false));
- editor = new FeatureTreeEditor(shell);
- editor.createControl(composite_3, shell);
-
- // treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
+ featureTreeEditorComposite = new FeatureTreeEditorComposite(composite_3, SWT.BORDER);
+ featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ featureTreeEditorComposite.getButton_add().setVisible(false);
+ featureTreeEditorComposite.getButton_remove().setVisible(false);
+ featureTreeEditorComposite.init(new FeatureNodeDragListener(featureTreeEditorComposite.getViewer()), new FeatureNodeDropAdapter(featureTreeEditorComposite.getViewer()), this, new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
+ if(tree!=null){
+ setSelectedTree(tree);
+ }
+ }
+ }, new SelectionAdapter() {
+ }, new SelectionAdapter() {
+ });
sashForm.setWeights(new int[] {3, 3, 1, 3});
init();
}
+ public void setSelectedTree(FeatureTree featureTree) {
+ this.featureTree = HibernateProxyHelper.deproxy(featureTree, FeatureTree.class);
+ this.featureTree.setRoot(HibernateProxyHelper.deproxy(featureTree.getRoot(), FeatureNode.class));
+ featureTreeEditorComposite.getViewer().setInput(featureTree);
+
+ featureTreeEditorComposite.getText_title().removeModifyListener(this);
+ featureTreeEditorComposite.getText_title().setText(featureTree.getTitleCache());
+ featureTreeEditorComposite.getText_title().addModifyListener(this);
+ }
+
private void init(){
int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
public void widgetSelected(SelectionEvent e) {
ISelection structureTreeSelection = treeViewerStructures.getSelection();
ISelection propertyTreeSelection = treeViewerProperties.getSelection();
- if(structureTreeSelection==null || propertyTreeSelection==null || editor.getSelectedFeatureTree()==null){
+ if(structureTreeSelection==null || propertyTreeSelection==null /*|| editor.getSelectedFeatureTree()==null*/){
MessagingUtils.warningDialog("Cannot perform action", CharacterEditor.this,
"You have to select a structure, a property and a feature tree to perform this action.");
return;
}
+ //get selected structure and property
FeatureNode structureNode = (FeatureNode) ((TreeSelection)structureTreeSelection).getFirstElement();
FeatureNode propertyNode = (FeatureNode) ((TreeSelection)propertyTreeSelection).getFirstElement();
+ //create new Character
String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
- //TODO session handling
-// CdmStore.getService(ITermService.class).save(character);
- editor.addFeatures(Collections.singleton(character));
+// CdmStore.getService(ITermService.class).merge(character);
+
+ //add new Character to feature tree
+ IStructuredSelection selection = (IStructuredSelection) featureTreeEditorComposite.getViewer().getSelection();
+ FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement()
+ : ((FeatureTree) featureTreeEditorComposite.getViewer().getInput()).getRoot());
+ FeatureNode child = FeatureNode.NewInstance(character);
+// CdmStore.getService(IFeatureNodeService.class).merge(child, true);
+
+ parent.addChild(child);
+ setDirty(true);
+ featureTreeEditorComposite.getViewer().refresh();
}
});
-
-// treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
-// treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
-// treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
}
@PreDestroy
}
}
- public TreeViewer getTreeViewerCharacters() {
- return treeViewerCharacters;
- }
public TreeViewer getTreeViewerProperties() {
return treeViewerProperties;
}
public TreeViewer getTreeViewerStructures() {
return treeViewerStructures;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ //propagate selection
+ IStructuredSelection isel = (IStructuredSelection) event.getSelection();
+ selService.setSelection((isel.size() == 1 ? isel.getFirstElement() : isel.toArray()));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void modifyText(ModifyEvent e) {
+ featureTree.setTitleCache(featureTreeEditorComposite.getText_title().getText(), true);
+ setDirty(true);
+ }
+
+ private void setDirty(boolean isDirty) {
+ dirty.setDirty(isDirty);
+ }
}