source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java@ 10134

Last change on this file since 10134 was 10134, checked in by Don-vip, 8 years ago

sonar, javadoc

  • Property svn:eol-style set to native
File size: 5.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.display;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.util.ArrayList;
8import java.util.Arrays;
9import java.util.List;
10import java.util.Locale;
11
12import javax.swing.Box;
13import javax.swing.DefaultComboBoxModel;
14import javax.swing.DefaultListCellRenderer;
15import javax.swing.JLabel;
16import javax.swing.JList;
17import javax.swing.JPanel;
18import javax.swing.ListCellRenderer;
19
20import org.openstreetmap.josm.Main;
21import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
22import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
23import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
24import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
25import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
26import org.openstreetmap.josm.gui.widgets.JosmComboBox;
27import org.openstreetmap.josm.tools.GBC;
28import org.openstreetmap.josm.tools.I18n;
29import org.openstreetmap.josm.tools.LanguageInfo;
30
31/**
32 * Language preferences.
33 * @since 1065
34 */
35public class LanguagePreference implements SubPreferenceSetting {
36
37 private static final String LANGUAGE = "language";
38
39 /**
40 * Factory used to create a new {@code LanguagePreference}.
41 */
42 public static class Factory implements PreferenceSettingFactory {
43 @Override
44 public PreferenceSetting createPreferenceSetting() {
45 return new LanguagePreference();
46 }
47 }
48
49 /** the combo box with the available locales */
50 private JosmComboBox<Locale> langCombo;
51
52 @Override
53 public void addGui(final PreferenceTabbedPane gui) {
54 LanguageComboBoxModel model = new LanguageComboBoxModel();
55 // Selecting the language BEFORE the JComboBox listens to model changes speed up initialization by ~35ms (see #7386)
56 // See https://stackoverflow.com/questions/3194958/fast-replacement-for-jcombobox-basiccomboboxui
57 model.selectLanguage(Main.pref.get(LANGUAGE));
58 langCombo = new JosmComboBox<>(model);
59 langCombo.setRenderer(new LanguageCellRenderer());
60
61 LafPreference lafPreference = gui.getSetting(LafPreference.class);
62 final JPanel panel = lafPreference.panel;
63 panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
64 panel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
65 panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
66 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
67
68 TabPreferenceSetting tabPref = lafPreference.getTabPreferenceSetting(gui);
69 tabPref.registerSubTab(this, tabPref.getSubTab(lafPreference));
70 }
71
72 @Override
73 public boolean ok() {
74 if (langCombo.getSelectedItem() == null)
75 return Main.pref.put(LANGUAGE, null);
76 else
77 return Main.pref.put(LANGUAGE,
78 LanguageInfo.getJOSMLocaleCode((Locale) langCombo.getSelectedItem()));
79 }
80
81 private static class LanguageComboBoxModel extends DefaultComboBoxModel<Locale> {
82 private final List<Locale> data = new ArrayList<>();
83
84 LanguageComboBoxModel() {
85 data.add(0, null);
86 data.addAll(Arrays.asList(I18n.getAvailableTranslations()));
87 }
88
89 private void selectLanguage(String language) {
90 setSelectedItem(null);
91 if (language != null) {
92 String lang = LanguageInfo.getJavaLocaleCode(language);
93 for (Locale locale: data) {
94 if (locale == null) {
95 continue;
96 }
97 if (locale.toString().equals(lang)) {
98 setSelectedItem(locale);
99 return;
100 }
101 }
102 }
103 }
104
105 @Override
106 public Locale getElementAt(int index) {
107 return data.get(index);
108 }
109
110 @Override
111 public int getSize() {
112 return data.size();
113 }
114 }
115
116 private static class LanguageCellRenderer implements ListCellRenderer<Locale> {
117 private final DefaultListCellRenderer dispatch;
118
119 /**
120 * Constructs a new {@code LanguageCellRenderer}.
121 */
122 LanguageCellRenderer() {
123 this.dispatch = new DefaultListCellRenderer();
124 }
125
126 @Override
127 public Component getListCellRendererComponent(JList<? extends Locale> list, Locale l,
128 int index, boolean isSelected, boolean cellHasFocus) {
129 return dispatch.getListCellRendererComponent(list,
130 l == null
131 ? tr("Default (Auto determined)")
132 : LanguageInfo.getDisplayName(l),
133 index, isSelected, cellHasFocus);
134 }
135 }
136
137 @Override
138 public boolean isExpert() {
139 return false;
140 }
141
142 @Override
143 public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
144 return gui.getSetting(LafPreference.class).getTabPreferenceSetting(gui);
145 }
146}
Note: See TracBrowser for help on using the repository browser.