Project

General

Profile

Download (5.97 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
* 
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.editor.view.uses;
11

    
12
import java.util.HashMap;
13
import java.util.Map;
14

    
15
import org.eclipse.jface.action.Action;
16
import org.eclipse.jface.action.GroupMarker;
17
import org.eclipse.jface.action.IToolBarManager;
18
import org.eclipse.jface.action.MenuManager;
19
import org.eclipse.jface.resource.ImageDescriptor;
20
import org.eclipse.jface.viewers.ISelection;
21
import org.eclipse.jface.viewers.StructuredSelection;
22
import org.eclipse.jface.viewers.TreeViewer;
23
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.dnd.DND;
25
import org.eclipse.swt.dnd.Transfer;
26
import org.eclipse.swt.graphics.ImageData;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Control;
29
import org.eclipse.swt.widgets.Menu;
30
import org.eclipse.swt.widgets.Tree;
31
import org.eclipse.ui.IEditorInput;
32
import org.eclipse.ui.IEditorPart;
33
import org.eclipse.ui.IWorkbenchActionConstants;
34
import org.eclipse.ui.IWorkbenchPart;
35

    
36
import eu.etaxonomy.cdm.model.description.TaxonDescription;
37
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
38
import eu.etaxonomy.taxeditor.editor.EditorUtil;
39
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
40
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
41
import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
42
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDragListener;
43
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDropAdapter;
44
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;
45
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
46
import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
47
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
48
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
49
import eu.etaxonomy.taxeditor.model.ImageResources;
50

    
51

    
52
/**
53
 * <p>UsesViewPart Class.</p>
54
 * @author a.theys	
55
 * @created mar 13, 2012
56
 * @version 1.0
57
 */
58
public class UsesViewPart extends DescriptiveViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
59
	
60
	/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
61
	
62
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.uses";
63
	
64
	private TreeViewer viewer;
65
	
66
	private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
67
	
68
	private ToggleDescriptionAction showAllElementsAction;
69
	
70
	private ToggleDescriptionAction hideAllElementsAction;
71

    
72
	private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
73
	
74
	/** {@inheritDoc} */
75
	@Override
76
	public void createViewer(Composite parent) {
77
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
78
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
79
		viewer.setContentProvider(new UsesContentProvider(featureNodeContainerCache));
80
		viewer.setLabelProvider(new UsesLabelProvider());
81
		viewer.setAutoExpandLevel(2);
82
		Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };
83
		viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(
84
				this));
85
		viewer.addDropSupport(dndOperations, transfers,
86
				new DescriptionElementDropAdapter(viewer));
87
		getSite().setSelectionProvider(viewer);
88
		showAllElementsAction = new ToggleDescriptionAction(false);		
89
		hideAllElementsAction = new ToggleDescriptionAction(true);
90
		createMenu();
91
		createToolbar();
92
	}
93
	
94
	
95
	
96
	private void createToolbar() {
97
		IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
98
		toolBarManager.add(showAllElementsAction);
99
		toolBarManager.add(hideAllElementsAction);
100
	}
101
	
102
	@Override
103
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
104
		if(EditorUtil.getActiveEditor() == null){
105
			showEmptyPage();
106
			return;
107
		}
108
		
109
		if(part instanceof BulkEditor){
110
			showEmptyPage();
111
			return;
112
		}
113
		
114
		if(part instanceof AbstractGraphKeyEditor){
115
			showEmptyPage();
116
			return;
117
		}
118
		
119
		if(part instanceof DefinedTermEditor){
120
			showEmptyPage();
121
			return;
122
		}
123
		
124
		if(part instanceof MultiPageTaxonEditor){
125
			if(! part.equals(this.part)){
126
				IEditorInput input = ((IEditorPart) part).getEditorInput();
127
				featureNodeContainerCache.clear();
128
				showViewer(part, new StructuredSelection(input));
129
			}
130
			showViewer();
131
		}
132
	}
133
	
134
	
135
	private void createMenu(){
136
		MenuManager menuManager = new MenuManager();
137
		menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
138
		
139
		getSite().registerContextMenu(menuManager, viewer);
140

    
141
		// FIXME for some reason this is not working
142
		menuManager.add(showAllElementsAction);
143
		menuManager.add(hideAllElementsAction);
144
				
145
		Control control = viewer.getControl();
146
		Menu menu = menuManager.createContextMenu(control);
147
		
148
		control.setMenu(menu);	
149
	}
150
	
151

    
152
	private class ToggleDescriptionAction extends Action{
153
		private boolean expanded;
154
		
155
		public ToggleDescriptionAction(boolean expand){
156
			super(null, Action.AS_PUSH_BUTTON);
157
			expanded = expand;
158
			setImageAndTooltip();
159
		}
160
		
161
		private void setImageAndTooltip(){
162
			setImageDescriptor(new ImageDescriptor() {
163
				@Override
164
				public ImageData getImageData() {
165
					setText(expanded ? "Collapse All" : "Expand All");
166
					String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;
167
					return ImageResources.getImage(resource).getImageData();
168
				}
169
			});
170
			
171
			String toolTipText = expanded ? "Collapse all" : "Show all descriptive data";
172
			setToolTipText(toolTipText);
173
		}
174
		
175
		@Override
176
		public void run() {
177
			if(expanded){
178
				viewer.collapseAll();
179
			}else{
180
				viewer.expandAll();
181
			}
182
			setImageAndTooltip();
183
		}
184
	}
185

    
186
}
(3-3/3)