Project

General

Profile

Download (5.45 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 org.eclipse.jface.action.GroupMarker;
14
import org.eclipse.jface.action.MenuManager;
15
import org.eclipse.jface.viewers.ISelection;
16
import org.eclipse.jface.viewers.IStructuredSelection;
17
import org.eclipse.jface.viewers.StructuredSelection;
18
import org.eclipse.jface.viewers.TreeNode;
19
import org.eclipse.jface.viewers.TreeViewer;
20
import org.eclipse.jface.viewers.Viewer;
21
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.swt.widgets.Control;
24
import org.eclipse.swt.widgets.Menu;
25
import org.eclipse.swt.widgets.Tree;
26
import org.eclipse.ui.IEditorInput;
27
import org.eclipse.ui.IEditorPart;
28
import org.eclipse.ui.IWorkbenchActionConstants;
29
import org.eclipse.ui.IWorkbenchPart;
30

    
31
import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
32
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
33
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
34
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
35
import eu.etaxonomy.taxeditor.model.AbstractUtility;
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

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

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

    
55

    
56
	private TreeViewer viewer;
57

    
58
	/*
59
	 * (non-Javadoc)
60
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite)
61
	 */
62
	/** {@inheritDoc} */
63
	@Override
64
	public void createViewer(Composite parent) {
65

    
66
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
67
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
68

    
69
		viewer.setContentProvider(new MediaContentProvider());
70
		viewer.setLabelProvider(new MediaLabelProvider());
71
		viewer.setAutoExpandLevel(2);
72

    
73
		// Propagate selection from viewer
74
		getSite().setSelectionProvider(viewer);
75

    
76
		// Add context menu to tree
77
		MenuManager menuMgr = new MenuManager();
78
		menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
79
		getSite().registerContextMenu(menuMgr, viewer);
80

    
81
		Control control = viewer.getControl();
82
		Menu menu = menuMgr.createContextMenu(control);
83
		control.setMenu(menu);
84

    
85
	}
86

    
87
	/* (non-Javadoc)
88
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
89
	 */
90
	/** {@inheritDoc} */
91
	@Override
92
	protected ISelection getInitialSelection() {
93
		if(getEditor() != null){
94
			return new StructuredSelection(getEditor().getEditorInput());
95
		}
96

    
97
		return super.getInitialSelection();
98
	}
99

    
100
	/** {@inheritDoc} */
101
	@Override
102
    protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
103
	    if(part==this){
104
	        return;
105
	    }
106
		if(AbstractUtility.getActiveEditor() == null){
107
			showEmptyPage();
108
			return;
109
		}
110

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

    
116
		if(part instanceof IPartContentHasMedia){
117
		    if(part instanceof MultiPageTaxonEditor){
118
		        IEditorInput input = ((IEditorPart) part).getEditorInput();
119
		        showViewer(part, new StructuredSelection(input));
120
		    }
121
		    else if(selection instanceof IStructuredSelection){
122
		    	Object firstElement = ((IStructuredSelection) selection).getFirstElement();
123
		        if(firstElement instanceof TreeNode){
124
		            showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue()));
125
		        }
126
		        else{
127
		            showViewer(part, (IStructuredSelection) selection);
128
		        }
129
		    }else{
130
		    	showEmptyPage();
131
		    }
132
		}
133
		else{
134
		    showEmptyPage();
135
		}
136
	}
137

    
138
	/** {@inheritDoc} */
139
	@Override
140
	public void changed(Object object) {
141
	    viewer.expandToLevel(2);
142
	    viewer.refresh();
143
	    if(object != null){
144
	        StructuredSelection selection = new StructuredSelection(object);
145
	        viewer.setSelection(selection, true);
146
	    }
147
	    //TODO: should be replaced with the possibility to set views dirty
148
	    // when we move to Eclipse 4
149
	    // take a look at ISaveblePart
150
	    if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
151
	        ((BulkEditor) part).forceDirty();
152
	    }
153
	    super.changed(object);
154
	}
155

    
156
	/** {@inheritDoc} */
157
	@Override
158
	public Viewer getViewer() {
159
		return viewer;
160
	}
161

    
162
	/**
163
	 * <p>onComplete</p>
164
	 *
165
	 * @return a boolean.
166
	 */
167
	@Override
168
    public boolean onComplete() {
169
		return true;
170
	}
171

    
172
    /* (non-Javadoc)
173
     * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent)
174
     */
175
    @Override
176
    public void onChange(CdmChangeEvent event) {
177
        // TODO Auto-generated method stub
178

    
179
    }
180
}
(3-3/3)