Revision b994005d
Added by Patrick Plitzner almost 7 years ago
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
Integrate FeatureTreeEditorComposite into CharacterEditor