Changeset 4753 in josm for trunk/src


Ignore:
Timestamp:
2011-12-30T20:24:38+01:00 (8 years ago)
Author:
jttt
Message:

Run in EDT

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java

    r4615 r4753  
    1818import javax.swing.JPopupMenu;
    1919import javax.swing.KeyStroke;
     20import javax.swing.SwingUtilities;
    2021import javax.swing.event.PopupMenuEvent;
    2122import javax.swing.event.PopupMenuListener;
     
    131132
    132133    private void showLayersPopup(final MyAction action) {
    133         JPopupMenu layers = new JPopupMenu();
    134 
    135         JMenuItem lbTitle = new JMenuItem((String) action.action.getValue(Action.SHORT_DESCRIPTION));
    136         lbTitle.setEnabled(false);
    137         JPanel pnTitle = new JPanel();
    138         pnTitle.add(lbTitle);
    139         layers.add(pnTitle);
    140 
    141         char repeatKey = (char) action.shortcut.getKeyCode();
    142         boolean repeatKeyUsed = false;
    143 
    144 
    145         for (final MultikeyInfo info: action.action.getMultikeyCombinations()) {
    146 
    147             if (info.getShortcut() == repeatKey) {
    148                 repeatKeyUsed = true;
     134        SwingUtilities.invokeLater(new Runnable() {
     135            @Override
     136            public void run() {
     137                JPopupMenu layers = new JPopupMenu();
     138
     139                JMenuItem lbTitle = new JMenuItem((String) action.action.getValue(Action.SHORT_DESCRIPTION));
     140                lbTitle.setEnabled(false);
     141                JPanel pnTitle = new JPanel();
     142                pnTitle.add(lbTitle);
     143                layers.add(pnTitle);
     144
     145                char repeatKey = (char) action.shortcut.getKeyCode();
     146                boolean repeatKeyUsed = false;
     147
     148
     149                for (final MultikeyInfo info: action.action.getMultikeyCombinations()) {
     150
     151                    if (info.getShortcut() == repeatKey) {
     152                        repeatKeyUsed = true;
     153                    }
     154
     155                    JMenuItem item = new JMenuItem(formatMenuText(action.shortcut, String.valueOf(info.getShortcut()), info.getDescription()));
     156                    item.setMnemonic(info.getShortcut());
     157                    item.addActionListener(new ActionListener() {
     158                        @Override
     159                        public void actionPerformed(ActionEvent e) {
     160                            action.action.executeMultikeyAction(info.getIndex(), false);
     161                        }
     162                    });
     163                    layers.add(item);
     164                }
     165
     166                if (!repeatKeyUsed) {
     167                    MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
     168                    if (lastLayer != null) {
     169                        JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut,
     170                                KeyEvent.getKeyText(action.shortcut.getKeyCode()),
     171                                "Repeat " + lastLayer.getDescription()));
     172                        repeateItem.setMnemonic(action.shortcut.getKeyCode());
     173                        repeateItem.addActionListener(new ActionListener() {
     174                            @Override
     175                            public void actionPerformed(ActionEvent e) {
     176                                action.action.executeMultikeyAction(-1, true);
     177                            }
     178                        });
     179                        layers.add(repeateItem);
     180                    }
     181                }
     182                layers.addPopupMenuListener(new PopupMenuListener() {
     183
     184                    @Override
     185                    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
     186
     187                    @Override
     188                    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
     189                        Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
     190                    }
     191
     192                    @Override
     193                    public void popupMenuCanceled(PopupMenuEvent e) {}
     194                });
     195
     196                layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
     197                layers.setLocation(Main.parent.getX() + Main.parent.getWidth() - layers.getWidth(), Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
    149198            }
    150 
    151             JMenuItem item = new JMenuItem(formatMenuText(action.shortcut, String.valueOf(info.getShortcut()), info.getDescription()));
    152             item.setMnemonic(info.getShortcut());
    153             item.addActionListener(new ActionListener() {
    154                 @Override
    155                 public void actionPerformed(ActionEvent e) {
    156                     action.action.executeMultikeyAction(info.getIndex(), false);
    157                 }
    158             });
    159             layers.add(item);
    160         }
    161 
    162         if (!repeatKeyUsed) {
    163             MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
    164             if (lastLayer != null) {
    165                 JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut,
    166                         KeyEvent.getKeyText(action.shortcut.getKeyCode()),
    167                         "Repeat " + lastLayer.getDescription()));
    168                 repeateItem.setMnemonic(action.shortcut.getKeyCode());
    169                 repeateItem.addActionListener(new ActionListener() {
    170                     @Override
    171                     public void actionPerformed(ActionEvent e) {
    172                         action.action.executeMultikeyAction(-1, true);
    173                     }
    174                 });
    175                 layers.add(repeateItem);
    176             }
    177         }
    178         layers.addPopupMenuListener(new PopupMenuListener() {
    179 
    180             @Override
    181             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
    182 
    183             @Override
    184             public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
    185                 Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
    186             }
    187 
    188             @Override
    189             public void popupMenuCanceled(PopupMenuEvent e) {}
    190199        });
    191 
    192         layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
    193         layers.setLocation(Main.parent.getX() + Main.parent.getWidth() - layers.getWidth(), Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
    194200    }
    195201
Note: See TracChangeset for help on using the changeset viewer.