1 4 package com.nightlabs.ipanema.language; 5 6 import java.util.ArrayList ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 import java.util.Locale ; 10 11 import org.apache.log4j.Logger; 12 import org.eclipse.swt.SWT; 13 import org.eclipse.swt.events.SelectionAdapter; 14 import org.eclipse.swt.events.SelectionEvent; 15 import org.eclipse.swt.layout.GridData; 16 import org.eclipse.swt.widgets.Combo; 17 import org.eclipse.swt.widgets.Composite; 18 19 import com.nightlabs.ipanema.language.Language; 20 import com.nightlabs.rcp.exceptionhandler.ExceptionHandlerRegistry; 21 22 28 public class LanguageChooserCombo 29 extends AbstractLanguageChooser 30 { 31 public static final Logger LOGGER = Logger.getLogger(LanguageChooserCombo.class); 32 33 private Combo combo; 34 private List languages = new ArrayList (); 35 36 public LanguageChooserCombo(Composite parent) 37 { 38 this(parent, true); 39 } 40 41 public LanguageChooserCombo(Composite parent, boolean grabExcessHorizontalSpace) 42 { 43 super(parent, SWT.NONE, true); 44 ((GridData)getLayoutData()).grabExcessVerticalSpace = false; 45 ((GridData)getLayoutData()).grabExcessHorizontalSpace = grabExcessHorizontalSpace; 46 combo = new Combo(this, SWT.BORDER | SWT.READ_ONLY); 47 combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 48 combo.addSelectionListener( 49 new SelectionAdapter() { 50 public void widgetSelected(SelectionEvent selectionEvent) 51 { 52 LOGGER.debug("new language: "+getLanguage().getLanguageID()); 53 fireLanguageChangeEvent(); 54 } 55 }); 56 57 try { 58 61 String userLanguageID = Locale.getDefault().getLanguage(); 62 int languageIdx = -1; 63 for (Iterator it = LanguageCache.sharedInstance().getLanguages().iterator(); it.hasNext(); ) { 64 Language language = (Language) it.next(); 65 if (userLanguageID.equals(language.getLanguageID())) 66 languageIdx = languages.size(); 67 languages.add(language); 68 combo.add(language.getNativeName()); 69 } 70 71 if (languageIdx < 0) 72 throw new IllegalStateException ("The user's language \""+userLanguageID+"\" is not registered in the server!"); 73 74 combo.select(languageIdx); 75 } catch (RuntimeException e) { 76 ExceptionHandlerRegistry.asyncHandleException(e); 77 throw e; 78 } catch (Exception e) { 79 ExceptionHandlerRegistry.asyncHandleException(e); 80 throw new RuntimeException (e); 81 } 82 } 83 84 87 public Language getLanguage() 88 { 89 return (Language)languages.get(combo.getSelectionIndex()); 90 } 91 92 } 93 | Popular Tags |