Project

General

Profile

« Previous | Next » 

Revision b994005d

Added by Patrick Plitzner almost 7 years ago

Integrate FeatureTreeEditorComposite into CharacterEditor

View differences:

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/CharacterEditor.java
9 9
*/
10 10
package eu.etaxonomy.taxeditor.editor.workingSet;
11 11

  
12
import java.util.Collections;
13 12
import java.util.UUID;
14 13

  
15 14
import javax.annotation.PostConstruct;
16 15
import javax.annotation.PreDestroy;
16
import javax.inject.Inject;
17 17
import javax.inject.Named;
18 18

  
19 19
import org.eclipse.e4.ui.di.Focus;
20
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
20 21
import org.eclipse.e4.ui.services.IServiceConstants;
22
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
21 23
import org.eclipse.jface.viewers.ISelection;
24
import org.eclipse.jface.viewers.ISelectionChangedListener;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.SelectionChangedEvent;
22 27
import org.eclipse.jface.viewers.TreeSelection;
23 28
import org.eclipse.jface.viewers.TreeViewer;
24 29
import org.eclipse.swt.SWT;
25 30
import org.eclipse.swt.custom.SashForm;
26 31
import org.eclipse.swt.dnd.DND;
27 32
import org.eclipse.swt.dnd.Transfer;
33
import org.eclipse.swt.events.ModifyEvent;
34
import org.eclipse.swt.events.ModifyListener;
28 35
import org.eclipse.swt.events.SelectionAdapter;
29 36
import org.eclipse.swt.events.SelectionEvent;
30 37
import org.eclipse.swt.layout.GridData;
......
39 46

  
40 47
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
41 48
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
49
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
42 50
import eu.etaxonomy.cdm.model.description.Character;
43 51
import eu.etaxonomy.cdm.model.description.FeatureNode;
44 52
import eu.etaxonomy.cdm.model.description.FeatureTree;
53
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDragListener;
54
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeDropAdapter;
45 55
import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
46 56
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeContentProvider;
47 57
import eu.etaxonomy.taxeditor.featuretree.FeatureTreeLabelProvider;
48
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditor;
58
import eu.etaxonomy.taxeditor.featuretree.e4.FeatureTreeEditorComposite;
49 59
import eu.etaxonomy.taxeditor.model.MessagingUtils;
50 60
import eu.etaxonomy.taxeditor.store.CdmStore;
61
import eu.etaxonomy.taxeditor.ui.dialog.selection.FeatureTreeSelectionDialog;
51 62

  
52 63
/**
53 64
 * @author pplitzner
54 65
 * @date 24.05.2017
55 66
 *
56 67
 */
57
public class CharacterEditor {
68
public class CharacterEditor implements ISelectionChangedListener, ModifyListener{
58 69

  
59 70

  
60
    private TreeViewer treeViewerCharacters;
71
    private FeatureTreeEditorComposite featureTreeEditorComposite;
61 72
    private TreeViewer treeViewerProperties;
62 73
    private TreeViewer treeViewerStructures;
63
    private FeatureTreeEditor editor;
64 74
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
65 75
    private Button btnAddCharacter;
66 76

  
77
    @Inject
78
    private ESelectionService selService;
79

  
80
    @Inject
81
    private MDirtyable dirty;
82

  
67 83
    private ConversationHolder conversation;
84
    private FeatureTree featureTree;
68 85

  
69 86
    public CharacterEditor() {
70 87
        conversation = CdmStore.createConversation();
......
117 134

  
118 135
        btnAddCharacter = new Button(composite_2, SWT.NONE);
119 136
        btnAddCharacter.setText(">>");
120
        btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
137
        btnAddCharacter.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, true, 1, 1));
121 138
        formToolkit.adapt(btnAddCharacter, true, true);
122 139

  
123

  
124 140
        Composite composite_3 = new Composite(sashForm, SWT.NONE);
125 141
        formToolkit.adapt(composite_3);
126 142
        formToolkit.paintBordersFor(composite_3);
127 143
        composite_3.setLayout(new GridLayout(1, false));
128 144

  
129
        editor = new FeatureTreeEditor(shell);
130
        editor.createControl(composite_3, shell);
131

  
132
        //                treeViewerCharacters = new TreeViewer(sashForm, SWT.BORDER);
145
        featureTreeEditorComposite = new FeatureTreeEditorComposite(composite_3, SWT.BORDER);
146
        featureTreeEditorComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
147
        featureTreeEditorComposite.getButton_add().setVisible(false);
148
        featureTreeEditorComposite.getButton_remove().setVisible(false);
149
        featureTreeEditorComposite.init(new FeatureNodeDragListener(featureTreeEditorComposite.getViewer()), new FeatureNodeDropAdapter(featureTreeEditorComposite.getViewer()), this, new SelectionAdapter() {
150
            @Override
151
            public void widgetSelected(SelectionEvent e) {
152
                FeatureTree tree = FeatureTreeSelectionDialog.select(shell, conversation, null);
153
                if(tree!=null){
154
                    setSelectedTree(tree);
155
                }
156
            }
157
        }, new SelectionAdapter() {
158
        }, new SelectionAdapter() {
159
        });
133 160
        sashForm.setWeights(new int[] {3, 3, 1, 3});
134 161

  
135 162
        init();
136 163
    }
137 164

  
165
    public void setSelectedTree(FeatureTree featureTree) {
166
        this.featureTree = HibernateProxyHelper.deproxy(featureTree, FeatureTree.class);
167
        this.featureTree.setRoot(HibernateProxyHelper.deproxy(featureTree.getRoot(), FeatureNode.class));
168
        featureTreeEditorComposite.getViewer().setInput(featureTree);
169

  
170
        featureTreeEditorComposite.getText_title().removeModifyListener(this);
171
        featureTreeEditorComposite.getText_title().setText(featureTree.getTitleCache());
172
        featureTreeEditorComposite.getText_title().addModifyListener(this);
173
    }
174

  
138 175
    private void init(){
139 176
        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
140 177
        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer.getInstance() };
......
158 195
            public void widgetSelected(SelectionEvent e) {
159 196
                ISelection structureTreeSelection = treeViewerStructures.getSelection();
160 197
                ISelection propertyTreeSelection = treeViewerProperties.getSelection();
161
                if(structureTreeSelection==null || propertyTreeSelection==null || editor.getSelectedFeatureTree()==null){
198
                if(structureTreeSelection==null || propertyTreeSelection==null /*|| editor.getSelectedFeatureTree()==null*/){
162 199
                    MessagingUtils.warningDialog("Cannot perform action", CharacterEditor.this,
163 200
                            "You have to select a structure, a property and a feature tree to perform this action.");
164 201
                    return;
165 202
                }
203
                //get selected structure and property
166 204
                FeatureNode structureNode = (FeatureNode) ((TreeSelection)structureTreeSelection).getFirstElement();
167 205
                FeatureNode propertyNode = (FeatureNode) ((TreeSelection)propertyTreeSelection).getFirstElement();
206
                //create new Character
168 207
                String label = structureNode.getFeature().toString()+" "+propertyNode.getFeature().toString();
169 208
                Character character = Character.NewInstance(structureNode, propertyNode, null, label, label);
170
                //TODO session handling
171
//                CdmStore.getService(ITermService.class).save(character);
172
                editor.addFeatures(Collections.singleton(character));
209
//                CdmStore.getService(ITermService.class).merge(character);
210

  
211
                //add new Character to feature tree
212
                IStructuredSelection selection = (IStructuredSelection) featureTreeEditorComposite.getViewer().getSelection();
213
                FeatureNode parent = (FeatureNode) (selection.getFirstElement() != null ? selection.getFirstElement()
214
                        : ((FeatureTree) featureTreeEditorComposite.getViewer().getInput()).getRoot());
215
                FeatureNode child = FeatureNode.NewInstance(character);
216
//                CdmStore.getService(IFeatureNodeService.class).merge(child, true);
217

  
218
                parent.addChild(child);
219
                setDirty(true);
220
                featureTreeEditorComposite.getViewer().refresh();
173 221
            }
174 222
        });
175

  
176
//        treeViewerCharacters.setContentProvider(new FeatureTreeContentProvider());
177
//        treeViewerCharacters.setLabelProvider(new FeatureTreeLabelProvider());
178
//        treeViewerCharacters.addDropSupport(dndOperations, transfers, new CharacterDropAdapter(treeViewerCharacters));
179 223
    }
180 224

  
181 225
    @PreDestroy
......
189 233
        }
190 234
    }
191 235

  
192
    public TreeViewer getTreeViewerCharacters() {
193
        return treeViewerCharacters;
194
    }
195 236
    public TreeViewer getTreeViewerProperties() {
196 237
        return treeViewerProperties;
197 238
    }
198 239
    public TreeViewer getTreeViewerStructures() {
199 240
        return treeViewerStructures;
200 241
    }
242

  
243
    /**
244
     * {@inheritDoc}
245
     */
246
    @Override
247
    public void selectionChanged(SelectionChangedEvent event) {
248
        //propagate selection
249
        IStructuredSelection isel = (IStructuredSelection) event.getSelection();
250
        selService.setSelection((isel.size() == 1 ? isel.getFirstElement() : isel.toArray()));
251
    }
252

  
253
    /**
254
     * {@inheritDoc}
255
     */
256
    @Override
257
    public void modifyText(ModifyEvent e) {
258
        featureTree.setTitleCache(featureTreeEditorComposite.getText_title().getText(), true);
259
        setDirty(true);
260
    }
261

  
262
    private void setDirty(boolean isDirty) {
263
        dirty.setDirty(isDirty);
264
    }
201 265
}

Also available in: Unified diff