Project

General

Profile

Download (6.58 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.media;
11

    
12
import org.eclipse.jface.action.GroupMarker;
13
import org.eclipse.jface.action.MenuManager;
14
import org.eclipse.jface.viewers.ISelection;
15
import org.eclipse.jface.viewers.IStructuredSelection;
16
import org.eclipse.jface.viewers.StructuredSelection;
17
import org.eclipse.jface.viewers.TreeNode;
18
import org.eclipse.jface.viewers.TreeViewer;
19
import org.eclipse.jface.viewers.Viewer;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.widgets.Composite;
22
import org.eclipse.swt.widgets.Control;
23
import org.eclipse.swt.widgets.Menu;
24
import org.eclipse.swt.widgets.Tree;
25
import org.eclipse.ui.IWorkbenchActionConstants;
26
import org.eclipse.ui.IWorkbenchPart;
27
import org.eclipse.ui.internal.E4PartWrapper;
28

    
29
import eu.etaxonomy.cdm.model.description.IDescribable;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
31
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
32
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
33
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
34
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
35
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
36
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
37
import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
38
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
39
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
40
import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
41
import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
42
import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
43

    
44
/**
45
 * @author n.hoffmann
46
 * @created Jun 15, 2010
47
 * @version 1.0
48
 */
49
public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
50

    
51
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.media"; //$NON-NLS-1$
52

    
53

    
54
	private TreeViewer viewer;
55

    
56
	/** {@inheritDoc} */
57
	@Override
58
	public void createViewer(Composite parent) {
59

    
60
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
61
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
62

    
63
		viewer.setContentProvider(new MediaContentProvider());
64
		viewer.setLabelProvider(new MediaLabelProvider());
65
		viewer.setAutoExpandLevel(2);
66

    
67
		// Propagate selection from viewer
68
		getSite().setSelectionProvider(viewer);
69

    
70
		// Add context menu to tree
71
		MenuManager menuMgr = new MenuManager();
72
		menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
73
		menuMgr.setRemoveAllWhenShown(true);
74
		getSite().registerContextMenu(menuMgr, viewer);
75

    
76
		Control control = viewer.getControl();
77
		Menu menu = menuMgr.createContextMenu(control);
78
		menuMgr.setRemoveAllWhenShown(true);
79
		control.setMenu(menu);
80

    
81
	}
82

    
83
	/** {@inheritDoc} */
84
	@Override
85
	protected ISelection getInitialSelection() {
86
		if(getEditor() != null){
87
			return new StructuredSelection(getEditor().getEditorInput());
88
		}
89

    
90
		return super.getInitialSelection();
91
	}
92

    
93
	/** {@inheritDoc} */
94
	@Override
95
    protected void selectionChanged_internal(IWorkbenchPart workbenchPart, ISelection selection) {
96
	    Object partObject = workbenchPart;
97

    
98
	    if(partObject==this){
99
	        return;
100
	    }
101

    
102
        Object wrappedPart = WorkbenchUtility.getE4WrappedPart(partObject);
103
        if(wrappedPart!=null){
104
            partObject = wrappedPart;
105
        }
106
//		if(AbstractUtility.getActiveE4Editor() == null){
107
//			showEmptyPage();
108
//			return;
109
//		}
110

    
111

    
112
        if (partObject instanceof DetailsViewPart || partObject instanceof SupplementalDataViewPart
113
                || partObject instanceof DescriptiveViewPart) {
114
            // do not show empty page as these views are also used to edit the
115
            // description selected in this view
116
            return;
117
        }
118

    
119
		if(partObject instanceof IPartContentHasMedia && ((IPartContentHasMedia) partObject).canAttachMedia() ){
120
		    if(selection instanceof IStructuredSelection){
121
		    	Object firstElement = ((IStructuredSelection) selection).getFirstElement();
122
		    	if (partObject instanceof MultiPageTaxonEditor){
123
	            	if (firstElement != ((MultiPageTaxonEditor)partObject).getTaxon()){
124
	            		showEmptyPage();
125
	            		return;
126
	            	}
127
	            }
128
		        if(firstElement instanceof TreeNode){
129
		            showViewer(partObject, new StructuredSelection(((TreeNode) firstElement).getValue()));
130
		            return;
131
		        }
132
		        else if(firstElement!=null
133
	                    && firstElement instanceof IDescribable<?>){
134
		            showViewer(partObject, (IStructuredSelection) selection);
135
		            return;
136
		        }
137
		    }
138
		}
139
		if (selection instanceof IStructuredSelection){
140
			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
141
			if(structuredSelection.getFirstElement() instanceof TreeNode){
142
					if (((TreeNode)structuredSelection.getFirstElement()).getValue() instanceof SpecimenOrObservationBase){
143
				    structuredSelection = new StructuredSelection(((TreeNode)structuredSelection.getFirstElement()).getValue());
144
				    showViewer(partObject, structuredSelection);
145
				    return;
146
				}
147
			}
148
		}
149

    
150
		showEmptyPage();
151
	}
152

    
153
	/** {@inheritDoc} */
154
	@Override
155
	public void changed(Object object) {
156
	    viewer.expandToLevel(2);
157
	    viewer.refresh();
158
	    if(object != null){
159
	        StructuredSelection selection = new StructuredSelection(object);
160
	        viewer.setSelection(selection, true);
161
	    }
162
	    //TODO: should be replaced with the possibility to set views dirty
163
	    // when we move to Eclipse 4
164
	    // take a look at ISaveblePart
165
	    if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
166
	        ((BulkEditor) part).forceDirty();
167
	        IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
168
            ((BulkEditor) part).changed(selection.getFirstElement());
169

    
170
	    }
171
	    if (part instanceof E4PartWrapper){
172
	    	part = WorkbenchUtility.getE4WrappedPart(part);
173
	    	if (part instanceof IDirtyMarkable){
174
	    		 StructuredSelection selection = new StructuredSelection(object);
175
	    		((IDirtyMarkable)part).changed(selection.getFirstElement());
176
	    	}
177
	    }
178

    
179

    
180
	    super.changed(object);
181
	}
182

    
183
	/** {@inheritDoc} */
184
	@Override
185
	public Viewer getViewer() {
186
		return viewer;
187
	}
188

    
189
	@Override
190
    public boolean onComplete() {
191
		return true;
192
	}
193

    
194
	@Override
195
	protected String getViewName() {
196
		return Messages.MediaViewPart_MEDIA;
197
	}
198
}
(3-3/3)