Ignore:
Timestamp:
2005-10-01T04:01:45+02:00 (19 years ago)
Author:
imi
Message:
  • pretty preferrences menu
  • drawing double circles on double position hit
  • mergeNodes option
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/gui/PreferenceDialog.java

    r1 r6  
    11package org.openstreetmap.josm.gui;
    22
    3 import java.awt.BorderLayout;
    43import java.awt.Component;
    5 import java.awt.Container;
    64import java.awt.Dimension;
     5import java.awt.Font;
     6import java.awt.GridBagLayout;
    77import java.awt.event.ActionEvent;
    88import java.awt.event.ActionListener;
     
    1111
    1212import javax.swing.AbstractAction;
    13 import javax.swing.BorderFactory;
    1413import javax.swing.Box;
    1514import javax.swing.DefaultListCellRenderer;
    1615import javax.swing.ImageIcon;
    1716import javax.swing.JButton;
     17import javax.swing.JCheckBox;
    1818import javax.swing.JComboBox;
    1919import javax.swing.JDialog;
     
    5050                        pref.laf = (LookAndFeelInfo)lafCombo.getSelectedItem();
    5151                        pref.projection = (Projection)projectionCombo.getSelectedItem();
     52                        pref.mergeNodes = mergeNodes.isSelected();
    5253                        Main.pref.projection = pref.projection;
    5354                        try {
     
    8586        private JComboBox lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels());
    8687        /**
    87          * The tabbed pane to add tabulars to.
    88          */
    89         private JTabbedPane tabPanel = new JTabbedPane();
    90         /**
    9188         * Combobox with all projections available
    9289         */
    93         private JComboBox projectionCombo = new JComboBox(Preferences.allProjections);
     90        private JComboBox projectionCombo = new JComboBox(Preferences.allProjections.clone());
     91        /**
     92         * The main tab panel.
     93         */
     94        private JTabbedPane tabPane = new JTabbedPane(JTabbedPane.LEFT);
     95        /**
     96         * The checkbox stating whether nodes should be merged together.
     97         */
     98        private JCheckBox mergeNodes = new JCheckBox("Merge nodes with equal latitude/longitude.");
    9499
    95100       
     
    113118                }
    114119
    115                 getContentPane().setLayout(new BorderLayout());
    116                 getContentPane().add(tabPanel, BorderLayout.CENTER);
    117 
    118                 newTab("Display");
    119                 // laf
    120                 JPanel p = newPanelLine();
    121                 p.add(new JLabel("Look and Feel"));
     120                // look and feel combo box
    122121                final ListCellRenderer oldRenderer = lafCombo.getRenderer();
    123122                lafCombo.setRenderer(new DefaultListCellRenderer(){
     123                        @Override
    124124                        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    125125                                return oldRenderer.getListCellRendererComponent(list, ((LookAndFeelInfo)value).getName(), index, isSelected, cellHasFocus);
     
    130130                                setRequiresRestart();
    131131                        }});
    132                 p.add(lafCombo);
    133 
    134                 newTab("Projection");
    135                 p = newPanelLine();
    136                 p.add(new JLabel("Projection System"));
    137                 p.add(projectionCombo);
    138                 for (int i = 0; i < projectionCombo.getItemCount(); ++i)
     132
     133                // projection method combo box
     134                for (int i = 0; i < projectionCombo.getItemCount(); ++i) {
    139135                        if (projectionCombo.getItemAt(i).getClass().equals(pref.projection.getClass())) {
    140136                                projectionCombo.setSelectedIndex(i);
    141137                                break;
    142138                        }
    143 
    144                 // OK/Cancel
    145                 JPanel okPanel = new JPanel();
    146                 okPanel.add(new JButton(new OkAction()));
    147                 okPanel.add(new JButton(new CancelAction()));
    148                 getContentPane().add(okPanel, BorderLayout.SOUTH);
     139                }
     140               
     141                // Display tab
     142                JPanel display = createPreferenceTab("display", "Display Settings", "Various settings than influence the visual representation of the whole Program.");
     143                display.add(new JLabel("Look and Feel"), GBC.std());
     144                display.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
     145                display.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
     146                display.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
     147
     148                // Map tab
     149                JPanel map = createPreferenceTab("map", "Map Settings", "Settings for the map projection and data interpretation.");
     150                map.add(new JLabel("Projection method"), GBC.std());
     151                map.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
     152                map.add(projectionCombo, GBC.eol().fill(GBC.HORIZONTAL));
     153                JLabel labelNoteProjection = new JLabel(
     154                                "<html>Note: This is the default projection method used for files, " +
     155                                "where the correct projection could not be determined. " +
     156                                "The actual used projection can be changed in the property " +
     157                                "settings of each map.</html>");
     158                labelNoteProjection.setMinimumSize(new Dimension(550, 50));
     159                labelNoteProjection.setPreferredSize(new Dimension(550, 50));
     160                map.add(labelNoteProjection, GBC.eol().insets(0,5,0,20));
     161                map.add(new JLabel("GPX import / export"), GBC.eol());
     162                mergeNodes.setSelected(pref.mergeNodes);
     163                map.add(mergeNodes, GBC.eol());
     164                map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
     165
     166               
     167                tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     168       
     169                // OK/Cancel panel at bottom
     170                JPanel okPanel = new JPanel(new GridBagLayout());
     171                okPanel.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
     172                okPanel.add(new JButton(new OkAction()), GBC.std());
     173                okPanel.add(new JButton(new CancelAction()), GBC.std());
     174
     175                // merging all in the content pane
     176                getContentPane().setLayout(new GridBagLayout());
     177                getContentPane().add(tabPane, GBC.eol().fill());
     178                getContentPane().add(okPanel, GBC.eol().fill(GBC.HORIZONTAL));
    149179
    150180                setModal(true);
     
    155185
    156186        /**
    157          * Start a new tab with the given name
    158          * @param tabName The name of the new tab.
    159          */
    160         private void newTab(String tabName) {
    161                 Box tab = Box.createVerticalBox();
    162                 tab.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    163                 tabPanel.addTab(tabName, tab);
    164         }
    165 
     187         * Construct a JPanel for the preference settings. Layout is GridBagLayout
     188         * and a centered title label and the description are added.
     189         * @param icon The name of the icon.
     190         * @param title The title of this preference tab.
     191         * @param desc A description in one sentence for this tab. Will be displayed
     192         *              italic under the title.
     193         * @return The created panel ready to add other controls.
     194         */
     195        private JPanel createPreferenceTab(String icon, String title, String desc) {
     196                JPanel p = new JPanel(new GridBagLayout());
     197                p.add(new JLabel(title), GBC.eol().anchor(GBC.CENTER).insets(0,5,0,10));
     198                JLabel descLabel = new JLabel(desc);
     199                descLabel.setFont(descLabel.getFont().deriveFont(Font.ITALIC));
     200                p.add(descLabel, GBC.eol().insets(5,0,5,20));
     201
     202                tabPane.addTab(null, new ImageIcon("images/preferences/"+icon+".png"), p);
     203                return p;
     204        }
     205       
    166206        /**
    167207         * Remember, that the settings made requires a restart of the application.
     
    171211                requiresRestart = true;
    172212        }
    173 
    174         private JPanel newPanelLine() {
    175                 JPanel p;
    176                 p = new JPanel();
    177                 p.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    178                 ((Container)tabPanel.getComponent(tabPanel.getTabCount()-1)).add(p);
    179                 return p;
    180         }
    181213}
Note: See TracChangeset for help on using the changeset viewer.