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
;
38 * MultilanguageTextElement class.
42 * @created Sep 29, 2010
45 public class MultilanguageTextElement
extends AbstractCdmFormElement
implements
48 private class OpenTranslationWizard
extends SelectionAdapter
{
49 private final Map
<Language
, LanguageString
> multilanguageText
;
51 public OpenTranslationWizard(
52 Map
<Language
, LanguageString
> multilanguageText
) {
54 this.multilanguageText
= multilanguageText
;
61 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
62 * .swt.events.SelectionEvent)
65 public void widgetSelected(SelectionEvent e
) {
66 TranslationWizard wizard
= new TranslationWizard(multilanguageText
);
67 WizardDialog dialog
= new WizardDialog(getLayoutComposite()
70 if (dialog
.open() == IStatus
.OK
) {
71 combo_language
.setTerms(getLanguages());
78 private EmptyComboElement
<Language
> combo_language
;
80 protected LanguageStringWithLabelElement element_languageString
;
82 private Button button
;
84 private Map
<Language
, LanguageString
> multilanguageText
;
88 * Constructor for MultilanguageTextElement.
92 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
95 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
98 * a {@link java.lang.String} object.
99 * @param multilanguageText
100 * a {@link java.util.Map} object.
102 * a {@link java.lang.Integer} object.
106 public MultilanguageTextElement(CdmFormFactory formFactory
,
107 ICdmFormElement formElement
, String labelString
,
108 Map
<Language
, LanguageString
> multilanguageText
,
109 Integer textHeight
, int style
) {
110 super(formFactory
, formElement
);
112 formFactory
.addPropertyChangeListener(this);
114 element_languageString
= formFactory
115 .createLanguageStringWithLabelElement(formElement
, labelString
,
116 null, textHeight
, style
);
118 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
119 combo_language
= (EmptyComboElement
<Language
>) formFactory
120 .createTermComboElement(TermComboType
.EMPTY
, formElement
,
122 combo_language
.addSelectionListener(this);
123 addControl(formFactory
.createLabel(getLayoutComposite(), ""));
124 button
= formFactory
.createButton(getLayoutComposite(),
125 "Open In Translation Editor", SWT
.PUSH
);
127 button
.setLayoutData(CdmFormFactory
.RIGHT());
128 button
.addSelectionListener(new OpenTranslationWizard(
131 setMultilanguageText(multilanguageText
);
134 private List
<Language
> getLanguages() {
136 ArrayList
<Language
> languageList
= new ArrayList
<Language
>(
137 getMultilanguageText().keySet());
148 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
149 * .events.SelectionEvent)
153 public void widgetSelected(SelectionEvent e
) {
154 Language selectedLanguage
= combo_language
.getSelection();
155 if (selectedLanguage
!= null) {
156 LanguageString selectedLanguageString
= getMultilanguageText().get(
159 element_languageString
.setLanguageString(selectedLanguageString
);
167 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
168 * .swt.events.SelectionEvent)
172 public void widgetDefaultSelected(SelectionEvent e
) {
177 * Setter for the field <code>multilanguageText</code>.
180 * @param multilanguageText
181 * the multilanguageText to set
183 public void setMultilanguageText(
184 Map
<Language
, LanguageString
> multilanguageText
) {
185 this.multilanguageText
= multilanguageText
;
187 if (multilanguageText
!= null) {
188 if (multilanguageText
.isEmpty()) {
189 multilanguageText
.put(
190 CdmStore
.getDefaultLanguage(),
191 LanguageString
.NewInstance("",
192 CdmStore
.getDefaultLanguage()));
194 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
195 combo_language
.setTerms(getLanguages());
204 private void updateControls() {
205 LanguageString preferredLanguageString
= MultilanguageTextHelper
206 .getPreferredLanguageString(getMultilanguageText(),
207 Arrays
.asList(new Language
[] { CdmStore
208 .getDefaultLanguage() }));
210 element_languageString
.setLanguageString(preferredLanguageString
);
211 if (PreferencesUtil
.isMultilanguageTextEditingCapability()) {
212 combo_language
.setSelection(preferredLanguageString
.getLanguage());
218 * Getter for the field <code>multilanguageText</code>.
221 * @return the multilanguageText
223 public Map
<Language
, LanguageString
> getMultilanguageText() {
224 return multilanguageText
;
231 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
232 * .eclipse.jface.util.PropertyChangeEvent)
236 public void propertyChange(PropertyChangeEvent event
) {
240 Object eventSource
= event
.getSource();
241 if (eventSource
== element_languageString
) {
242 LanguageString languageString
= ((LanguageStringWithLabelElement
) eventSource
)
243 .getLanguageString();
244 multilanguageText
.put(languageString
.getLanguage(), languageString
);
245 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
));