KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > language > I18nTextEditor


1 /*
2  * Created on Jan 6, 2005
3  */

4 package com.nightlabs.ipanema.language;
5
6 import java.util.Iterator JavaDoc;
7 import java.util.LinkedList JavaDoc;
8
9 import org.eclipse.swt.SWT;
10 import org.eclipse.swt.events.FocusAdapter;
11 import org.eclipse.swt.events.FocusEvent;
12 import org.eclipse.swt.events.ModifyEvent;
13 import org.eclipse.swt.events.ModifyListener;
14 import org.eclipse.swt.layout.GridData;
15 import org.eclipse.swt.layout.GridLayout;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Text;
18
19 import com.nightlabs.i18n.I18nText;
20 import com.nightlabs.ipanema.language.Language;
21 import com.nightlabs.rcp.composite.TightWrapperComposite;
22
23 /**
24  * @author Marco Schulze - marco at nightlabs dot de
25  */

26 public class I18nTextEditor extends TightWrapperComposite
27 {
28     private I18nText i18nText;
29     private LanguageChooser languageChooser;
30     private Language textLanguage;
31     private Text text;
32
33     public I18nTextEditor(Composite parent)
34     {
35         this(parent, null);
36     }
37
38     public I18nTextEditor(Composite parent, LanguageChooser languageChooser)
39     {
40         super(parent, SWT.NONE, true);
41
42         if (languageChooser == null) {
43             ((GridLayout)getLayout()).numColumns = 2;
44             languageChooser = new LanguageChooserCombo(this, false);
45             // TODO On the long run, the I18nTextEditor itself should be a combobox itself
46
// in this mode, showing the language flag on the left.
47
}
48
49         this.languageChooser = languageChooser;
50
51         ((GridData)getLayoutData()).grabExcessVerticalSpace = false;
52
53         text = new Text(this, SWT.BORDER | SWT.READ_ONLY);
54         text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
55         text.addFocusListener(new FocusAdapter() {
56             public void focusLost(FocusEvent arg0)
57             {
58                 storeText();
59             }
60         });
61         
62         languageChooser.addLanguageChangeListener(new LanguageChangeListener() {
63             public void languageChanged(LanguageChangeEvent event)
64             {
65                 storeText();
66                 loadText();
67             }
68         });
69
70         text.addModifyListener(new ModifyListener() {
71             /**
72              * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
73              */

74             public void modifyText(ModifyEvent e)
75             {
76                 storeText();
77
78                 if (modifyListeners == null)
79                     return;
80
81                 for (Iterator JavaDoc it = modifyListeners.iterator(); it.hasNext(); ) {
82                     ((ModifyListener)it.next()).modifyText(e);
83                 }
84             }
85         });
86     }
87
88     private LinkedList JavaDoc modifyListeners = null;
89
90     public void addModifyListener(ModifyListener l) {
91         if (modifyListeners == null)
92             modifyListeners = new LinkedList JavaDoc();
93
94         modifyListeners.add(l);
95     }
96     public void removeModifyListener(ModifyListener l) {
97         if (modifyListeners == null)
98             return;
99
100         modifyListeners.remove(l);
101     }
102     /**
103      * @return Returns the currently edited text (the one that is visible).
104      */

105     public String JavaDoc getEditText()
106     {
107         return text.getText();
108     }
109
110     public I18nText getI18nText()
111     {
112         storeText();
113         return i18nText;
114     }
115
116     public void setI18nText(I18nText newI18nText)
117     {
118         storeText();
119         i18nText = newI18nText;
120         loadText();
121         text.setEditable(i18nText != null);
122     }
123
124     private String JavaDoc orgText = "";
125
126     private void loadText()
127     {
128         String JavaDoc txt = null;
129         
130         if (i18nText != null) {
131             textLanguage = languageChooser.getLanguage();
132             txt = i18nText.getText(textLanguage.getLanguageID());
133         }
134         if (txt == null) txt = "";
135         text.setText(txt);
136         orgText = txt;
137     }
138
139     /**
140      * This method stores the currently edited text into the "backend" {@link I18nText}
141      * object. This method is automatically called whenever the <tt>I18nTextEditor</tt>
142      * is changed by the user. This means, the I18nText is kept synchronous with the
143      * displayed and edited text.
144      * <p>
145      * This method has been changed from public to private.
146      */

147     private void storeText()
148     {
149         if (i18nText == null)
150             return;
151
152         String JavaDoc newText = text.getText();
153         if (!newText.equals(orgText)) {
154             i18nText.setText(textLanguage.getLanguageID(), newText);
155             orgText = newText;
156         }
157     }
158
159 }
160
Popular Tags