Changeset 4843 in josm


Ignore:
Timestamp:
22.01.2012 09:48:05 (4 months 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.