Changeset 168 in josm
- Timestamp:
- 2006-11-25T16:41:58+01:00 (18 years ago)
- Files:
-
- 12 added
- 3 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
src/org/openstreetmap/josm/actions/PreferencesAction.java
r113 r168 3 3 import static org.openstreetmap.josm.tools.I18n.tr; 4 4 5 import java.awt.GridBagLayout; 5 6 import java.awt.event.ActionEvent; 6 7 import java.awt.event.KeyEvent; 7 8 8 import org.openstreetmap.josm.gui.PreferenceDialog; 9 import javax.swing.JDialog; 10 import javax.swing.JOptionPane; 11 import javax.swing.JPanel; 12 13 import org.openstreetmap.josm.Main; 14 import org.openstreetmap.josm.gui.preferences.PreferenceDialog; 15 import org.openstreetmap.josm.tools.GBC; 9 16 10 17 /** … … 26 33 */ 27 34 public void actionPerformed(ActionEvent e) { 28 PreferenceDialog dlg = new PreferenceDialog(); 35 PreferenceDialog prefDlg = new PreferenceDialog(); 36 JPanel prefPanel = new JPanel(new GridBagLayout()); 37 prefPanel.add(prefDlg, GBC.eol().fill(GBC.BOTH)); 38 39 JOptionPane pane = new JOptionPane(prefPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 40 JDialog dlg = pane.createDialog(Main.parent, tr("Preferences")); 29 41 dlg.setVisible(true); 42 if (pane.getValue() instanceof Integer && (Integer)pane.getValue() == JOptionPane.OK_OPTION) 43 prefDlg.ok(); 30 44 } 31 45 } -
src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
r167 r168 1 package org.openstreetmap.josm.gui; 1 package org.openstreetmap.josm.gui.preferences; 2 2 3 3 import static org.openstreetmap.josm.tools.I18n.tr; 4 4 5 import java.awt.Color;6 import java.awt.Component;7 import java.awt.Dimension;8 5 import java.awt.Font; 9 6 import java.awt.GridBagLayout; 10 7 import java.awt.event.ActionEvent; 11 8 import java.awt.event.ActionListener; 12 import java.io.File;13 import java.util.Arrays;14 9 import java.util.Collection; 15 import java.util.HashMap;16 10 import java.util.LinkedList; 17 import java.util.Map;18 import java.util.StringTokenizer;19 import java.util.TreeMap;20 import java.util.Vector;21 import java.util.Map.Entry;22 11 23 import javax.swing.AbstractAction;24 12 import javax.swing.BorderFactory; 25 import javax.swing.Box;26 import javax.swing.DefaultListCellRenderer;27 import javax.swing.DefaultListModel;28 import javax.swing.JButton;29 import javax.swing.JCheckBox;30 import javax.swing.JColorChooser;31 import javax.swing.JComboBox;32 import javax.swing.JDialog;33 13 import javax.swing.JLabel; 34 import javax.swing.JList;35 14 import javax.swing.JOptionPane; 36 15 import javax.swing.JPanel; 37 import javax.swing.JPasswordField;38 import javax.swing.JScrollPane;39 16 import javax.swing.JTabbedPane; 40 import javax.swing.JTable;41 import javax.swing.JTextField;42 import javax.swing.ListCellRenderer;43 import javax.swing.ListSelectionModel;44 import javax.swing.UIManager;45 import javax.swing.UIManager.LookAndFeelInfo;46 import javax.swing.table.TableCellRenderer;47 17 48 18 import org.openstreetmap.josm.Main; 49 import org.openstreetmap.josm.data.projection.Projection; 50 import org.openstreetmap.josm.plugins.PluginInformation; 51 import org.openstreetmap.josm.tools.ColorHelper; 19 import org.openstreetmap.josm.plugins.PluginProxy; 52 20 import org.openstreetmap.josm.tools.GBC; 53 21 import org.openstreetmap.josm.tools.ImageProvider; 54 import org.openstreetmap.josm.tools.UrlLabel;55 22 56 23 /** … … 59 26 * @author imi 60 27 */ 61 public class PreferenceDialog extends J Dialog{28 public class PreferenceDialog extends JTabbedPane { 62 29 63 private final class RequireRestartAction implements ActionListener { 64 public void actionPerformed(ActionEvent e) { 65 requiresRestart = true; 66 } 67 } 68 private RequireRestartAction requireRestartAction = new RequireRestartAction(); 30 public final static Collection<PreferenceSetting> settings = new LinkedList<PreferenceSetting>(); 69 31 70 /** 71 * Action to take place when user pressed the ok button. 72 */ 73 class OkAction extends AbstractAction { 74 private static final String OKBUTTON_PROP = "OptionPane.okButtonText"; 32 public boolean requiresRestart = false; 33 public final RequireRestartAction requireRestartAction = new RequireRestartAction(); 75 34 76 public OkAction() { 77 super(UIManager.getString(OKBUTTON_PROP), UIManager.getIcon("OptionPane.okIcon")); 78 try { 79 putValue(MNEMONIC_KEY, new Integer((String)UIManager.get("OptionPane.okButtonMnemonic"))); 80 } catch (NumberFormatException e) { 81 // just don't set the mnemonic 82 } 83 } 84 public void actionPerformed(ActionEvent e) { 85 Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName()); 86 Main.pref.put("projection", projectionCombo.getSelectedItem().getClass().getName()); 87 Main.pref.put("osm-server.url", osmDataServer.getText()); 88 Main.pref.put("osm-server.username", osmDataUsername.getText()); 89 String pwd = String.valueOf(osmDataPassword.getPassword()); 90 if (pwd.equals("")) 91 pwd = null; 92 Main.pref.put("osm-server.password", pwd); 93 Main.pref.put("wms.baseurl", wmsServerBaseUrl.getText()); 94 Main.pref.put("csv.importstring", csvImportString.getText()); 95 Main.pref.put("draw.rawgps.lines", drawRawGpsLines.isSelected()); 96 Main.pref.put("draw.rawgps.lines.force", forceRawGpsLines.isSelected()); 97 Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected()); 98 Main.pref.put("draw.segment.direction", directionHint.isSelected()); 99 100 if (annotationSources.getModel().getSize() > 0) { 101 StringBuilder sb = new StringBuilder(); 102 for (int i = 0; i < annotationSources.getModel().getSize(); ++i) 103 sb.append(";"+annotationSources.getModel().getElementAt(i)); 104 Main.pref.put("annotation.sources", sb.toString().substring(1)); 105 } else 106 Main.pref.put("annotation.sources", null); 107 108 String plugins = ""; 109 for (Entry<PluginInformation, Boolean> entry : pluginMap.entrySet()) 110 if (entry.getValue()) 111 plugins += entry.getKey().name + ","; 112 if (plugins.endsWith(",")) 113 plugins = plugins.substring(0, plugins.length()-1); 114 Main.pref.put("plugins", plugins); 115 116 for (int i = 0; i < colors.getRowCount(); ++i) { 117 String name = (String)colors.getValueAt(i, 0); 118 Color col = (Color)colors.getValueAt(i, 1); 119 Main.pref.put("color."+name, ColorHelper.color2html(col)); 120 } 121 122 if (requiresRestart) 123 JOptionPane.showMessageDialog(PreferenceDialog.this,tr("You have to restart JOSM for some settings to take effect.")); 124 Main.parent.repaint(); 125 setVisible(false); 126 } 127 } 128 129 /** 130 * Action to take place when user pressed the cancel button. 131 */ 132 class CancelAction extends AbstractAction { 133 private static final String CANCELBUTTON_PROP = "OptionPane.cancelButtonText"; 134 public CancelAction() { 135 super(UIManager.getString(CANCELBUTTON_PROP), 136 UIManager.getIcon("OptionPane.cancelIcon")); 137 try { 138 putValue(MNEMONIC_KEY, new Integer((String)UIManager.get("OptionPane.cancelButtonMnemonic"))); 139 } catch (NumberFormatException e) { 140 // just don't set the mnemonic 141 } 142 } 143 public void actionPerformed(ActionEvent e) { 144 setVisible(false); 145 } 146 } 147 148 /** 149 * Indicate, that the application has to be restarted for the settings to take effect. 150 */ 151 private boolean requiresRestart = false; 152 /** 153 * ComboBox with all look and feels. 154 */ 155 private JComboBox lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels()); 156 /** 157 * The main tab panel. 158 */ 159 private JTabbedPane tabPane = new JTabbedPane(JTabbedPane.LEFT); 160 161 /** 162 * Editfield for the Base url to the REST API from OSM. 163 */ 164 private JTextField osmDataServer = new JTextField(20); 165 /** 166 * Editfield for the username to the OSM account. 167 */ 168 private JTextField osmDataUsername = new JTextField(20); 169 /** 170 * Passwordfield for the userpassword of the REST API. 171 */ 172 private JPasswordField osmDataPassword = new JPasswordField(20); 173 /** 174 * Base url of the WMS server. Holds everything except the bbox= argument. 175 */ 176 private JTextField wmsServerBaseUrl = new JTextField(20); 177 /** 178 * Comma seperated import string specifier or <code>null</code> if the first 179 * data line should be interpreted as one. 180 */ 181 private JTextField csvImportString = new JTextField(20); 182 /** 183 * The checkbox stating whether nodes should be merged together. 184 */ 185 private JCheckBox drawRawGpsLines = new JCheckBox(tr("Draw lines between raw gps points.")); 186 /** 187 * The checkbox stating whether raw gps lines should be forced. 188 */ 189 private JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported.")); 190 private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points.")); 191 private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows")); 192 private JTable colors; 193 194 /** 195 * Combobox with all projections available 196 */ 197 private JComboBox projectionCombo = new JComboBox(Projection.allProjections); 198 private JList annotationSources = new JList(new DefaultListModel()); 199 private Map<PluginInformation, Boolean> pluginMap = new HashMap<PluginInformation, Boolean>(); 200 201 202 /** 203 * Create a preference setting dialog from an preferences-file. If the file does not 204 * exist, it will be created. 205 * If the dialog is closed with Ok, the preferences will be stored to the preferences- 206 * file, otherwise no change of the file happens. 207 */ 208 public PreferenceDialog() { 209 super(JOptionPane.getFrameForComponent(Main.parent), tr("Preferences")); 210 211 // look and feel combo box 212 String laf = Main.pref.get("laf"); 213 for (int i = 0; i < lafCombo.getItemCount(); ++i) { 214 if (((LookAndFeelInfo)lafCombo.getItemAt(i)).getClassName().equals(laf)) { 215 lafCombo.setSelectedIndex(i); 216 break; 217 } 218 } 219 final ListCellRenderer oldRenderer = lafCombo.getRenderer(); 220 lafCombo.setRenderer(new DefaultListCellRenderer(){ 221 @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 222 return oldRenderer.getListCellRendererComponent(list, ((LookAndFeelInfo)value).getName(), index, isSelected, cellHasFocus); 223 } 224 }); 225 lafCombo.addActionListener(requireRestartAction); 226 227 // projection combo box 228 for (int i = 0; i < projectionCombo.getItemCount(); ++i) { 229 if (projectionCombo.getItemAt(i).getClass().getName().equals(Main.pref.get("projection"))) { 230 projectionCombo.setSelectedIndex(i); 231 break; 232 } 233 } 234 projectionCombo.addActionListener(requireRestartAction); 235 236 drawRawGpsLines.addActionListener(new ActionListener(){ 237 public void actionPerformed(ActionEvent e) { 238 if (!drawRawGpsLines.isSelected()) 239 forceRawGpsLines.setSelected(false); 240 forceRawGpsLines.setEnabled(drawRawGpsLines.isSelected()); 241 } 242 }); 243 244 osmDataServer.setText(Main.pref.get("osm-server.url")); 245 osmDataUsername.setText(Main.pref.get("osm-server.username")); 246 osmDataPassword.setText(Main.pref.get("osm-server.password")); 247 wmsServerBaseUrl.setText(Main.pref.get("wms.baseurl", "http://wms.jpl.nasa.gov/wms.cgi?request=GetMap&width=512&height=512&layers=global_mosaic&styles=&srs=EPSG:4326&format=image/jpeg&")); 248 csvImportString.setText(Main.pref.get("csv.importstring")); 249 drawRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines")); 250 forceRawGpsLines.setToolTipText(tr("Force drawing of lines if the imported data contain no line information.")); 251 forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force")); 252 forceRawGpsLines.setEnabled(drawRawGpsLines.isSelected()); 253 largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large")); 254 largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points.")); 255 directionHint.setToolTipText(tr("Draw direction hints for all segments.")); 256 directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction")); 257 258 String annos = Main.pref.get("annotation.sources"); 259 StringTokenizer st = new StringTokenizer(annos, ";"); 260 while (st.hasMoreTokens()) 261 ((DefaultListModel)annotationSources.getModel()).addElement(st.nextToken()); 262 263 Box pluginPanel = Box.createVerticalBox(); 264 Collection<PluginInformation> availablePlugins = new LinkedList<PluginInformation>(); 265 File[] pluginFiles = new File(Main.pref.getPreferencesDir()+"plugins").listFiles(); 266 if (pluginFiles != null) { 267 Arrays.sort(pluginFiles); 268 for (File f : pluginFiles) 269 if (f.isFile() && f.getName().endsWith(".jar")) 270 availablePlugins.add(new PluginInformation(f)); 271 } 272 273 Collection<String> enabledPlugins = Arrays.asList(Main.pref.get("plugins").split(",")); 274 for (final PluginInformation plugin : availablePlugins) { 275 boolean enabled = enabledPlugins.contains(plugin.name); 276 final JCheckBox pluginCheck = new JCheckBox(plugin.name, enabled); 277 pluginPanel.add(pluginCheck); 278 279 pluginCheck.setToolTipText(plugin.file.getAbsolutePath()); 280 JLabel label = new JLabel("<html><i>"+(plugin.description==null?"no description available":plugin.description)+"</i></html>"); 281 label.setBorder(BorderFactory.createEmptyBorder(0,20,0,0)); 282 pluginPanel.add(label); 283 pluginPanel.add(Box.createVerticalStrut(5)); 284 285 pluginMap.put(plugin, enabled); 286 pluginCheck.addActionListener(new ActionListener(){ 287 public void actionPerformed(ActionEvent e) { 288 pluginMap.put(plugin, pluginCheck.isSelected()); 289 requiresRestart = true; 290 } 291 }); 292 } 293 JScrollPane pluginPane = new JScrollPane(pluginPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 294 pluginPane.setBorder(null); 295 296 Map<String,String> allColors = new TreeMap<String, String>(Main.pref.getAllPrefix("color.")); 297 298 Vector<Vector<Object>> rows = new Vector<Vector<Object>>(); 299 for (Entry<String,String> e : allColors.entrySet()) { 300 Vector<Object> row = new Vector<Object>(2); 301 row.add(e.getKey().substring("color.".length())); 302 row.add(ColorHelper.html2color(e.getValue())); 303 rows.add(row); 304 } 305 Vector<Object> cols = new Vector<Object>(2); 306 cols.add(tr("Color")); 307 cols.add(tr("Name")); 308 colors = new JTable(rows, cols){ 309 @Override public boolean isCellEditable(int row, int column) { 310 return false; 311 } 312 }; 313 colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 314 final TableCellRenderer oldColorsRenderer = colors.getDefaultRenderer(Object.class); 315 colors.setDefaultRenderer(Object.class, new TableCellRenderer(){ 316 public Component getTableCellRendererComponent(JTable t, Object o, boolean selected, boolean focus, int row, int column) { 317 if (column == 1) { 318 JLabel l = new JLabel(ColorHelper.color2html((Color)o)); 319 l.setBackground((Color)o); 320 l.setOpaque(true); 321 return l; 322 } 323 return oldColorsRenderer.getTableCellRendererComponent(t,tr(o.toString()),selected,focus,row,column); 324 } 325 }); 326 colors.getColumnModel().getColumn(1).setWidth(100); 327 328 JButton colorEdit = new JButton(tr("Choose")); 329 colorEdit.addActionListener(new ActionListener(){ 330 public void actionPerformed(ActionEvent e) { 331 if (colors.getSelectedRowCount() == 0) { 332 JOptionPane.showMessageDialog(PreferenceDialog.this, tr("Please select a color.")); 333 return; 334 } 335 int sel = colors.getSelectedRow(); 336 JColorChooser chooser = new JColorChooser((Color)colors.getValueAt(sel, 1)); 337 int answer = JOptionPane.showConfirmDialog(PreferenceDialog.this, chooser, tr("Choose a color for {0}", colors.getValueAt(sel, 0)), JOptionPane.OK_CANCEL_OPTION); 338 if (answer == JOptionPane.OK_OPTION) 339 colors.setValueAt(chooser.getColor(), sel, 1); 340 } 341 }); 342 343 // Annotation source panels 344 JButton addAnno = new JButton(tr("Add")); 345 addAnno.addActionListener(new ActionListener(){ 346 public void actionPerformed(ActionEvent e) { 347 String source = JOptionPane.showInputDialog(Main.parent, tr("Annotation preset source")); 348 if (source == null) 349 return; 350 ((DefaultListModel)annotationSources.getModel()).addElement(source); 351 requiresRestart = true; 352 } 353 }); 354 355 JButton editAnno = new JButton(tr("Edit")); 356 editAnno.addActionListener(new ActionListener(){ 357 public void actionPerformed(ActionEvent e) { 358 if (annotationSources.getSelectedIndex() == -1) 359 JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to edit.")); 360 else { 361 String source = JOptionPane.showInputDialog(Main.parent, tr("Annotation preset source"), annotationSources.getSelectedValue()); 362 if (source == null) 363 return; 364 ((DefaultListModel)annotationSources.getModel()).setElementAt(source, annotationSources.getSelectedIndex()); 365 requiresRestart = true; 366 } 367 } 368 }); 369 370 JButton deleteAnno = new JButton(tr("Delete")); 371 deleteAnno.addActionListener(new ActionListener(){ 372 public void actionPerformed(ActionEvent e) { 373 if (annotationSources.getSelectedIndex() == -1) 374 JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete.")); 375 else { 376 ((DefaultListModel)annotationSources.getModel()).remove(annotationSources.getSelectedIndex()); 377 requiresRestart = true; 378 } 379 } 380 }); 381 annotationSources.setVisibleRowCount(3); 382 383 384 385 // setting tooltips 386 osmDataServer.setToolTipText(tr("The base URL to the OSM server (REST API)")); 387 osmDataUsername.setToolTipText(tr("Login name (email) to the OSM account.")); 388 osmDataPassword.setToolTipText(tr("Login password to the OSM account. Leave blank to not store any password.")); 389 wmsServerBaseUrl.setToolTipText(tr("The base URL to the server retrieving WMS background pictures from.")); 390 csvImportString.setToolTipText(tr("<html>Import string specification. lat/lon and time are imported.<br>" + 391 "<b>lat</b>: The latitude coordinate<br>" + 392 "<b>lon</b>: The longitude coordinate<br>" + 393 "<b>time</b>: The measured time as string<br>" + 394 "<b>ignore</b>: Skip this field<br>" + 395 "An example: \"ignore ignore lat lon\" will use ' ' as delimiter, skip the first two values and read then lat/lon.<br>" + 396 "Other example: \"lat,lon\" will just read lat/lon values comma seperated.</html>")); 397 drawRawGpsLines.setToolTipText(tr("If your gps device draw to few lines, select this to draw lines along your way.")); 398 colors.setToolTipText(tr("Colors used by different objects in JOSM.")); 399 annotationSources.setToolTipText(tr("The sources (url or filename) of annotation preset definition files. See http://josm.eigenheimstrasse.de/wiki/AnnotationPresets for help.")); 400 addAnno.setToolTipText(tr("Add a new annotation preset source to the list.")); 401 deleteAnno.setToolTipText(tr("Delete the selected source from the list.")); 402 403 // creating the gui 404 405 // Display tab 406 JPanel display = createPreferenceTab("display", tr("Display Settings"), tr("Various settings that influence the visual representation of the whole program.")); 407 display.add(new JLabel(tr("Look and Feel")), GBC.std()); 408 display.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL)); 409 display.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL)); 410 display.add(drawRawGpsLines, GBC.eol().insets(20,0,0,0)); 411 display.add(forceRawGpsLines, GBC.eop().insets(40,0,0,0)); 412 display.add(largeGpsPoints, GBC.eop().insets(20,0,0,0)); 413 display.add(directionHint, GBC.eop().insets(20,0,0,0)); 414 display.add(new JLabel(tr("Colors")), GBC.eol()); 415 colors.setPreferredScrollableViewportSize(new Dimension(100,112)); 416 display.add(new JScrollPane(colors), GBC.eol().fill(GBC.BOTH)); 417 display.add(colorEdit, GBC.eol().anchor(GBC.EAST)); 418 //display.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 419 420 // Connection tab 421 JPanel con = createPreferenceTab("connection", tr("Connection Settings"), tr("Connection Settings to the OSM server.")); 422 con.add(new JLabel(tr("Base Server URL")), GBC.std()); 423 con.add(osmDataServer, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 424 con.add(new JLabel(tr("OSM username (email)")), GBC.std()); 425 con.add(osmDataUsername, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 426 con.add(new JLabel(tr("OSM password")), GBC.std()); 427 con.add(osmDataPassword, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,0)); 428 JLabel warning = new JLabel(tr("<html>" + 429 "WARNING: The password is stored in plain text in the preferences file.<br>" + 430 "The password is transfered in plain text to the server, encoded in the url.<br>" + 431 "<b>Do not use a valuable Password.</b></html>")); 432 warning.setFont(warning.getFont().deriveFont(Font.ITALIC)); 433 con.add(warning, GBC.eop().fill(GBC.HORIZONTAL)); 434 //con.add(new JLabel("WMS server base url (everything except bbox-parameter)"), GBC.eol()); 435 //con.add(wmsServerBaseUrl, GBC.eop().fill(GBC.HORIZONTAL)); 436 //con.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 437 con.add(new JLabel(tr("CSV import specification (empty: read from first line in data)")), GBC.eol()); 438 con.add(csvImportString, GBC.eop().fill(GBC.HORIZONTAL)); 439 con.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 440 441 // Map tab 442 JPanel map = createPreferenceTab("map", tr("Map Settings"), tr("Settings for the map projection and data interpretation.")); 443 map.add(new JLabel(tr("Projection method")), GBC.std()); 444 map.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL)); 445 map.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,0,0,5)); 446 map.add(new JLabel(tr("Annotation preset sources")), GBC.eol().insets(0,5,0,0)); 447 map.add(new JScrollPane(annotationSources), GBC.eol().fill(GBC.BOTH)); 448 map.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL)); 449 map.add(addAnno, GBC.std()); 450 map.add(editAnno, GBC.std().insets(5,0,5,0)); 451 map.add(deleteAnno, GBC.std()); 452 453 // I HATE SWING! 454 map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 455 map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 456 map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 457 map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 458 map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); 459 460 461 // Plugin tab 462 JPanel plugin = createPreferenceTab("plugin", tr("Plugins"), tr("Configure available Plugins.")); 463 plugin.add(pluginPane, GBC.eol().fill(GBC.BOTH)); 464 plugin.add(GBC.glue(0,10), GBC.eol()); 465 plugin.add(new UrlLabel("http://josm.eigenheimstrasse.de/wiki/Plugins", tr("Get more plugins")), GBC.std().fill(GBC.HORIZONTAL)); 466 467 tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 468 469 // OK/Cancel panel at bottom 470 JPanel okPanel = new JPanel(new GridBagLayout()); 471 okPanel.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL)); 472 okPanel.add(new JButton(new OkAction()), GBC.std()); 473 okPanel.add(new JButton(new CancelAction()), GBC.std()); 474 okPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 475 476 // merging all in the content pane 477 getContentPane().setLayout(new GridBagLayout()); 478 getContentPane().add(tabPane, GBC.eol().fill()); 479 getContentPane().add(okPanel, GBC.eol().fill(GBC.HORIZONTAL)); 480 481 setModal(true); 482 pack(); 483 if (getHeight() > 400) 484 setSize(getWidth(), 400); 485 if (getWidth() > 600) 486 setSize(600, getHeight()); 487 setLocationRelativeTo(Main.parent); 488 } 35 // some common tabs 36 public final JPanel display = createPreferenceTab("display", tr("Display Settings"), tr("Various settings that influence the visual representation of the whole program.")); 37 public final JPanel connection = createPreferenceTab("connection", tr("Connection Settings"), tr("Connection Settings to the OSM server.")); 38 public final JPanel map = createPreferenceTab("map", tr("Map Settings"), tr("Settings for the map projection and data interpretation.")); 489 39 490 40 /** … … 497 47 * @return The created panel ready to add other controls. 498 48 */ 499 p rivateJPanel createPreferenceTab(String icon, String title, String desc) {49 public JPanel createPreferenceTab(String icon, String title, String desc) { 500 50 JPanel p = new JPanel(new GridBagLayout()); 501 51 p.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); … … 506 56 p.add(descLabel, GBC.eol().insets(5,0,5,20).fill(GBC.HORIZONTAL)); 507 57 508 tabPane.addTab(null, ImageProvider.get("preferences", icon), p);509 tabPane.setToolTipTextAt(tabPane.getTabCount()-1, desc);58 addTab(null, ImageProvider.get("preferences", icon), p); 59 setToolTipTextAt(getTabCount()-1, desc); 510 60 return p; 511 61 } 62 63 64 65 66 private final class RequireRestartAction implements ActionListener { 67 public void actionPerformed(ActionEvent e) { 68 requiresRestart = true; 69 } 70 } 71 72 public void ok() { 73 for (PreferenceSetting setting : settings) 74 setting.ok(); 75 if (requiresRestart) 76 JOptionPane.showMessageDialog(PreferenceDialog.this,tr("You have to restart JOSM for some settings to take effect.")); 77 Main.parent.repaint(); 78 } 79 80 /** 81 * If the dialog is closed with Ok, the preferences will be stored to the preferences- 82 * file, otherwise no change of the file happens. 83 */ 84 public PreferenceDialog() { 85 super(JTabbedPane.LEFT, JTabbedPane.SCROLL_TAB_LAYOUT); 86 for (PreferenceSetting setting : settings) 87 setting.addGui(this); 88 } 89 90 static { 91 // order is important! 92 settings.add(new LafPreference()); 93 settings.add(new DrawingPreference()); 94 settings.add(new ColorPreference()); 95 settings.add(new ServerAccessPreference()); 96 settings.add(new CsvPreference()); 97 settings.add(new ProjectionPreference()); 98 settings.add(new AnnotationPresetPreference()); 99 settings.add(new PluginPreference()); 100 101 for (PluginProxy plugin : Main.plugins) { 102 PreferenceSetting p = plugin.getPreferenceSetting(); 103 if (p != null) 104 settings.add(p); 105 } 106 107 // always the last: advanced tab 108 settings.add(new AdvancedPreference()); 109 } 512 110 } -
src/org/openstreetmap/josm/plugins/Plugin.java
r159 r168 11 11 import org.openstreetmap.josm.Main; 12 12 import org.openstreetmap.josm.gui.MapFrame; 13 import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 13 14 14 15 /** … … 69 70 70 71 /** 72 * Called in the preferences dialog to create a preferences page for the plugin, 73 * if any available. 74 */ 75 public PreferenceSetting getPreferenceSetting() {return null;} 76 77 78 /** 71 79 * Copies the ressource 'from' to the file in the plugin directory named 'to'. 72 80 */ -
src/org/openstreetmap/josm/plugins/PluginProxy.java
r154 r168 2 2 3 3 import org.openstreetmap.josm.gui.MapFrame; 4 import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 4 5 5 6 … … 30 31 } 31 32 } 33 34 @Override public PreferenceSetting getPreferenceSetting() { 35 try { 36 return (PreferenceSetting)plugin.getClass().getMethod("getPreferenceSetting").invoke(plugin); 37 } catch (NoSuchMethodException e) { 38 return null; 39 } catch (Exception e) { 40 throw new PluginException(this, info.name, e); 41 } 42 } 32 43 }
Note:
See TracChangeset
for help on using the changeset viewer.