Changeset 4843 in josm for trunk/src/org


Ignore:
Timestamp:
2012-01-22T09:48:05+01:00 (8 years ago)
Author:
bastiK
Message:

see #7299 - Move features to expert mode

Location:
trunk/src/org/openstreetmap/josm
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/ExpertToggleAction.java

    r4841 r4843  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Component;
    67import java.awt.event.ActionEvent;
    78import java.lang.ref.WeakReference;
     
    2425
    2526    private static final List<WeakReference<ExpertModeChangeListener>> listeners = new ArrayList<WeakReference<ExpertModeChangeListener>>();
     27    private static final List<WeakReference<Component>> visibilityToggleListeners = new ArrayList<WeakReference<Component>>();
     28
     29    private static ExpertToggleAction INSTANCE = new ExpertToggleAction();
    2630
    2731    private synchronized static void fireExpertModeChanged(boolean isExpert) {
    28         Iterator<WeakReference<ExpertModeChangeListener>> it = listeners.iterator();
    29         while (it.hasNext()) {
    30             WeakReference<ExpertModeChangeListener> wr = it.next();
    31             ExpertModeChangeListener listener = wr.get();
    32             if (listener == null) {
    33                 it.remove();
    34                 continue;
     32        {
     33            Iterator<WeakReference<ExpertModeChangeListener>> it = listeners.iterator();
     34            while (it.hasNext()) {
     35                WeakReference<ExpertModeChangeListener> wr = it.next();
     36                ExpertModeChangeListener listener = wr.get();
     37                if (listener == null) {
     38                    it.remove();
     39                    continue;
     40                }
     41                listener.expertChanged(isExpert);
    3542            }
    36             listener.expertChanged(isExpert);
     43        }
     44        {
     45            Iterator<WeakReference<Component>> it = visibilityToggleListeners.iterator();
     46            while (it.hasNext()) {
     47                WeakReference<Component> wr = it.next();
     48                Component c = wr.get();
     49                if (c == null) {
     50                    it.remove();
     51                    continue;
     52                }
     53                c.setVisible(isExpert);
     54            }
    3755        }
    3856    }
     
    5573        listeners.add(new WeakReference<ExpertModeChangeListener>(listener));
    5674        if (fireWhenAdding) {
    57             listener.expertChanged(Main.main.menu.expert.isSelected());
     75            listener.expertChanged(isExpert());
    5876        }
    5977    }
     
    7290            // collected in the meantime
    7391            if (wr.get() == null || wr.get() == listener) {
     92                it.remove();
     93            }
     94        }
     95    }
     96
     97    public synchronized static void addVisibilitySwitcher(Component c) {
     98        if (c == null) return;
     99        for (WeakReference<Component> wr : visibilityToggleListeners) {
     100            // already registered ? => abort
     101            if (wr.get() == c) return;
     102        }
     103        visibilityToggleListeners.add(new WeakReference<Component>(c));
     104        c.setVisible(isExpert());
     105    }
     106
     107    public synchronized static void removeVisibilitySwitcher(Component c) {
     108        if (c == null) return;
     109        Iterator<WeakReference<Component>> it = visibilityToggleListeners.iterator();
     110        while (it.hasNext()) {
     111            WeakReference<Component> wr = it.next();
     112            // remove the listener - and any other listener which god garbage
     113            // collected in the meantime
     114            if (wr.get() == null || wr.get() == c) {
    74115                it.remove();
    75116            }
     
    126167        return selected;
    127168    }
     169
     170    public static ExpertToggleAction getInstance() {
     171        return INSTANCE;
     172    }
     173
     174    public static boolean isExpert() {
     175        return INSTANCE.isSelected();
     176    }
    128177}
  • trunk/src/org/openstreetmap/josm/gui/IconToggleButton.java

    r4840 r4843  
    105105            String hiddenFlagStr = Main.pref.get(getPreferenceKey(), null);
    106106            if (hiddenFlagStr == null) {
    107                 if (isExpert && !Main.main.menu.expert.isSelected()) {
     107                if (isExpert && !ExpertToggleAction.isExpert()) {
    108108                    hiddenFlag = true;
    109109                }
     
    121121            if (!b) listener.buttonShown(); else listener.buttonHidden();
    122122        }
    123         if ((b && isExpert && !Main.main.menu.expert.isSelected()) ||
    124             (!b && isExpert && Main.main.menu.expert.isSelected())) {
     123        if ((b && isExpert && !ExpertToggleAction.isExpert()) ||
     124            (!b && isExpert && ExpertToggleAction.isExpert())) {
    125125            Main.pref.put(getPreferenceKey(), null);
    126126        } else {
  • trunk/src/org/openstreetmap/josm/gui/MainMenu.java

    r4840 r4843  
    22package org.openstreetmap.josm.gui;
    33
    4 import java.awt.Toolkit;
    54import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    65import static org.openstreetmap.josm.tools.I18n.marktr;
    76import static org.openstreetmap.josm.tools.I18n.tr;
    87
     8import java.awt.Component;
     9import java.awt.Toolkit;
    910import java.awt.event.KeyEvent;
    1011
     
    159160    public final HistoryInfoAction historyinfo = new HistoryInfoAction();
    160161    public final HistoryInfoWebAction historyinfoweb = new HistoryInfoWebAction();
    161     public final ExpertToggleAction expert = new ExpertToggleAction();
    162162
    163163    /* Tools menu */
     
    265265     */
    266266    public static JMenuItem add(JMenu menu, JosmAction action) {
     267        return add(menu, action, false);
     268    }
     269
     270    public static JMenuItem add(JMenu menu, JosmAction action, boolean isExpert) {
    267271        if (action.getShortcut().getAutomatic())
    268272            return null;
    269273        JMenuItem menuitem = menu.add(action);
    270             KeyStroke ks = action.getShortcut().getKeyStroke();
    271             if (ks != null) {
    272                 menuitem.setAccelerator(ks);
    273             }
     274        if (isExpert) {
     275            ExpertToggleAction.addVisibilitySwitcher(menuitem);
     276        }
     277        KeyStroke ks = action.getShortcut().getKeyStroke();
     278        if (ks != null) {
     279            menuitem.setAccelerator(ks);
     280        }
    274281        return menuitem;
    275282    }
     
    375382            fileMenu.add(sessionMenu);
    376383        }
    377         add(fileMenu, gpxExport);
     384        add(fileMenu, gpxExport, true);
    378385        fileMenu.addSeparator();
    379386        add(fileMenu, download);
     
    386393        add(fileMenu, upload);
    387394        add(fileMenu, uploadSelection);
    388         fileMenu.addSeparator();
    389         add(fileMenu, closeChangesetAction);
     395        Component sep = new JPopupMenu.Separator();
     396        fileMenu.add(sep);
     397        ExpertToggleAction.addVisibilitySwitcher(sep);
     398        add(fileMenu, closeChangesetAction, true);
    390399        fileMenu.addSeparator();
    391400        add(fileMenu, exit);
     
    395404        editMenu.addSeparator();
    396405        add(editMenu, copy);
    397         add(editMenu, copyCoordinates);
     406        add(editMenu, copyCoordinates, true);
    398407        add(editMenu, paste);
    399408        add(editMenu, pasteTags);
    400409        add(editMenu, duplicate);
    401410        add(editMenu, delete);
    402         add(editMenu, purge);
     411        add(editMenu, purge, true);
    403412        editMenu.addSeparator();
    404413        add(editMenu,merge);
     
    430439        ViewportFollowToggleAction viewportFollowToggleAction = new ViewportFollowToggleAction();
    431440        final JCheckBoxMenuItem vft = new JCheckBoxMenuItem(viewportFollowToggleAction);
     441        ExpertToggleAction.addVisibilitySwitcher(vft);
    432442        viewMenu.add(vft);
    433443        vft.setAccelerator(viewportFollowToggleAction.getShortcut().getKeyStroke());
     
    450460        viewMenu.addSeparator();
    451461        // -- expert mode toggle action
    452         final JCheckBoxMenuItem expertItem = new JCheckBoxMenuItem(expert);
     462        final JCheckBoxMenuItem expertItem = new JCheckBoxMenuItem(ExpertToggleAction.getInstance());
    453463        viewMenu.add(expertItem);
    454         expert.addButtonModel(expertItem.getModel());
     464        ExpertToggleAction.getInstance().addButtonModel(expertItem.getModel());
    455465
    456466        add(presetsMenu, presetSearchAction);
     
    467477        add(toolsMenu, distribute);
    468478        add(toolsMenu, ortho);
    469         add(toolsMenu, mirror);
     479        add(toolsMenu, mirror, true);
    470480        toolsMenu.addSeparator();
    471         add(toolsMenu, followLine);
    472         add(toolsMenu, addnode);
    473         add(toolsMenu, movenode);
     481        add(toolsMenu, followLine, true);
     482        add(toolsMenu, addnode, true);
     483        add(toolsMenu, movenode, true);
    474484        add(toolsMenu, createCircle);
    475485        toolsMenu.addSeparator();
  • trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java

    r4840 r4843  
    1818import org.openstreetmap.josm.Main;
    1919import org.openstreetmap.josm.actions.ExpertToggleAction;
    20 import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
    2120import org.openstreetmap.josm.tools.GBC;
    2221
    23 public class DrawingPreference implements PreferenceSetting, ExpertModeChangeListener {
     22public class DrawingPreference implements PreferenceSetting {
    2423
    2524    public static class Factory implements PreferenceSettingFactory {
     
    3938
    4039    // Options that affect performance
    41     private JLabel performanceLabel = new JLabel(tr("Options that affect drawing performance"));
    4240    private JCheckBox useHighlighting = new JCheckBox(tr("Highlight target ways and nodes"));
    4341    private JCheckBox drawHelperLine = new JCheckBox(tr("Draw rubber-band helper line"));
     
    119117        outlineOnly.setToolTipText(tr("This option suppresses the filling of areas, overriding anything specified in the selected style."));
    120118
     119        JLabel performanceLabel = new JLabel(tr("Options that affect drawing performance"));
    121120        panel.add(performanceLabel, GBC.eop().insets(5,10,0,0));
    122121        panel.add(useAntialiasing, GBC.eop().insets(20,5,0,0));
     
    124123        panel.add(outlineOnly, GBC.eol().insets(20,0,0,5));
    125124
     125        ExpertToggleAction.addVisibilitySwitcher(performanceLabel);
     126        ExpertToggleAction.addVisibilitySwitcher(useAntialiasing);
     127        ExpertToggleAction.addVisibilitySwitcher(useHighlighting);
     128        ExpertToggleAction.addVisibilitySwitcher(outlineOnly);
     129
    126130        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
    127131        scrollpane = new JScrollPane(panel);
    128132        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
    129133        gui.displaycontent.addTab(tr("OSM Data"), scrollpane);
    130 
    131         ExpertToggleAction.addExpertModeChangeListener(this, true);
    132     }
    133 
    134     @Override
    135     public void expertChanged(boolean isExpert) {
    136         performanceLabel.setVisible(isExpert);
    137         useAntialiasing.setVisible(isExpert);
    138         useHighlighting.setVisible(isExpert);
    139         outlineOnly.setVisible(isExpert);
    140134    }
    141135
  • trunk/src/org/openstreetmap/josm/gui/preferences/LafPreference.java

    r4840 r4843  
    2222import org.openstreetmap.josm.Main;
    2323import org.openstreetmap.josm.actions.ExpertToggleAction;
    24 import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
    2524import org.openstreetmap.josm.tools.GBC;
    2625
    27 public class LafPreference implements PreferenceSetting, ExpertModeChangeListener {
     26public class LafPreference implements PreferenceSetting {
    2827
    2928    public static class Factory implements PreferenceSettingFactory {
     
    9089        showLocalizedName.setToolTipText(tr("Show localized name in selection lists, if available"));
    9190        showLocalizedName.setSelected(Main.pref.getBoolean("osm-primitives.localize-name", true));
    92 
     91        ExpertToggleAction.addVisibilitySwitcher(showLocalizedName);
    9392
    9493        modeless.setToolTipText(tr("Do not require to switch modes (potlatch style workflow)"));
    9594        modeless.setSelected(Main.pref.getBoolean("modeless", false));
     95        ExpertToggleAction.addVisibilitySwitcher(modeless);
    9696
    9797        panel.add(showID, GBC.eop().insets(20, 0, 0, 0));
     
    112112        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
    113113        gui.displaycontent.addTab(tr("Look and Feel"), scrollpane);
    114 
    115         ExpertToggleAction.addExpertModeChangeListener(this, true);
    116     }
    117 
    118     @Override
    119     public void expertChanged(boolean isExpert) {
    120         showLocalizedName.setVisible(isExpert);
    121         modeless.setVisible(isExpert);
    122114    }
    123115
  • trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java

    r4840 r4843  
    2828
    2929import org.openstreetmap.josm.Main;
     30import org.openstreetmap.josm.actions.ExpertToggleAction;
    3031import org.openstreetmap.josm.gui.SideButton;
    3132import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
     
    4546
    4647        JCheckBox expert = new JCheckBox(tr("Expert mode"));
    47         expert.setSelected(Main.main.menu.expert.isSelected());
     48        expert.setSelected(ExpertToggleAction.isExpert());
    4849        expert.addActionListener(new ActionListener() {
    4950            public void actionPerformed(ActionEvent e) {
    50                 Main.main.menu.expert.actionPerformed(null);
     51                ExpertToggleAction.getInstance().actionPerformed(null);
    5152            }
    5253        });
  • trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java

    r4840 r4843  
    278278
    279279    private void addGUITabs(boolean clear) {
    280         boolean expert = Main.main.menu.expert.isSelected();
     280        boolean expert = ExpertToggleAction.isExpert();
    281281        Component sel = getSelectedComponent();
    282282        if (clear) {
Note: See TracChangeset for help on using the changeset viewer.