Add selection listener to media detail element to allow showing
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaMetaElement.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.ui.section.media;
5
6 import org.eclipse.jface.action.IAction;
7 import org.eclipse.swt.events.SelectionAdapter;
8 import org.eclipse.swt.events.SelectionEvent;
9 import org.eclipse.swt.events.SelectionListener;
10 import org.eclipse.swt.widgets.Button;
11
12 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
13 import eu.etaxonomy.cdm.model.agent.AgentBase;
14 import eu.etaxonomy.cdm.model.common.LanguageString;
15 import eu.etaxonomy.cdm.model.media.Media;
16 import eu.etaxonomy.taxeditor.model.AbstractUtility;
17 import eu.etaxonomy.taxeditor.model.ImageResources;
18 import eu.etaxonomy.taxeditor.store.CdmStore;
19 import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
20 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
21 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
22 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
23 import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
24 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
25 import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
26 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
27 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
28 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
29
30 /**
31 * @author n.hoffmann
32 * @created Nov 17, 2009
33 * @version 1.0
34 */
35 public class MediaMetaElement extends AbstractEntityCollectionElement<Media> implements ISelectableElement, ITogglableMediaElement{
36
37 private EntitySelectionElement<AgentBase> selection_artist;
38 private LanguageStringWithLabelElement text_description;
39 private LanguageStringWithLabelElement text_title;
40 private MediaDetailElement mediaDetailElement;
41 private SelectionArbitrator selectionArbitrator;
42
43 public MediaMetaElement(CdmFormFactory cdmFormFactory,
44 AbstractFormSection<?> formElement, Media element,
45 SelectionListener removeListener, boolean isChoosableEntity, int style) {
46 super(cdmFormFactory, formElement, element, removeListener, isChoosableEntity, null, style);
47 //make element selectable
48 if(cdmFormFactory.getSelectionProvider() != null){
49 selectionArbitrator = cdmFormFactory.createSelectionArbitrator(this);
50 }
51 }
52
53 /** {@inheritDoc} */
54 @Override
55 public void createControls(ICdmFormElement element, int style) {
56 final IAction switchAction = MediaViewSwitch.createSwitch(MediaMetaElement.this);
57 Button btnToggleAdvancedMediaView = new Button(getBox(), style);
58 btnToggleAdvancedMediaView.setToolTipText(switchAction.getText());
59 btnToggleAdvancedMediaView.setImage(ImageResources.getImage(ImageResources.SWITCH_VIEW_TYPE));
60 btnToggleAdvancedMediaView.addSelectionListener(new SelectionAdapter() {
61 @Override
62 public void widgetSelected(SelectionEvent e) {
63 switchAction.run();
64 }
65 });
66 text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
67 selection_artist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), element, "Artist", null, EntitySelectionElement.ALL, style);
68 text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, true, style);
69 mediaDetailElement = formFactory.createMediaDetailElement(element);
70 }
71
72 /** {@inheritDoc} */
73 @Override
74 public void setEntity(Media element) {
75 this.entity = element;
76 mediaDetailElement.setEntity(element);
77
78 selection_artist.setEntity((AgentBase<?>) HibernateProxyHelper
79 .deproxy(element.getArtist()));
80
81 text_description.setLanguageString(element.getDescription(CdmStore
82 .getDefaultLanguage()));
83
84 LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
85
86 if (title == null) {
87 title = LanguageString.NewInstance("", CdmStore.getDefaultLanguage());
88 }
89
90 text_title.setLanguageString(title);
91 }
92
93 @Override
94 protected Media selectFromDialog() {
95 return MediaSelectionDialog.select(AbstractUtility.getShell(), null, null);
96 }
97
98 @Override
99 public void toggleAdvancedMediaView(){
100 mediaDetailElement.toggleAdvancedMediaView();
101 }
102
103 /** {@inheritDoc} */
104 @Override
105 public void handleEvent(Object eventSource) {
106 if (eventSource == selection_artist) {
107 getEntity().setArtist(selection_artist.getSelection());
108 } else if (eventSource == text_description) {
109 getEntity().addDescription(text_description.getLanguageString());
110 } else if (eventSource == text_title) {
111 getEntity().putTitle(text_title.getLanguageString());
112 if (getParentElement() instanceof AbstractCdmDetailSection) {
113 ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
114 }
115 }
116 }
117
118 @Override
119 public SelectionArbitrator getSelectionArbitrator() {
120 return selectionArbitrator;
121 }
122
123 }