Project

General

Profile

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

    
11
package eu.etaxonomy.taxeditor.editor.view.media;
12

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

    
16
import org.eclipse.jface.action.GroupMarker;
17
import org.eclipse.jface.action.MenuManager;
18
import org.eclipse.jface.viewers.ISelection;
19
import org.eclipse.jface.viewers.IStructuredSelection;
20
import org.eclipse.jface.viewers.ITreeContentProvider;
21
import org.eclipse.jface.viewers.StructuredSelection;
22
import org.eclipse.jface.viewers.TreeNode;
23
import org.eclipse.jface.viewers.TreeViewer;
24
import org.eclipse.jface.viewers.Viewer;
25
import org.eclipse.swt.SWT;
26
import org.eclipse.swt.widgets.Composite;
27
import org.eclipse.swt.widgets.Control;
28
import org.eclipse.swt.widgets.Menu;
29
import org.eclipse.swt.widgets.Tree;
30
import org.eclipse.ui.IEditorInput;
31
import org.eclipse.ui.IEditorPart;
32
import org.eclipse.ui.IWorkbenchActionConstants;
33
import org.eclipse.ui.IWorkbenchPart;
34

    
35
import eu.etaxonomy.cdm.model.description.DescriptionBase;
36
import eu.etaxonomy.cdm.model.description.IDescribable;
37
import eu.etaxonomy.cdm.model.media.IMediaDocumented;
38
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
39
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
40
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
41
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveContentProvider;
42
import eu.etaxonomy.cdm.model.description.TaxonDescription;
43
import eu.etaxonomy.taxeditor.model.AbstractUtility;
44
import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
45
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
46
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
47
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
48
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
49
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
50
import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
51
import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
52

    
53
/**
54
 * <p>MediaViewPart class.</p>
55
 *
56
 * @author n.hoffmann
57
 * @created Jun 15, 2010
58
 * @version 1.0
59
 */
60
public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
61

    
62
	/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.medi"{trunked}</code> */
63
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.media";
64

    
65

    
66
	private TreeViewer viewer;
67
	
68
	/*
69
	 * (non-Javadoc)
70
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite)
71
	 */
72
	/** {@inheritDoc} */
73
	@Override
74
	public void createViewer(Composite parent) {
75

    
76
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
77
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
78
		
79
		viewer.setContentProvider(new MediaContentProvider());
80
		viewer.setLabelProvider(new MediaLabelProvider());
81
		viewer.setAutoExpandLevel(2);
82

    
83
		// Propagate selection from viewer
84
		getSite().setSelectionProvider(viewer);
85

    
86
		// Add context menu to tree
87
		MenuManager menuMgr = new MenuManager();
88
		menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
89
		getSite().registerContextMenu(menuMgr, viewer);
90

    
91
		Control control = viewer.getControl();
92
		Menu menu = menuMgr.createContextMenu(control);
93
		control.setMenu(menu);
94

    
95
	}
96

    
97
	/* (non-Javadoc)
98
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
99
	 */
100
	/** {@inheritDoc} */
101
	@Override
102
	protected ISelection getInitialSelection() {
103
		if(getEditor() != null){
104
			return new StructuredSelection(getEditor().getEditorInput());
105
		}
106

    
107
		return super.getInitialSelection();
108
	}
109

    
110
	/** {@inheritDoc} */
111
	@Override
112
    protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
113
	    if(part==this){
114
	        return;
115
	    }
116
		if(AbstractUtility.getActiveEditor() == null){
117
			showEmptyPage();
118
			return;
119
		}
120

    
121
        if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){
122
            // do not show empty page as these views are also used to edit the description selected in this view
123
            return;
124
        }
125

    
126
		if(part instanceof IPartContentHasMedia){
127
		    if(part instanceof MultiPageTaxonEditor){
128
		        IEditorInput input = ((IEditorPart) part).getEditorInput();
129
		        showViewer(part, new StructuredSelection(input));
130
		    }
131
		    else if(selection instanceof IStructuredSelection
132
			        && ((IStructuredSelection) selection).getFirstElement() instanceof IDescribable<?>
133
			        && part instanceof IPartContentHasFactualData  && !(((IStructuredSelection) selection).getFirstElement() instanceof SpecimenOrObservationBase && part instanceof BulkEditor)){
134
		    	Object firstElement = ((IStructuredSelection) selection).getFirstElement();
135
		        if(firstElement instanceof TreeNode){
136
		            showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue()));
137
		        }
138
		        else{
139
		            showViewer(part, (IStructuredSelection) selection);
140
		        }
141
		    }else{
142
		    	showEmptyPage();
143
		    }
144
		}
145
		else{
146
		    showEmptyPage();
147
		}
148
	}
149

    
150
	/** {@inheritDoc} */
151
	@Override
152
	public void changed(Object object) {
153
		viewer.refresh();
154
		//TODO: should be replaced with the possibility to set views dirty
155
		// when we move to Eclipse 4
156
		// take a look at ISaveblePart
157
		if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
158
		    ((BulkEditor) part).forceDirty();
159
		}
160
		super.changed(object);
161
	}
162

    
163
	/** {@inheritDoc} */
164
	@Override
165
	public Viewer getViewer() {
166
		return viewer;
167
	}
168

    
169
	/**
170
	 * <p>onComplete</p>
171
	 *
172
	 * @return a boolean.
173
	 */
174
	@Override
175
    public boolean onComplete() {
176
		return true;
177
	}
178
}
(3-3/3)