3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.ui
.forms
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.List
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
20 import org
.eclipse
.jface
.wizard
.WizardDialog
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.events
.SelectionAdapter
;
23 import org
.eclipse
.swt
.events
.SelectionEvent
;
24 import org
.eclipse
.swt
.events
.SelectionListener
;
25 import org
.eclipse
.swt
.widgets
.Button
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
28 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
29 import eu
.etaxonomy
.cdm
.model
.common
.MultilanguageTextHelper
;
30 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
31 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
32 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
.TermComboType
;
33 import eu
.etaxonomy
.taxeditor
.ui
.term
.EmptyComboElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.translation
.TranslationWizard
;
37 * <p>MultilanguageTextElement class.</p>
40 * @created Sep 29, 2010
43 public class MultilanguageTextElement
extends AbstractCdmFormElement
implements SelectionListener
{
45 private class OpenTranslationWizard
extends SelectionAdapter
{
46 private Map
<Language
, LanguageString
> multilanguageText
;
48 public OpenTranslationWizard(Map
<Language
, LanguageString
> multilanguageText
){
50 this.multilanguageText
= multilanguageText
;
54 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
57 public void widgetSelected(SelectionEvent e
) {
58 TranslationWizard wizard
= new TranslationWizard(multilanguageText
);
59 WizardDialog dialog
= new WizardDialog(getLayoutComposite().getShell(), wizard
);
61 if (dialog
.open() == IStatus
.OK
){
62 combo_language
.setTerms(getLanguages());
70 private EmptyComboElement
<Language
> combo_language
;
72 private LanguageStringWithLabelElement element_languageString
;
74 private Button button
;
78 private Map
<Language
, LanguageString
> multilanguageText
;
81 * <p>Constructor for MultilanguageTextElement.</p>
83 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
84 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
85 * @param labelString a {@link java.lang.String} object.
86 * @param multilanguageText a {@link java.util.Map} object.
87 * @param textHeight a {@link java.lang.Integer} object.
90 public MultilanguageTextElement(CdmFormFactory formFactory
,
91 ICdmFormElement formElement
, String labelString
, Map
<Language
, LanguageString
> multilanguageText
, Integer textHeight
, int style
) {
92 super(formFactory
, formElement
);
94 formFactory
.addPropertyChangeListener(this);
96 element_languageString
= formFactory
.createLanguageStringWithLabelElement(formElement
, labelString
, null, textHeight
, style
);
98 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
99 combo_language
= (EmptyComboElement
<Language
>) formFactory
100 .createTermComboElement(TermComboType
.EMPTY
, formElement
,
102 combo_language
.addSelectionListener(this);
103 addControl(formFactory
.createLabel(getLayoutComposite(), ""));
104 button
= formFactory
.createButton(getLayoutComposite(),
105 "Open In Translation Editor", SWT
.PUSH
);
107 button
.setLayoutData(CdmFormFactory
.RIGHT());
108 button
.addSelectionListener(new OpenTranslationWizard(
111 setMultilanguageText(multilanguageText
);
115 * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
119 public void setSelected(boolean selected
) {
123 private List
<Language
> getLanguages(){
125 ArrayList
<Language
> languageList
= new ArrayList
<Language
>(getMultilanguageText().keySet());
133 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
137 public void widgetSelected(SelectionEvent e
) {
138 Language selectedLanguage
= combo_language
.getSelection();
139 if(selectedLanguage
!= null){
140 LanguageString selectedLanguageString
= getMultilanguageText().get(selectedLanguage
);
142 element_languageString
.setLanguageString(selectedLanguageString
);
147 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
151 public void widgetDefaultSelected(SelectionEvent e
) {}
154 * <p>Setter for the field <code>multilanguageText</code>.</p>
156 * @param multilanguageText the multilanguageText to set
158 public void setMultilanguageText(Map
<Language
, LanguageString
> multilanguageText
) {
159 this.multilanguageText
= multilanguageText
;
161 if(multilanguageText
!= null){
162 if(multilanguageText
.isEmpty()){
163 multilanguageText
.put(CdmStore
.getDefaultLanguage(), LanguageString
.NewInstance("", CdmStore
.getDefaultLanguage()));
165 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
166 combo_language
.setTerms(getLanguages());
175 private void updateControls() {
176 LanguageString preferredLanguageString
= MultilanguageTextHelper
.getPreferredLanguageString(getMultilanguageText(), Arrays
.asList(new Language
[]{CdmStore
.getDefaultLanguage()}));
178 element_languageString
.setLanguageString(preferredLanguageString
);
179 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
180 combo_language
.setSelection(preferredLanguageString
.getLanguage());
185 * <p>Getter for the field <code>multilanguageText</code>.</p>
187 * @return the multilanguageText
189 public Map
<Language
, LanguageString
> getMultilanguageText() {
190 return multilanguageText
;
194 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
198 public void propertyChange(PropertyChangeEvent event
) {
202 Object eventSource
= event
.getSource();
203 if(eventSource
== element_languageString
){
204 LanguageString languageString
= ((LanguageStringWithLabelElement
) eventSource
).getLanguageString();
205 multilanguageText
.put(languageString
.getLanguage(), languageString
);