1 4 package com.nightlabs.ipanema.language; 5 6 import java.util.Iterator ; 7 import java.util.LinkedList ; 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 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 } 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 74 public void modifyText(ModifyEvent e) 75 { 76 storeText(); 77 78 if (modifyListeners == null) 79 return; 80 81 for (Iterator it = modifyListeners.iterator(); it.hasNext(); ) { 82 ((ModifyListener)it.next()).modifyText(e); 83 } 84 } 85 }); 86 } 87 88 private LinkedList modifyListeners = null; 89 90 public void addModifyListener(ModifyListener l) { 91 if (modifyListeners == null) 92 modifyListeners = new LinkedList (); 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 105 public String 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 orgText = ""; 125 126 private void loadText() 127 { 128 String 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 147 private void storeText() 148 { 149 if (i18nText == null) 150 return; 151 152 String newText = text.getText(); 153 if (!newText.equals(orgText)) { 154 i18nText.setText(textLanguage.getLanguageID(), newText); 155 orgText = newText; 156 } 157 } 158 159 } 160 | Popular Tags |