Changeset 5631 in josm


Ignore:
Timestamp:
2012-12-25T23:43:22+01:00 (12 years ago)
Author:
Don-vip
Message:

Allow to access directly to validator preferences from validator dialog with a small preferences button left to pin button.
Generic approach in order to be reused by plugins using dialogs.
This leads to some changes in preferences settings system, but without any break in compatibility.
The only impact is the deprecation of some public JTabbedPane fields, that will be removed mid-2013.

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r5463 r5631  
    5757import org.openstreetmap.josm.gui.help.HelpUtil;
    5858import org.openstreetmap.josm.gui.help.Helpful;
     59import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
     60import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
     61import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
     62import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
    5963import org.openstreetmap.josm.tools.Destroyable;
    6064import org.openstreetmap.josm.tools.GBC;
     
    139143     */
    140144    protected JCheckBoxMenuItem windowMenuItem;
     145   
     146    /**
     147     * The linked preferences class (optional). If set, accessible from the title bar with a dedicated button
     148     */
     149    protected Class<? extends PreferenceSetting> preferenceClass;
    141150
    142151    /**
     
    146155    public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight) {
    147156        this(name, iconName, tooltip, shortcut, preferredHeight, false);
     157    }
     158    /**
     159     * Constructor
     160     * (see below)
     161     */
     162    public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight, boolean defShow) {
     163        this(name, iconName, tooltip, shortcut, preferredHeight, defShow, null);
    148164    }
    149165    /**
     
    156172     * @param preferredHeight the preferred height for the dialog
    157173     * @param defShow if the dialog should be shown by default, if there is no preference
    158      */
    159     public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight, boolean defShow) {
     174     * @param prefClass the preferences settings class, or null if not applicable
     175     */
     176    public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight, boolean defShow, Class<? extends PreferenceSetting> prefClass) {
    160177        super(new BorderLayout());
    161178        this.preferencePrefix = iconName;
    162179        this.name = name;
     180        this.preferenceClass = prefClass;
    163181
    164182        /** Use the full width of the parent element */
     
    522540                add(buttonsHide);
    523541            }
     542           
     543            // show the pref button if applicable
     544            if (preferenceClass != null) {
     545                inIcon = ImageProvider.get("preference");
     546                smallIcon = new ImageIcon(inIcon.getImage().getScaledInstance(16 , 16, Image.SCALE_SMOOTH));
     547                JButton pref = new JButton(smallIcon);
     548                pref.setToolTipText(tr("Open preferences for this panel"));
     549                pref.setBorder(BorderFactory.createEmptyBorder());
     550                pref.addActionListener(
     551                        new ActionListener(){
     552                            @SuppressWarnings("unchecked")
     553                            public void actionPerformed(ActionEvent e) {
     554                                final PreferenceDialog p = new PreferenceDialog(Main.parent);
     555                                if (TabPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
     556                                    p.selectPreferencesTabByClass((Class<? extends TabPreferenceSetting>) preferenceClass);
     557                                } else if (SubPreferenceSetting.class.isAssignableFrom(preferenceClass)) {
     558                                    p.selectSubPreferencesTabByClass((Class<? extends SubPreferenceSetting>) preferenceClass);
     559                                }
     560                                p.setVisible(true);
     561                            }
     562                        }
     563                        );
     564                add(pref);
     565            }
    524566
    525567            // show the sticky button
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java

    r5532 r5631  
    22package org.openstreetmap.josm.gui.dialogs;
    33
    4 import static org.openstreetmap.josm.tools.I18n.marktr;
    54import static org.openstreetmap.josm.tools.I18n.tr;
    65
     
    9392        super(tr("Validation Results"), "validator", tr("Open the validation window."),
    9493                Shortcut.registerShortcut("subwindow:validator", tr("Toggle: {0}", tr("Validation results")),
    95                         KeyEvent.VK_V, Shortcut.ALT_SHIFT), 150);
     94                        KeyEvent.VK_V, Shortcut.ALT_SHIFT), 150, false, ValidatorPreference.class);
    9695
    9796        popupMenu = new JPopupMenu();
  • trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java

    r4976 r5631  
    22package org.openstreetmap.josm.gui.preferences;
    33
     4import java.awt.Component;
     5import java.util.HashMap;
     6import java.util.Map;
     7
    48import javax.swing.JPanel;
    59import javax.swing.JScrollPane;
     10import javax.swing.JTabbedPane;
    611
    712import org.openstreetmap.josm.tools.GBC;
     
    1217    private final String description;
    1318    private final String title;
     19    private final JTabbedPane tabpane;
     20    private final Map<SubPreferenceSetting, Component> subSettingMap;
    1421   
    1522    public DefaultTabPreferenceSetting() {
     
    2229
    2330    public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert) {
     31        this(iconName, title, description, isExpert, null);
     32    }
     33
     34    public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert, JTabbedPane tabpane) {
    2435        super(isExpert);
    2536        this.iconName = iconName;
    2637        this.description = description;
    2738        this.title = title;
     39        this.tabpane = tabpane;
     40        this.subSettingMap = tabpane != null ? new HashMap<SubPreferenceSetting, Component>() : null;
    2841    }
    2942
     
    5164        return title;
    5265    }
     66
     67    /**
     68     * Get the inner tab pane, if any.
     69     * @return The JTabbedPane contained in this tab preference settings, or null if none is set.
     70     * @since 5631
     71     */
     72    public final JTabbedPane getTabPane() {
     73        return tabpane;
     74    }
    5375   
    5476    protected final void createPreferenceTabWithScrollPane(PreferenceTabbedPane gui, JPanel panel) {
     
    6385        tab.add(GBC.glue(0,10), a);
    6486    }
     87
     88    @Override
     89    public boolean selectSubTab(SubPreferenceSetting subPref) {
     90        if (tabpane != null && subPref != null) {
     91            Component tab = getSubTab(subPref);
     92            if (tab != null) {
     93                try {
     94                    tabpane.setSelectedComponent(tab);
     95                    return true;
     96                } catch (IllegalArgumentException e) {
     97                    // Ignore exception and return false below
     98                    e.printStackTrace();
     99                    System.out.println(tabpane.getTabCount());
     100                    for (int i = 0; i < tabpane.getTabCount() ; i++) {
     101                        System.out.println(tabpane.getComponentAt(i));
     102                    }
     103                }
     104            }
     105        }
     106        return false;
     107    }
     108   
     109    @Override
     110    public final void addSubTab(SubPreferenceSetting sub, String title, Component component) {
     111        addSubTab(sub, title, component, null);
     112    }
     113   
     114    @Override
     115    public final void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip) {
     116        if (tabpane != null && component != null) {
     117            tabpane.addTab(title, null, component, tip);
     118            registerSubTab(sub, component);
     119        }
     120    }
     121   
     122    @Override
     123    public final void registerSubTab(SubPreferenceSetting sub, Component component) {
     124        if (subSettingMap != null && sub != null && component != null) {
     125            subSettingMap.put(sub, component);
     126        }
     127    }
     128   
     129    @Override
     130    public final Component getSubTab(SubPreferenceSetting sub) {
     131        return subSettingMap != null ? subSettingMap.get(sub) : null;
     132    }
    65133}
  • trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java

    r5601 r5631  
    6161
    6262    private PluginPreference() {
    63         super("plugin", tr("Plugins"), tr("Configure available plugins."));
     63        super("plugin", tr("Plugins"), tr("Configure available plugins."), false, new JTabbedPane());
    6464    }
    6565
     
    163163    }
    164164
    165     protected JPanel buildContentPanel() {
    166         JPanel pnl = new JPanel(new BorderLayout());
    167         JTabbedPane tpPluginPreferences = new JTabbedPane();
    168         tpPluginPreferences.add(buildPluginListPanel());
    169         tpPluginPreferences.add(pnlPluginUpdatePolicy  =new PluginUpdatePolicyPanel());
    170         tpPluginPreferences.setTitleAt(0, tr("Plugins"));
    171         tpPluginPreferences.setTitleAt(1, tr("Plugin update policy"));
    172 
    173         pnl.add(tpPluginPreferences, BorderLayout.CENTER);
    174         return pnl;
     165    protected JTabbedPane buildContentPane() {
     166        JTabbedPane pane = getTabPane();
     167        pane.addTab(tr("Plugins"), buildPluginListPanel());
     168        pane.addTab(tr("Plugin update policy"), pnlPluginUpdatePolicy = new PluginUpdatePolicyPanel());
     169        return pane;
    175170    }
    176171
     
    182177        gc.fill = GridBagConstraints.BOTH;
    183178        PreferencePanel plugins = gui.createPreferenceTab(this);
    184         plugins.add(buildContentPanel(), gc);
     179        plugins.add(buildContentPane(), gc);
    185180        readLocalPluginInformation();
    186181        pluginPreferencesActivated = true;
  • trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java

    r5604 r5631  
    3232import org.openstreetmap.josm.gui.help.HelpUtil;
    3333import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
    34 import org.openstreetmap.josm.gui.preferences.map.MapPreference;
     34import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
    3535import org.openstreetmap.josm.tools.GBC;
    3636import org.openstreetmap.josm.tools.ImageProvider;
     
    135135    }
    136136
     137    public void selectSubPreferencesTabByClass(Class<? extends SubPreferenceSetting> clazz) {
     138        tpPreferences.selectSubTabByPref(clazz);
     139    }
     140
    137141    class CancelAction extends AbstractAction {
    138142        public CancelAction() {
     
    181185
    182186    public void selectMapPaintPreferenceTab() {
    183         tpPreferences.selectTabByPref(MapPreference.class);
    184         tpPreferences.getMapPreference().mapcontent.setSelectedIndex(1);
     187        tpPreferences.selectSubTabByPref(MapPaintPreference.class);
    185188    }
    186189}
  • trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java

    r5454 r5631  
    208208                return tps.getClass().isAssignableFrom((Class<?>) clazz);
    209209            }}, clazz);
     210    }
     211   
     212    public boolean selectSubTabByPref(Class<? extends SubPreferenceSetting> clazz) {
     213        for (PreferenceSetting setting : settings) {
     214            if (clazz.isInstance(setting)) {
     215                final SubPreferenceSetting sub = (SubPreferenceSetting) setting;
     216                final TabPreferenceSetting tab = sub.getTabPreferenceSetting(PreferenceTabbedPane.this);
     217                selectTabBy(new TabIdentifier(){
     218                    @Override
     219                    public boolean identify(TabPreferenceSetting tps, Object unused) {
     220                        return tps.equals(tab);
     221                    }}, null);
     222                return tab.selectSubTab(sub);
     223            }
     224        }
     225        return false;
    210226    }
    211227
  • trunk/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java

    r5266 r5631  
    2727   
    2828    private ServerAccessPreference() {
    29         super("connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."));
     29        super("connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."), false, new JTabbedPane());
    3030    }
    3131
    3232    private OsmApiUrlInputPanel pnlApiUrlPreferences;
    3333
    34     private JTabbedPane tpServerPreferences;
    3534    /** indicates whether to use the default OSM URL or not */
    3635    /** panel for configuring authentication preferences */
     
    6059        JPanel pnl = new JPanel(new BorderLayout());
    6160
    62         tpServerPreferences = new JTabbedPane();
     61        JTabbedPane tpServerPreferences = getTabPane();
    6362        pnlAuthPreferences = new AuthenticationPreferencesPanel();
    6463        tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlAuthPreferences));
  • trunk/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java

    r4989 r5631  
    11// License: GPL. Copyright 2007 by Immanuel Scholz and others
    22package org.openstreetmap.josm.gui.preferences;
     3
     4import java.awt.Component;
    35
    46/**
     
    2931    /**
    3032     * Called during preferences tab initialization to display a description in one sentence for this tab.
    31      * Will be displayedin italic under the title.
     33     * Will be displayed in italic under the title.
    3234     * @return The description of this preferences tab.
    3335     */
    3436    public String getDescription();
     37
     38    /**
     39     * Adds a new sub preference settings tab with the given title and component.
     40     * @param sub The new sub preference settings.
     41     * @param title The tab title.
     42     * @param component The tab component.
     43     * @since 5631
     44     */
     45    public void addSubTab(SubPreferenceSetting sub, String title, Component component);
     46   
     47    /**
     48     * Adds a new sub preference settings tab with the given title, component and tooltip.
     49     * @param sub The new sub preference settings.
     50     * @param title The tab title.
     51     * @param component The tab component.
     52     * @param tip The tab tooltip.
     53     * @since 5631
     54     */
     55    public void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip);
     56
     57    /**
     58     * Registers a sub preference settings to an existing tab component.
     59     * @param sub The new sub preference settings.
     60     * @param component The component for which a tab already exists.
     61     * @since 5631
     62     */
     63    public void registerSubTab(SubPreferenceSetting sub, Component component);
     64   
     65    /**
     66     * Returns the tab component related to the specified sub preference settings
     67     * @param sub The requested sub preference settings.
     68     * @return The component related to the specified sub preference settings, or null.
     69     * @since 5631
     70     */
     71    public Component getSubTab(SubPreferenceSetting sub);
     72
     73    /**
     74     * Selects the specified sub preference settings, if applicable. Not all Tab preference settings need to implement this.
     75     * @param subPref The sub preference settings to be selected.
     76     * @return true if the specified preference settings have been selected, false otherwise.
     77     * @since 5631
     78     */
     79    public boolean selectSubTab(SubPreferenceSetting subPref);
    3580}
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java

    r4968 r5631  
    239239        buttonPanel.add(defaultAll, GBC.std().insets(0,5,0,0));
    240240        buttonPanel.add(remove, GBC.std().insets(0,5,0,0));
    241         gui.getDisplayPreference().displaycontent.addTab(tr("Colors"), panel);
     241        gui.getDisplayPreference().addSubTab(this, tr("Colors"), panel);
    242242    }
    243243
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/DisplayPreference.java

    r4969 r5631  
    2020   
    2121    private DisplayPreference() {
    22         super("display", tr("Display Settings"), tr("Various settings that influence the visual representation of the whole program."));
     22        super("display", tr("Display Settings"), tr("Various settings that influence the visual representation of the whole program."), false, new JTabbedPane());
     23        displaycontent = getTabPane();
    2324    }
    2425   
    25     public final JTabbedPane displaycontent = new JTabbedPane();
     26    /**
     27     * @deprecated Use {@link #getTabPane()} instead. This field will be removed mid-2013.
     28     */
     29    public final JTabbedPane displaycontent;
    2630   
    2731    @Override
     
    3236    @Override
    3337    public void addGui(PreferenceTabbedPane gui) {
    34         gui.createPreferenceTab(this).add(displaycontent, GBC.eol().fill(GBC.BOTH));
     38        gui.createPreferenceTab(this).add(getTabPane(), GBC.eol().fill(GBC.BOTH));
    3539    }
    3640}
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java

    r5568 r5631  
    5656        JScrollPane scrollpane = new JScrollPane(panel);
    5757        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
    58         gui.getDisplayPreference().displaycontent.addTab(tr("GPS Points"), scrollpane);
     58        gui.getDisplayPreference().addSubTab(this, tr("GPS Points"), scrollpane);
    5959        panel = new JPanel(new GridBagLayout());
    6060        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     
    142142        scrollpane = new JScrollPane(panel);
    143143        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
    144         gui.getDisplayPreference().displaycontent.addTab(tr("OSM Data"), scrollpane);
     144        gui.getDisplayPreference().addSubTab(this, tr("OSM Data"), scrollpane);
    145145    }
    146146
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java

    r5429 r5631  
    116116        JScrollPane scrollpane = new JScrollPane(panel);
    117117        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
    118         gui.getDisplayPreference().displaycontent.addTab(tr("Look and Feel"), scrollpane);
     118        gui.getDisplayPreference().addSubTab(this, tr("Look and Feel"), scrollpane);
    119119    }
    120120
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java

    r5429 r5631  
    5454        panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
    5555        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
     56       
     57        TabPreferenceSetting tabPref = lafPreference.getTabPreferenceSetting(gui);
     58        tabPref.registerSubTab(this, tabPref.getSubTab(lafPreference));
    5659    }
    5760
     
    120123    @Override
    121124    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
    122         return gui.getDisplayPreference();
     125        return gui.getSetting(LafPreference.class).getTabPreferenceSetting(gui);
    123126    }
    124127}
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java

    r5617 r5631  
    7676
    7777    private ImageryPreference() {
    78         super("imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"));
     78        super("imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"), false, new JTabbedPane());
    7979    }
    8080
     
    115115    public void addGui(final PreferenceTabbedPane gui) {
    116116        JPanel p = gui.createPreferenceTab(this);
    117         JTabbedPane pane = new JTabbedPane();
     117        JTabbedPane pane = getTabPane();
    118118        layerInfo = new ImageryLayerInfo(ImageryLayerInfo.instance);
    119119        imageryProviders = new ImageryProvidersPanel(gui, layerInfo);
    120         pane.add(imageryProviders);
    121         pane.add(buildSettingsPanel(gui));
    122         pane.add(new OffsetBookmarksPanel(gui));
     120        pane.addTab(tr("Imagery providers"), imageryProviders);
     121        pane.addTab(tr("Settings"), buildSettingsPanel(gui));
     122        pane.addTab(tr("Offset bookmarks"), new OffsetBookmarksPanel(gui));
    123123        loadSettings();
    124         pane.setTitleAt(0, tr("Imagery providers"));
    125         pane.setTitleAt(1, tr("Settings"));
    126         pane.setTitleAt(2, tr("Offset bookmarks"));
    127124        p.add(pane,GBC.std().fill(GBC.BOTH));
    128125    }
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java

    r4968 r5631  
    101101        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    102102
    103         gui.getMapPreference().mapcontent.addTab(tr("File backup"), null, sp, tr("Configure whether to create backup files"));
     103        gui.getMapPreference().addSubTab(this, tr("File backup"), sp, tr("Configure whether to create backup files"));
    104104    }
    105105
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java

    r5220 r5631  
    6565        panel.add(enableIconDefault, GBC.eol().insets(11,2,5,0));
    6666
    67         gui.getMapPreference().mapcontent.addTab(tr("Map Paint Styles"), panel);
     67        gui.getMapPreference().addSubTab(this, tr("Map Paint Styles"), panel);
    6868
    6969        // this defers loading of style sources to the first time the tab
    7070        // with the map paint preferences is selected by the user
    7171        //
    72         gui.getMapPreference().mapcontent.addChangeListener(
     72        gui.getMapPreference().getTabPane().addChangeListener(
    7373                new ChangeListener() {
    7474                    public void stateChanged(ChangeEvent e) {
    75                         if (gui.getMapPreference().mapcontent.getSelectedComponent() == panel) {
     75                        if (gui.getMapPreference().getTabPane().getSelectedComponent() == panel) {
    7676                            sources.initiallyLoadAvailableSources();
    7777                        }
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPreference.java

    r4969 r5631  
    2020   
    2121    private MapPreference() {
    22         super("map", tr("Map Settings"), tr("Settings for the map projection and data interpretation."));
     22        super("map", tr("Map Settings"), tr("Settings for the map projection and data interpretation."), false, new JTabbedPane());
     23        mapcontent = getTabPane();
    2324    }
    2425   
    25     public final JTabbedPane mapcontent = new JTabbedPane();
     26    /**
     27     * @deprecated Use {@link #getTabPane()} instead. This field will be removed mid-2013.
     28     */
     29    public final JTabbedPane mapcontent; // FIXME remove it mid 2013
    2630   
    2731    @Override
     
    3236    @Override
    3337    public void addGui(PreferenceTabbedPane gui) {
    34         gui.createPreferenceTab(this).add(mapcontent, GBC.eol().fill(GBC.BOTH));
     38        gui.createPreferenceTab(this).add(getTabPane(), GBC.eol().fill(GBC.BOTH));
    3539    }
    3640}
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java

    r5220 r5631  
    163163        sources = new TaggingPresetSourceEditor();
    164164        panel.add(sources, GBC.eol().fill(GBC.BOTH));
    165         gui.getMapPreference().mapcontent.addTab(tr("Tagging Presets"), panel);
     165        gui.getMapPreference().addSubTab(this, tr("Tagging Presets"), panel);
    166166
    167167        // this defers loading of tagging preset sources to the first time the tab
    168168        // with the tagging presets is selected by the user
    169169        //
    170         gui.getMapPreference().mapcontent.addChangeListener(
     170        gui.getMapPreference().getTabPane().addChangeListener(
    171171                new ChangeListener() {
    172172                    public void stateChanged(ChangeEvent e) {
    173                         if (gui.getMapPreference().mapcontent.getSelectedComponent() == panel) {
     173                        if (gui.getMapPreference().getTabPane().getSelectedComponent() == panel) {
    174174                            sources.initiallyLoadAvailableSources();
    175175                        }
  • trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java

    r5604 r5631  
    319319
    320320        JScrollPane scrollpane = new JScrollPane(projPanel);
    321         gui.getMapPreference().mapcontent.addTab(tr("Map Projection"), scrollpane);
     321        gui.getMapPreference().addSubTab(this, tr("Map Projection"), scrollpane);
    322322
    323323        selectedProjectionChanged(pc);
Note: See TracChangeset for help on using the changeset viewer.