Revision e4ce2709
Added by Patrick Plitzner over 5 years ago
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/character/CharacterDragListener.java | ||
---|---|---|
9 | 9 |
package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.character; |
10 | 10 |
|
11 | 11 |
import java.util.Collection; |
12 |
import java.util.stream.Collectors; |
|
12 | 13 |
|
13 | 14 |
import org.eclipse.jface.viewers.IStructuredSelection; |
14 | 15 |
import org.eclipse.jface.viewers.TreeSelection; |
15 | 16 |
import org.eclipse.jface.viewers.TreeViewer; |
17 |
import org.eclipse.nebula.widgets.nattable.util.GUIHelper; |
|
16 | 18 |
import org.eclipse.swt.dnd.DragSourceEvent; |
19 |
import org.eclipse.swt.graphics.GC; |
|
20 |
import org.eclipse.swt.graphics.Image; |
|
21 |
import org.eclipse.swt.graphics.Point; |
|
22 |
import org.eclipse.swt.widgets.Display; |
|
17 | 23 |
|
18 | 24 |
import eu.etaxonomy.cdm.model.description.Character; |
19 | 25 |
import eu.etaxonomy.cdm.model.description.FeatureNode; |
... | ... | |
29 | 35 |
|
30 | 36 |
private TreeViewer structureViewer; |
31 | 37 |
private TreeViewer propertyViewer; |
38 |
Collection<Character> characters; |
|
39 |
private Image image; |
|
40 |
private GC gc; |
|
32 | 41 |
|
33 | 42 |
public CharacterDragListener(TreeViewer structureViewer, TreeViewer propertyViewer) { |
34 | 43 |
super(propertyViewer); |
... | ... | |
37 | 46 |
} |
38 | 47 |
|
39 | 48 |
@Override |
40 |
public void dragSetData(DragSourceEvent event) { |
|
41 |
TreeSelection structureSelection = (TreeSelection) structureViewer.getSelection(); |
|
42 |
TreeSelection propertySelection = (TreeSelection) propertyViewer.getSelection(); |
|
43 |
if(structureSelection!=null && propertySelection!=null |
|
44 |
&& !structureSelection.isEmpty() && !propertySelection.isEmpty()){ |
|
45 |
//create all possible characters |
|
46 |
Collection<Character> characters = CharacterEditor.createCharacters(structureSelection, propertySelection); |
|
49 |
public void dragFinished(DragSourceEvent event) { |
|
50 |
characters = null; |
|
51 |
if(image!=null){ |
|
52 |
image.dispose(); |
|
53 |
image = null; |
|
54 |
} |
|
55 |
if(gc!=null){ |
|
56 |
gc.dispose(); |
|
57 |
gc = null; |
|
58 |
} |
|
59 |
super.dragFinished(event); |
|
60 |
} |
|
47 | 61 |
|
48 |
if (CharacterTransfer.getInstance().isSupportedType(event.dataType)) { |
|
49 |
event.data = characters; |
|
50 |
} |
|
62 |
@Override |
|
63 |
public void dragSetData(DragSourceEvent event) { |
|
64 |
if (CharacterTransfer.getInstance().isSupportedType(event.dataType)) { |
|
65 |
event.data = characters; |
|
51 | 66 |
} |
52 | 67 |
} |
53 | 68 |
|
54 |
/** |
|
55 |
* Method declared on DragSourceListener |
|
56 |
*/ |
|
57 | 69 |
@Override |
58 | 70 |
public void dragStart(DragSourceEvent event) { |
59 | 71 |
event.doit = |
... | ... | |
63 | 75 |
.stream().allMatch(element -> element instanceof FeatureNode) |
64 | 76 |
&& ((IStructuredSelection) propertyViewer.getSelection()).toList() |
65 | 77 |
.stream().allMatch(element -> element instanceof FeatureNode); |
78 |
if(!event.doit){ |
|
79 |
return; |
|
80 |
} |
|
81 |
TreeSelection structureSelection = (TreeSelection) structureViewer.getSelection(); |
|
82 |
TreeSelection propertySelection = (TreeSelection) propertyViewer.getSelection(); |
|
83 |
if(structureSelection!=null && propertySelection!=null |
|
84 |
&& !structureSelection.isEmpty() && !propertySelection.isEmpty()){ |
|
85 |
//create all possible characters |
|
86 |
characters = CharacterEditor.createCharacters(structureSelection, propertySelection); |
|
87 |
|
|
88 |
} |
|
89 |
String text = characters.stream().map(character->character.generateTitle()).collect(Collectors.joining("\n")); |
|
90 |
|
|
91 |
// creating temporary GC for size calculation |
|
92 |
gc = new GC(Display.getDefault()); |
|
93 |
// Calculate text extent |
|
94 |
Point compositeSize = gc.textExtent(text); |
|
95 |
//remove temporary gc |
|
96 |
gc.dispose(); |
|
97 |
gc = null; |
|
98 |
// Creating new Image |
|
99 |
image = new Image(Display.getCurrent(),compositeSize.x+10,compositeSize.y+10); |
|
100 |
//create gc for image to be able to draw on it |
|
101 |
gc = new GC(image); |
|
102 |
//set and fill with bg color |
|
103 |
gc.setBackground(GUIHelper.COLOR_LIST_BACKGROUND); |
|
104 |
gc.fillRectangle(0, 0, compositeSize.x+10, compositeSize.y+10); |
|
105 |
//draw text |
|
106 |
gc.drawText(text, 5, 5, true); |
|
107 |
//draw border |
|
108 |
gc.drawRectangle(0, 0, compositeSize.x+9, compositeSize.y+9); |
|
109 |
// Setting widget to DnD image |
|
110 |
event.image = image; |
|
111 |
|
|
66 | 112 |
} |
67 | 113 |
|
68 | 114 |
} |
Also available in: Unified diff
ref #7923 Show character combination during drag&drop