Changeset 2553 in josm for trunk


Ignore:
Timestamp:
2009-11-30T12:55:02+01:00 (15 years ago)
Author:
Gubaer
Message:

fixed #4046: JOSM language changes to Standard

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java

    r2535 r2553  
    1414
    1515import javax.swing.Box;
     16import javax.swing.DefaultComboBoxModel;
    1617import javax.swing.DefaultListCellRenderer;
    1718import javax.swing.JComboBox;
     
    4041    }
    4142
    42     /**
    43      * ComboBox with all available Translations
    44      */
     43    /** the combo box with the available locales */
    4544    private JComboBox langCombo;
     45    /** the model for the combo box */
     46    private LanguageComboBoxModel model;
     47    /** true, if the available translations have been loaded; false otherwise */
    4648    private boolean translationsLoaded = false;
    4749
    4850    public void addGui(final PreferenceDialog gui) {
    49         //langCombo = new JComboBox(I18n.getAvailableTranslations());
    50         langCombo = new JComboBox(new Locale[0]);
    51 
    52         final ListCellRenderer oldRenderer = langCombo.getRenderer();
    53         langCombo.setRenderer(new DefaultListCellRenderer() {
    54             @Override
    55             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
    56                     boolean cellHasFocus) {
    57                 Locale l = (Locale) value;
    58                 return oldRenderer.getListCellRendererComponent(list,
    59                         l == null ? tr("Default (Auto determined)") : l.getDisplayName(),
    60                                 index, isSelected, cellHasFocus);
    61             }
    62         });
     51        model = new LanguageComboBoxModel();
     52        langCombo = new JComboBox(model);
     53        langCombo.setRenderer(new LanguageCellRenderer(langCombo.getRenderer()));
    6354
    6455        LafPreference lafPreference = gui.getSetting(LafPreference.class);
     
    8677
    8778    public boolean ok() {
     79        if (!translationsLoaded)
     80            // keep the current language, don't update preferences
     81            return true;
    8882        if(langCombo.getSelectedItem() == null)
    8983            return Main.pref.put("language", null);
     
    9387    }
    9488
     89    /**
     90     * Load available translations if not loaded yet.
     91     */
    9592    public void initiallyLoadAvailableTranslations() {
    9693        if (!translationsLoaded) {
     
    10097    }
    10198
     99    /**
     100     * Asynchronously loads available translations
     101     *
     102     */
    102103    protected void reloadAvailableTranslations() {
    103104        Main.worker.submit(new AvailableTranslationsLoader());
     
    126127            Runnable r = new Runnable() {
    127128                public void run() {
    128                     langCombo.removeAll();
    129                     langCombo.addItem(null); // the default enry
    130                     for (Locale locale : locales) {
    131                         langCombo.addItem(locale);
    132                     }
    133                     String ln = Main.pref.get("language");
    134                     langCombo.setSelectedIndex(0);
    135                     if (ln != null) {
    136                         for (int i = 1; i < langCombo.getItemCount(); ++i) {
    137                             if (((Locale) langCombo.getItemAt(i)).toString().equals(ln)) {
    138                                 langCombo.setSelectedIndex(i);
    139                                 break;
    140                             }
    141                         }
    142                     }
     129                    model.setAvailableLocales(locales);
     130                    model.selectLanguage(Main.pref.get("language"));
    143131                }
    144132            };
     
    155143        protected void finish() {}
    156144    }
     145
     146    private static class LanguageComboBoxModel extends DefaultComboBoxModel {
     147        private final List<Locale> data = new ArrayList<Locale>();
     148
     149        public LanguageComboBoxModel() {}
     150
     151        public void setAvailableLocales(List<Locale> locales) {
     152            data.clear();
     153            if (locales != null) {
     154                data.add(null); // the default locale
     155                data.addAll(locales);
     156            }
     157            fireContentsChanged(this, 0, getSize());
     158        }
     159
     160        public void selectLanguage(String language) {
     161            setSelectedItem(null);
     162            if (language != null) {
     163                for (Locale locale: data) {
     164                    if (locale == null) {
     165                        continue;
     166                    }
     167                    if (locale.toString().equals(language)) {
     168                        setSelectedItem(locale);
     169                        return;
     170                    }
     171                }
     172            }
     173        }
     174
     175        @Override
     176        public Object getElementAt(int index) {
     177            return data.get(index);
     178        }
     179
     180        @Override
     181        public int getSize() {
     182            return data.size();
     183        }
     184    }
     185
     186    static private class LanguageCellRenderer extends DefaultListCellRenderer {
     187        private ListCellRenderer dispatch;
     188        public LanguageCellRenderer(ListCellRenderer dispatch) {
     189            this.dispatch = dispatch;
     190        }
     191        @Override
     192        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
     193                boolean cellHasFocus) {
     194            Locale l = (Locale) value;
     195            return dispatch.getListCellRendererComponent(list,
     196                    l == null ? tr("Default (Auto determined)") : l.getDisplayName(),
     197                            index, isSelected, cellHasFocus);
     198        }
     199    }
    157200}
Note: See TracChangeset for help on using the changeset viewer.