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

see #7299 - Move features to expert mode

File:
1 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}
Note: See TracChangeset for help on using the changeset viewer.