KickJava   Java API By Example, From Geeks To Geeks.

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


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

4 package com.nightlabs.ipanema.language;
5
6 import java.util.ArrayList JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.List JavaDoc;
9 import java.util.Locale JavaDoc;
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 /**
23  * This is an implementation of LanguageChooser showing all registered languages
24  * in a combo box and automatically selecting the one from Locale.getDefault().getLanguage()
25  *
26  * @author Marco Schulze - marco at nightlabs dot de
27  */

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 JavaDoc languages = new ArrayList JavaDoc();
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             // TODO We should load the languages only once into the client!
59
// They usually don't change...
60

61           String JavaDoc userLanguageID = Locale.getDefault().getLanguage();
62           int languageIdx = -1;
63           for (Iterator JavaDoc 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 JavaDoc("The user's language \""+userLanguageID+"\" is not registered in the server!");
73
74             combo.select(languageIdx);
75         } catch (RuntimeException JavaDoc e) {
76             ExceptionHandlerRegistry.asyncHandleException(e);
77             throw e;
78         } catch (Exception JavaDoc e) {
79             ExceptionHandlerRegistry.asyncHandleException(e);
80             throw new RuntimeException JavaDoc(e);
81         }
82     }
83
84     /**
85      * @see com.nightlabs.ipanema.language.LanguageChooser#getCurrentLanguage()
86      */

87     public Language getLanguage()
88     {
89         return (Language)languages.get(combo.getSelectionIndex());
90     }
91
92 }
93
Popular Tags