Project

General

Profile

Download (8.14 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.editor.view.uses;
2

    
3
import java.util.HashMap;
4
import java.util.Map;
5

    
6
import org.eclipse.jface.action.Action;
7
import org.eclipse.jface.action.GroupMarker;
8
import org.eclipse.jface.action.IToolBarManager;
9
import org.eclipse.jface.action.MenuManager;
10
import org.eclipse.jface.resource.ImageDescriptor;
11
import org.eclipse.jface.viewers.ISelection;
12
import org.eclipse.jface.viewers.StructuredSelection;
13
import org.eclipse.jface.viewers.TreeViewer;
14
import org.eclipse.jface.viewers.Viewer;
15
import org.eclipse.swt.SWT;
16
import org.eclipse.swt.dnd.DND;
17
import org.eclipse.swt.dnd.Transfer;
18
import org.eclipse.swt.graphics.ImageData;
19
import org.eclipse.swt.widgets.Composite;
20
import org.eclipse.swt.widgets.Control;
21
import org.eclipse.swt.widgets.Menu;
22
import org.eclipse.swt.widgets.Tree;
23
import org.eclipse.ui.IEditorPart;
24
import org.eclipse.ui.IWorkbenchActionConstants;
25
import org.eclipse.ui.IWorkbenchPart;
26

    
27
import eu.etaxonomy.cdm.model.common.CdmBase;
28
import eu.etaxonomy.cdm.model.description.DescriptionBase;
29
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
30
import eu.etaxonomy.cdm.model.description.TaxonDescription;
31
import eu.etaxonomy.cdm.api.service.IDescriptionService;
32
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
33
import eu.etaxonomy.taxeditor.editor.EditorUtil;
34
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
35
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
36
import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
37
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDragListener;
38
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDropAdapter;
39
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;
40
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewerSorter;
41
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
42
import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
43
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
44
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
45
import eu.etaxonomy.taxeditor.model.ImageResources;
46
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
47

    
48

    
49

    
50
public class UsesViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
51
	
52
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.uses";
53
	private TreeViewer viewer;
54
	private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
55
	private ToggleDescriptionAction showAllElementsAction;
56
	private ToggleDescriptionAction hideAllElementsAction;
57

    
58
	private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
59
	
60
	/** {@inheritDoc} */
61
	@Override
62
	public void createViewer(Composite parent) {
63
		
64
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
65
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
66
				
67
		viewer.setContentProvider(new UsesContentProvider(featureNodeContainerCache));		
68
		
69
		//viewer.setInput(descService.listTaxonDescriptions(Taxon, null, null, null, null, null, null));
70
		
71
		viewer.setLabelProvider(new UsesLabelProvider());
72
		
73
		//viewer.setSorter(new DescriptiveViewerSorter());
74
		
75
		viewer.setAutoExpandLevel(2);
76
		
77
		
78
		
79
		Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };
80
		/*viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(
81
				this));
82
		viewer.addDropSupport(dndOperations, transfers,
83
				new DescriptionElementDropAdapter(viewer));*/
84
						
85
		// Propagate selection from viewer
86
		getSite().setSelectionProvider(viewer);
87
		
88
		showAllElementsAction = new ToggleDescriptionAction(false);		
89
		hideAllElementsAction = new ToggleDescriptionAction(true);
90
		
91
		// Add context menu to tree
92
		createMenu();
93
		
94
		createToolbar();
95
		
96
		// set initial input
97
//		if(getEditor() != null){
98
//			viewer.setInput(getEditor().getEditorInput());
99
//		}
100
	}
101
	
102
	private void createToolbar() {
103
		IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
104
		toolBarManager.add(showAllElementsAction);
105
		toolBarManager.add(hideAllElementsAction);
106
	}
107
	
108
	private void createMenu(){
109
		MenuManager menuManager = new MenuManager();
110
		menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
111
		
112
		getSite().registerContextMenu(menuManager, viewer);
113

    
114
		// FIXME for some reason this is not working
115
		menuManager.add(showAllElementsAction);
116
		menuManager.add(hideAllElementsAction);
117
				
118
		Control control = viewer.getControl();
119
		Menu menu = menuManager.createContextMenu(control);
120
		
121
		control.setMenu(menu);	
122
	}
123
	
124
	public void changed(Object object) {
125
		for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){
126
			containerTree.buildTree();
127
		}
128
		viewer.refresh();
129
		
130
		/*if(object instanceof DescriptionElementBase){
131
			DescriptionElementBase descriptionElement = (DescriptionElementBase) object;
132
			DescriptionBase description = descriptionElement.getInDescription();
133
			FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);
134
			
135
			FeatureNodeContainer featureNodeContainer = containerTree.getFeatureNodeContainerForDescriptionElement(descriptionElement);
136
			viewer.expandToLevel(featureNodeContainer, 1);
137
			
138
		}*/
139

    
140
		if(object != null){
141
			StructuredSelection selection = new StructuredSelection(object);
142
			viewer.setSelection(selection, true);
143
		}
144

    
145
		super.changed(object);
146
	}
147
	
148
	
149
	/* (non-Javadoc)
150
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
151
	 */
152
	/** {@inheritDoc} */
153
	@Override
154
	protected ISelection getInitialSelection() {
155
		if(getEditor() != null){
156
			return new StructuredSelection(getEditor().getEditorInput());
157
		}	
158
		
159
		return super.getInitialSelection();
160
	}
161
	
162
	/** {@inheritDoc} */
163
	@Override
164
	public boolean postOperation(CdmBase objectAffectedByOperation) {
165
		return super.postOperation(objectAffectedByOperation);
166
	}
167
	
168
	@Override
169
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
170
		if(EditorUtil.getActiveEditor() == null){
171
			showEmptyPage();
172
			return;
173
		}
174
		
175
		if(part instanceof BulkEditor){
176
			showEmptyPage();
177
			return;
178
		}
179
		
180
		if(part instanceof AbstractGraphKeyEditor){
181
			showEmptyPage();
182
			return;
183
		}
184
		
185
		if(part instanceof MultiPageTaxonEditor){
186
			if(! part.equals(this.part)){
187
				TaxonEditorInput input = (TaxonEditorInput)((IEditorPart) part).getEditorInput();
188
				featureNodeContainerCache.clear();
189
				//showViewer(part, new StructuredSelection(CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)));
190
				showViewer(part, new StructuredSelection(input));
191
			}
192
			showViewer();
193
		}
194
		
195
	}
196

    
197
	@Override
198
	public boolean onComplete() {
199
		return false;
200
	}
201

    
202
	/*@Override
203
	public void showViewer(IWorkbenchPart part, IStructuredSelection selection) {
204
		this.part = part;		
205
    	
206
		Object element = selection.getFirstElement();
207
		
208
		getViewer().setInput(descService.listTaxonDescriptions((Taxon) element, null, null, null, null, null, null));
209
		
210
		showViewer();	
211
	}*/
212
	
213
	@Override
214
	public Viewer getViewer() {
215
		return viewer;
216
	}
217
	
218
	private class ToggleDescriptionAction extends Action{
219
		private boolean expanded;
220
		
221
		public ToggleDescriptionAction(boolean expand){
222
			super(null, Action.AS_PUSH_BUTTON);
223
			expanded = expand;
224
			setImageAndTooltip();
225
		}
226
		
227
		private void setImageAndTooltip(){
228
			setImageDescriptor(new ImageDescriptor() {
229
				@Override
230
				public ImageData getImageData() {
231
					setText(expanded ? "Collapse All" : "Expand All");
232
					String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;
233
					return ImageResources.getImage(resource).getImageData();
234
				}
235
			});
236
			
237
			String toolTipText = expanded ? "Collapse all" : "Show all descriptive data";
238
			setToolTipText(toolTipText);
239
		}
240
		
241
		@Override
242
		public void run() {
243
			if(expanded){
244
				viewer.collapseAll();
245
			}else{
246
				viewer.expandAll();
247
			}
248
			setImageAndTooltip();
249
		}
250
	}
251

    
252
	
253

    
254
}
(3-3/3)