2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.view
.media
.e4
;
12 import javax
.annotation
.PostConstruct
;
13 import javax
.inject
.Inject
;
14 import javax
.inject
.Named
;
16 import org
.eclipse
.e4
.core
.di
.annotations
.Optional
;
17 import org
.eclipse
.e4
.ui
.model
.application
.ui
.basic
.MPart
;
18 import org
.eclipse
.e4
.ui
.services
.EMenuService
;
19 import org
.eclipse
.e4
.ui
.services
.IServiceConstants
;
20 import org
.eclipse
.e4
.ui
.workbench
.modeling
.ESelectionService
;
21 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
23 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
24 import org
.eclipse
.jface
.viewers
.TreeNode
;
25 import org
.eclipse
.jface
.viewers
.TreeViewer
;
26 import org
.eclipse
.jface
.viewers
.Viewer
;
27 import org
.eclipse
.swt
.SWT
;
28 import org
.eclipse
.swt
.widgets
.Composite
;
29 import org
.eclipse
.swt
.widgets
.Tree
;
31 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
32 import eu
.etaxonomy
.cdm
.model
.description
.IDescribable
;
33 import eu
.etaxonomy
.taxeditor
.editor
.MultiPageTaxonEditor
;
34 import eu
.etaxonomy
.taxeditor
.editor
.l10n
.Messages
;
35 import eu
.etaxonomy
.taxeditor
.editor
.view
.media
.MediaContentProvider
;
36 import eu
.etaxonomy
.taxeditor
.editor
.view
.media
.MediaLabelProvider
;
37 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
38 import eu
.etaxonomy
.taxeditor
.model
.IPartContentHasDetails
;
39 import eu
.etaxonomy
.taxeditor
.model
.IPartContentHasMedia
;
40 import eu
.etaxonomy
.taxeditor
.model
.IPartContentHasSupplementalData
;
41 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
42 import eu
.etaxonomy
.taxeditor
.view
.e4
.AbstractCdmEditorPartE4
;
50 public class MediaViewPartE4
extends AbstractCdmEditorPartE4
51 implements IPartContentHasDetails
, IPartContentHasSupplementalData
, IPostOperationEnabled
{
53 private ISelectionChangedListener selectionChangedListener
;
55 private TreeViewer viewer
;
58 private ESelectionService selService
;
61 public void create(Composite parent
, EMenuService menuService
) {
63 viewer
= new TreeViewer(new Tree(parent
, SWT
.MULTI
| SWT
.H_SCROLL
64 | SWT
.V_SCROLL
| SWT
.FULL_SELECTION
));
66 viewer
.setContentProvider(new MediaContentProvider());
67 viewer
.setLabelProvider(new MediaLabelProvider());
68 viewer
.setAutoExpandLevel(2);
70 // Propagate selection from viewer
71 selectionChangedListener
= (event
-> selService
.setSelection(AbstractUtility
.getElementsFromSelectionChangedEvent(event
)));
72 viewer
.addSelectionChangedListener(selectionChangedListener
);
75 menuService
.registerContextMenu(viewer
.getControl(), "eu.etaxonomy.taxeditor.editor.popupmenu.mediaview");
80 public void selectionChanged(
81 @Named(IServiceConstants
.ACTIVE_SELECTION
)Object selection
,
82 @Named(IServiceConstants
.ACTIVE_PART
)MPart activePart
,
84 if(activePart
==thisPart
){
88 Object partObject
= createPartObject(activePart
);
90 if(partObject
instanceof IPartContentHasMedia
&& ((IPartContentHasMedia
) partObject
).canAttachMedia()){
91 IStructuredSelection structuredSelection
= createSelection(selection
);
92 if(structuredSelection
==null || structuredSelection
.isEmpty()){
98 // if (partObject instanceof DetailsViewPart || partObject instanceof SupplementalDataViewPart
99 // || partObject instanceof DescriptiveViewPart) {
100 // // do not show empty page as these views are also used to edit the
101 // // description selected in this view
105 Object firstElement
= structuredSelection
.getFirstElement();
106 if (partObject
instanceof MultiPageTaxonEditor
){
107 if (firstElement
!= ((MultiPageTaxonEditor
)partObject
).getTaxon()){
112 if(firstElement
instanceof TreeNode
){
113 showViewer(new StructuredSelection(((TreeNode
) firstElement
).getValue()), activePart
, viewer
);
116 else if(firstElement
!=null
117 && firstElement
instanceof IDescribable
<?
>){
118 showViewer((IStructuredSelection
) selection
, activePart
, viewer
);
128 public void changed(Object object
) {
129 viewer
.expandToLevel(2);
132 StructuredSelection selection
= new StructuredSelection(object
);
133 viewer
.setSelection(selection
, true);
135 // //TODO: should be replaced with the possibility to set views dirty
136 // // when we move to Eclipse 4
137 // // take a look at ISaveblePart
138 // if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
139 // ((BulkEditor) part).forceDirty();
140 // IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
141 // ((BulkEditor) part).changed(selection.getFirstElement());
144 // if (part instanceof E4PartWrapper){
145 // part = WorkbenchUtility.getE4WrappedPart(part);
146 // if (part instanceof IDirtyMarkable){
147 // StructuredSelection selection = new StructuredSelection(object);
148 // ((IDirtyMarkable)part).changed(selection.getFirstElement());
152 super.changed(object
);
156 protected String
getViewName() {
157 return Messages
.MediaViewPart_MEDIA
;
160 public Viewer
getViewer() {
168 public boolean postOperation(CdmBase objectAffectedByOperation
) {
176 public boolean onComplete() {