ref #6190 removing svn property place holder in first line of code - java files
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / media / MediaViewPart.java
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
28 import eu.etaxonomy.cdm.model.description.IDescribable;
29 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
30 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
31 import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
32 import eu.etaxonomy.taxeditor.model.AbstractUtility;
33 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
34 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
35 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
36 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
37 import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
38 import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
39
40 /**
41 * @author n.hoffmann
42 * @created Jun 15, 2010
43 * @version 1.0
44 */
45 public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
46
47 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.media";
48
49
50 private TreeViewer viewer;
51
52 /** {@inheritDoc} */
53 @Override
54 public void createViewer(Composite parent) {
55
56 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
57 | SWT.V_SCROLL | SWT.FULL_SELECTION));
58
59 viewer.setContentProvider(new MediaContentProvider());
60 viewer.setLabelProvider(new MediaLabelProvider());
61 viewer.setAutoExpandLevel(2);
62
63 // Propagate selection from viewer
64 getSite().setSelectionProvider(viewer);
65
66 // Add context menu to tree
67 MenuManager menuMgr = new MenuManager();
68 menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
69 getSite().registerContextMenu(menuMgr, viewer);
70
71 Control control = viewer.getControl();
72 Menu menu = menuMgr.createContextMenu(control);
73 control.setMenu(menu);
74
75 }
76
77 /** {@inheritDoc} */
78 @Override
79 protected ISelection getInitialSelection() {
80 if(getEditor() != null){
81 return new StructuredSelection(getEditor().getEditorInput());
82 }
83
84 return super.getInitialSelection();
85 }
86
87 /** {@inheritDoc} */
88 @Override
89 protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
90 if(part==this){
91 return;
92 }
93 if(AbstractUtility.getActiveEditor() == null){
94 showEmptyPage();
95 return;
96 }
97
98 if (part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart
99 || part instanceof DescriptiveViewPart) {
100 // do not show empty page as these views are also used to edit the
101 // description selected in this view
102 return;
103 }
104
105 if(part instanceof IPartContentHasMedia && ((IPartContentHasMedia) part).canAttachMedia()){
106 if(selection instanceof IStructuredSelection){
107 Object firstElement = ((IStructuredSelection) selection).getFirstElement();
108 if(firstElement instanceof TreeNode){
109 showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue()));
110 return;
111 }
112 else if(firstElement!=null
113 && firstElement instanceof IDescribable<?>){
114 showViewer(part, (IStructuredSelection) selection);
115 return;
116 }
117 }
118 }
119 showEmptyPage();
120 }
121
122 /** {@inheritDoc} */
123 @Override
124 public void changed(Object object) {
125 viewer.expandToLevel(2);
126 viewer.refresh();
127 if(object != null){
128 StructuredSelection selection = new StructuredSelection(object);
129 viewer.setSelection(selection, true);
130 }
131 //TODO: should be replaced with the possibility to set views dirty
132 // when we move to Eclipse 4
133 // take a look at ISaveblePart
134 if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
135 ((BulkEditor) part).forceDirty();
136 IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
137 ((BulkEditor) part).changed(selection.getFirstElement());
138
139 }
140 super.changed(object);
141 }
142
143 /** {@inheritDoc} */
144 @Override
145 public Viewer getViewer() {
146 return viewer;
147 }
148
149 @Override
150 public boolean onComplete() {
151 return true;
152 }
153
154 @Override
155 protected String getViewName() {
156 return "Media";
157 }
158 }