source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java@ 7299

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

fix #10121 - Add a new look-and-feel preference to display ISO 8601 dates globally

  • Property svn:eol-style set to native
File size: 7.3 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.awt.GridBagLayout;
8import java.text.DateFormat;
9import java.util.Date;
10
11import javax.swing.BorderFactory;
12import javax.swing.Box;
13import javax.swing.DefaultListCellRenderer;
14import javax.swing.JCheckBox;
15import javax.swing.JLabel;
16import javax.swing.JList;
17import javax.swing.JPanel;
18import javax.swing.JScrollPane;
19import javax.swing.ListCellRenderer;
20import javax.swing.LookAndFeel;
21import javax.swing.UIManager;
22import javax.swing.UIManager.LookAndFeelInfo;
23
24import org.openstreetmap.josm.Main;
25import org.openstreetmap.josm.actions.ExpertToggleAction;
26import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
27import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
28import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
29import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
30import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
31import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
32import org.openstreetmap.josm.gui.widgets.JosmComboBox;
33import org.openstreetmap.josm.tools.GBC;
34import org.openstreetmap.josm.tools.date.DateUtils;
35
36/**
37 * Look-and-feel preferences.
38 */
39public class LafPreference implements SubPreferenceSetting {
40
41 /**
42 * Factory used to create a new {@code LafPreference}.
43 */
44 public static class Factory implements PreferenceSettingFactory {
45 @Override
46 public PreferenceSetting createPreferenceSetting() {
47 return new LafPreference();
48 }
49 }
50
51 /**
52 * ComboBox with all look and feels.
53 */
54 private JosmComboBox<LookAndFeelInfo> lafCombo;
55 JPanel panel;
56 private JCheckBox showSplashScreen = new JCheckBox(tr("Show splash screen at startup"));
57 private JCheckBox showID = new JCheckBox(tr("Show object ID in selection lists"));
58 private JCheckBox showLocalizedName = new JCheckBox(tr("Show localized name in selection lists"));
59 private JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
60 private JCheckBox dynamicButtons = new JCheckBox(tr("Dynamic buttons in side menus"));
61 private JCheckBox isoDates = new JCheckBox(tr("Display ISO dates"));
62
63 @Override
64 public void addGui(PreferenceTabbedPane gui) {
65 lafCombo = new JosmComboBox<>(UIManager.getInstalledLookAndFeels());
66
67 // let's try to load additional LookAndFeels and put them into the list
68 if (Main.isPlatformOsx()) {
69 try {
70 Class<?> Cquaqua = Class.forName("ch.randelshofer.quaqua.QuaquaLookAndFeel");
71 Object Oquaqua = Cquaqua.getConstructor((Class[])null).newInstance((Object[])null);
72 // no exception? Then Go!
73 lafCombo.addItem(
74 new UIManager.LookAndFeelInfo(((LookAndFeel)Oquaqua).getName(), "ch.randelshofer.quaqua.QuaquaLookAndFeel")
75 );
76 } catch (Exception ex) {
77 // just debug, Quaqua may not even be installed...
78 Main.debug(ex.getMessage());
79 }
80 }
81
82 String laf = Main.pref.get("laf", Main.platform.getDefaultStyle());
83 for (int i = 0; i < lafCombo.getItemCount(); ++i) {
84 if (lafCombo.getItemAt(i).getClassName().equals(laf)) {
85 lafCombo.setSelectedIndex(i);
86 break;
87 }
88 }
89
90 lafCombo.setRenderer(new ListCellRenderer<LookAndFeelInfo>(){
91 final DefaultListCellRenderer def = new DefaultListCellRenderer();
92 @Override
93 public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
94 int index, boolean isSelected, boolean cellHasFocus) {
95 return def.getListCellRendererComponent(list, value.getName(), index, isSelected, cellHasFocus);
96 }
97 });
98
99 panel = new JPanel(new GridBagLayout());
100 panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
101
102 // Show splash screen on startup
103 showSplashScreen.setToolTipText(tr("Show splash screen at startup"));
104 showSplashScreen.setSelected(Main.pref.getBoolean("draw.splashscreen", true));
105 panel.add(showSplashScreen, GBC.eop().insets(20, 0, 0, 0));
106
107 // Show ID in selection
108 showID.setToolTipText(tr("Show object ID in selection lists"));
109 showID.setSelected(Main.pref.getBoolean("osm-primitives.showid", false));
110
111 // Show localized names
112 showLocalizedName.setToolTipText(tr("Show localized name in selection lists, if available"));
113 showLocalizedName.setSelected(Main.pref.getBoolean("osm-primitives.localize-name", true));
114 ExpertToggleAction.addVisibilitySwitcher(showLocalizedName);
115
116 modeless.setToolTipText(tr("Do not require to switch modes (potlatch style workflow)"));
117 modeless.setSelected(Main.pref.getBoolean("modeless", false));
118 ExpertToggleAction.addVisibilitySwitcher(modeless);
119
120 panel.add(showID, GBC.eop().insets(20, 0, 0, 0));
121 panel.add(showLocalizedName, GBC.eop().insets(20, 0, 0, 0));
122 panel.add(modeless, GBC.eop().insets(20, 0, 0, 0));
123
124 dynamicButtons.setToolTipText(tr("Display buttons in right side menus only when mouse is inside the element"));
125 dynamicButtons.setSelected(ToggleDialog.PROP_DYNAMIC_BUTTONS.get());
126 panel.add(dynamicButtons, GBC.eop().insets(20, 0, 0, 0));
127
128 Date today = new Date();
129 isoDates.setToolTipText(tr("Format dates according to {0}. Today''s date will be displayed as {1} instead of {2}",
130 tr("ISO 8601"),
131 DateUtils.newIsoDateFormat().format(today),
132 DateFormat.getDateInstance(DateFormat.SHORT).format(today)));
133 isoDates.setSelected(DateUtils.PROP_ISO_DATES.get());
134 panel.add(isoDates, GBC.eop().insets(20, 0, 0, 0));
135
136 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
137
138 panel.add(new JLabel(tr("Look and Feel")), GBC.std().insets(20, 0, 0, 0));
139 panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
140 panel.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
141
142 JScrollPane scrollpane = new JScrollPane(panel);
143 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
144 gui.getDisplayPreference().addSubTab(this, tr("Look and Feel"), scrollpane);
145 }
146
147 @Override
148 public boolean ok() {
149 boolean mod = false;
150 Main.pref.put("draw.splashscreen", showSplashScreen.isSelected());
151 Main.pref.put("osm-primitives.showid", showID.isSelected());
152 Main.pref.put("osm-primitives.localize-name", showLocalizedName.isSelected());
153 Main.pref.put("modeless", modeless.isSelected());
154 Main.pref.put(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
155 Main.pref.put(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
156 mod |= Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName());
157 return mod;
158 }
159
160 @Override
161 public boolean isExpert() {
162 return false;
163 }
164
165 @Override
166 public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
167 return gui.getDisplayPreference();
168 }
169}
Note: See TracBrowser for help on using the repository browser.