#4389
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / media / MediaViewPart.java
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.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.IEditorInput;
26 import org.eclipse.ui.IEditorPart;
27 import org.eclipse.ui.IWorkbenchActionConstants;
28 import org.eclipse.ui.IWorkbenchPart;
29
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.model.AbstractUtility;
34 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
35 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
36 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
37 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
38
39 /**
40 * <p>MediaViewPart class.</p>
41 *
42 * @author n.hoffmann
43 * @created Jun 15, 2010
44 * @version 1.0
45 */
46 public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
47
48 /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.medi"{trunked}</code> */
49 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.media";
50
51 private TreeViewer viewer;
52
53 /*
54 * (non-Javadoc)
55 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite)
56 */
57 /** {@inheritDoc} */
58 @Override
59 public void createViewer(Composite parent) {
60
61 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
62 | SWT.V_SCROLL | SWT.FULL_SELECTION));
63
64 viewer.setContentProvider(new MediaContentProvider());
65 viewer.setLabelProvider(new MediaLabelProvider());
66 viewer.setAutoExpandLevel(2);
67
68 // Propagate selection from viewer
69 getSite().setSelectionProvider(viewer);
70
71 // Add context menu to tree
72 MenuManager menuMgr = new MenuManager();
73 menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
74 getSite().registerContextMenu(menuMgr, viewer);
75
76 Control control = viewer.getControl();
77 Menu menu = menuMgr.createContextMenu(control);
78 control.setMenu(menu);
79
80 }
81
82 /* (non-Javadoc)
83 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
84 */
85 /** {@inheritDoc} */
86 @Override
87 protected ISelection getInitialSelection() {
88 if(getEditor() != null){
89 return new StructuredSelection(getEditor().getEditorInput());
90 }
91
92 return super.getInitialSelection();
93 }
94
95 /** {@inheritDoc} */
96 @Override
97 protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
98 if(AbstractUtility.getActiveEditor() == null){
99 showEmptyPage();
100 return;
101 }
102
103 if(part instanceof MultiPageTaxonEditor){
104 IEditorInput input = ((IEditorPart) part).getEditorInput();
105 showViewer(part, new StructuredSelection(input));
106 }
107
108 else if(part instanceof IPartContentHasMedia && selection instanceof IStructuredSelection){
109 showViewer(part, (IStructuredSelection) selection);
110 }
111 }
112
113 /** {@inheritDoc} */
114 @Override
115 public void changed(Object object) {
116 viewer.refresh();
117 //TODO: should be replaced with the possibility to set views dirty
118 // when we move to Eclipse 4
119 if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
120 ((BulkEditor) part).forceDirty();
121 }
122 super.changed(object);
123 }
124
125 /** {@inheritDoc} */
126 @Override
127 public Viewer getViewer() {
128 return viewer;
129 }
130
131 /**
132 * <p>onComplete</p>
133 *
134 * @return a boolean.
135 */
136 @Override
137 public boolean onComplete() {
138 return true;
139 }
140 }