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

Last change on this file since 4512 was 4512, checked in by stoecker, 13 years ago

introduce expert mode, make dynamic toolbar buttons default

  • Property svn:eol-style set to native
File size: 6.3 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.GridBagLayout;
8
9import javax.swing.BorderFactory;
10import javax.swing.Box;
11import javax.swing.DefaultListCellRenderer;
12import javax.swing.JCheckBox;
13import javax.swing.JComboBox;
14import javax.swing.JLabel;
15import javax.swing.JList;
16import javax.swing.JPanel;
17import javax.swing.JScrollPane;
18import javax.swing.ListCellRenderer;
19import javax.swing.UIManager;
20import javax.swing.UIManager.LookAndFeelInfo;
21
22import org.openstreetmap.josm.Main;
23import org.openstreetmap.josm.tools.GBC;
24
25public class LafPreference implements PreferenceSetting {
26
27 public static class Factory implements PreferenceSettingFactory {
28 public PreferenceSetting createPreferenceSetting() {
29 return new LafPreference();
30 }
31 }
32
33 /**
34 * ComboBox with all look and feels.
35 */
36 private JComboBox lafCombo;
37 public JPanel panel;
38 private JCheckBox showSplashScreen = new JCheckBox(tr("Show splash screen at startup"));
39 private JCheckBox showID = new JCheckBox(tr("Show object ID in selection lists"));
40 private JCheckBox showLocalizedName = new JCheckBox(tr("Show localized name in selection lists"));
41 private JCheckBox drawHelperLine = new JCheckBox(tr("Draw rubber-band helper line"));
42 private JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
43 private JCheckBox expert = new JCheckBox(tr("Expert mode"));
44 private JCheckBox dynamicButtons = new JCheckBox(tr("Dynamic buttons in side menus"));
45
46 public void addGui(PreferenceTabbedPane gui) {
47 lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels());
48
49 // let's try to load additional LookAndFeels and put them into the list
50 try {
51 Class<?> Cquaqua = Class.forName("ch.randelshofer.quaqua.QuaquaLookAndFeel");
52 Object Oquaqua = Cquaqua.getConstructor((Class[])null).newInstance((Object[])null);
53 // no exception? Then Go!
54 lafCombo.addItem(
55 new UIManager.LookAndFeelInfo(((javax.swing.LookAndFeel)Oquaqua).getName(), "ch.randelshofer.quaqua.QuaquaLookAndFeel")
56 );
57 } catch (Exception ex) {
58 // just ignore, Quaqua may not even be installed...
59 //System.out.println("Failed to load Quaqua: " + ex);
60 }
61
62 String laf = Main.pref.get("laf", Main.platform.getDefaultStyle());
63 for (int i = 0; i < lafCombo.getItemCount(); ++i) {
64 if (((LookAndFeelInfo)lafCombo.getItemAt(i)).getClassName().equals(laf)) {
65 lafCombo.setSelectedIndex(i);
66 break;
67 }
68 }
69
70 final ListCellRenderer oldRenderer = lafCombo.getRenderer();
71 lafCombo.setRenderer(new DefaultListCellRenderer(){
72 @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
73 return oldRenderer.getListCellRendererComponent(list, ((LookAndFeelInfo)value).getName(), index, isSelected, cellHasFocus);
74 }
75 });
76
77 panel = new JPanel(new GridBagLayout());
78 panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
79
80 // Show splash screen on startup
81 showSplashScreen.setToolTipText(tr("Show splash screen at startup"));
82 showSplashScreen.setSelected(Main.pref.getBoolean("draw.splashscreen", true));
83 panel.add(showSplashScreen, GBC.eop().insets(20, 0, 0, 0));
84
85 if(Main.pref.getBoolean("expert", false)) {
86 // Show ID in selection
87 showID.setToolTipText(tr("Show object ID in selection lists"));
88 showID.setSelected(Main.pref.getBoolean("osm-primitives.showid", false));
89 panel.add(showID, GBC.eop().insets(20, 0, 0, 0));
90
91 // Show localized names
92 showLocalizedName.setToolTipText(tr("Show localized name in selection lists, if available"));
93 showLocalizedName.setSelected(Main.pref.getBoolean("osm-primitives.localize-name", true));
94 panel.add(showLocalizedName, GBC.eop().insets(20, 0, 0, 0));
95
96 drawHelperLine.setToolTipText(tr("Draw rubber-band helper line"));
97 drawHelperLine.setSelected(Main.pref.getBoolean("draw.helper-line", true));
98 panel.add(drawHelperLine, GBC.eop().insets(20, 0, 0, 0));
99
100 modeless.setToolTipText(tr("Do not require to switch modes (potlatch style workflow)"));
101 modeless.setSelected(Main.pref.getBoolean("modeless", false));
102 panel.add(modeless, GBC.eop().insets(20, 0, 0, 0));
103 }
104
105 dynamicButtons.setToolTipText(tr("Display buttons in right side menus only when mouse is inside the element"));
106 dynamicButtons.setSelected(Main.pref.getBoolean("dialog.dynamic.buttons", true));
107 panel.add(dynamicButtons, GBC.eop().insets(20, 0, 0, 0));
108
109 expert.setToolTipText(tr("The expert mode shows a lot of additional settings hidden from normal user"));
110 expert.setSelected(Main.pref.getBoolean("expert", false));
111 panel.add(expert, GBC.eop().insets(20, 0, 0, 0));
112
113 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
114
115 panel.add(new JLabel(tr("Look and Feel")), GBC.std().insets(20, 0, 0, 0));
116 panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
117 panel.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
118
119 JScrollPane scrollpane = new JScrollPane(panel);
120 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
121 gui.displaycontent.addTab(tr("Look and Feel"), scrollpane);
122 }
123
124 public boolean ok() {
125 boolean mod = false;
126 Main.pref.put("draw.splashscreen", showSplashScreen.isSelected());
127 Main.pref.put("osm-primitives.showid", showID.isSelected());
128 Main.pref.put("osm-primitives.localize-name", showLocalizedName.isSelected());
129 Main.pref.put("draw.helper-line", drawHelperLine.isSelected());
130 Main.pref.put("modeless", modeless.isSelected());
131 if(Main.pref.put("expert", expert.isSelected()))
132 mod = true;
133 Main.pref.put("dialog.dynamic.buttons", dynamicButtons.isSelected());
134 if(Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName()))
135 mod = true;
136 return mod;
137 }
138}
Note: See TracBrowser for help on using the repository browser.