Changeset 3252 in josm


Ignore:
Timestamp:
15.05.2010 18:59:10 (21 months ago)
Author:
jttt
Message:

Fix #2234: Translation can cause JosmActions to illegally handle shortcuts

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

Legend:

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

    r3071 r3252  
    2727import java.util.regex.Pattern; 
    2828 
     29import javax.swing.Action; 
     30import javax.swing.InputMap; 
    2931import javax.swing.JComponent; 
    3032import javax.swing.JFrame; 
    3133import javax.swing.JOptionPane; 
    3234import javax.swing.JPanel; 
     35import javax.swing.KeyStroke; 
    3336import javax.swing.UIManager; 
    3437 
     
    198201        isOpenjdk = System.getProperty("java.vm.name").toUpperCase().indexOf("OPENJDK") != -1; 
    199202        platform.startupHook(); 
    200         contentPane.add(panel, BorderLayout.CENTER); 
     203        contentPanePrivate.add(panel, BorderLayout.CENTER); 
    201204        panel.add(gettingStarted, BorderLayout.CENTER); 
    202205        menu = new MainMenu(); 
     
    205208 
    206209        // creating toolbar 
    207         contentPane.add(toolbar.control, BorderLayout.NORTH); 
    208  
    209         contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
    210         .put(Shortcut.registerShortcut("system:help", tr("Help"), 
    211                 KeyEvent.VK_F1, Shortcut.GROUP_DIRECT).getKeyStroke(), "Help"); 
    212         contentPane.getActionMap().put("Help", menu.help); 
     210        contentPanePrivate.add(toolbar.control, BorderLayout.NORTH); 
     211 
     212        registerActionShortcut(menu.help, Shortcut.registerShortcut("system:help", tr("Help"), 
     213                KeyEvent.VK_F1, Shortcut.GROUP_DIRECT)); 
    213214 
    214215        TaggingPresetPreference.initialize(); 
     
    218219 
    219220        toolbar.control.updateUI(); 
    220         contentPane.updateUI(); 
     221        contentPanePrivate.updateUI(); 
    221222    } 
    222223 
     
    226227    public final void addLayer(final Layer layer) { 
    227228        if (map == null) { 
    228             final MapFrame mapFrame = new MapFrame(); 
     229            final MapFrame mapFrame = new MapFrame(contentPanePrivate); 
    229230            setMapFrame(mapFrame); 
    230231            mapFrame.selectMapMode((MapMode)mapFrame.getDefaultButtonAction()); 
     
    281282    } 
    282283 
    283     /** 
    284      * Use this to register shortcuts to 
    285      */ 
    286     public static final JPanel contentPane = new JPanel(new BorderLayout()); 
     284    protected static JPanel contentPanePrivate = new JPanel(new BorderLayout()); 
     285 
     286    /** 
     287     * @deprecated If you just need to register shortcut for action, use registerActionShortcut instead of accessing InputMap directly 
     288     */ 
     289    @Deprecated 
     290    public static final JPanel contentPane = contentPanePrivate; 
     291 
     292    public static void registerActionShortcut(Action action, Shortcut shortcut) { 
     293        registerActionShortcut(action, shortcut.getKeyStroke()); 
     294    } 
     295 
     296    public static void registerActionShortcut(Action action, KeyStroke keyStroke) { 
     297        if (keyStroke == null) 
     298            return; 
     299 
     300        InputMap inputMap = contentPanePrivate.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 
     301        Object existing = inputMap.get(keyStroke); 
     302        if (existing != null && !existing.equals(action)) { 
     303            System.out.println(String.format("Keystroke is already assigned to %s, will be overridden by %s", existing, action)); 
     304        } 
     305        inputMap.put(keyStroke, action); 
     306 
     307        contentPanePrivate.getActionMap().put(action, action); 
     308    } 
     309 
     310    public static void unregisterActionShortcut(Shortcut shortcut) { 
     311        contentPanePrivate.getInputMap().remove(shortcut.getKeyStroke()); 
     312    } 
    287313 
    288314    /////////////////////////////////////////////////////////////////////////// 
     
    324350            } 
    325351            toolbar = new ToolbarPreferences(); 
    326             contentPane.updateUI(); 
     352            contentPanePrivate.updateUI(); 
    327353            panel.updateUI(); 
    328354        } catch (final Exception e) { 
  • trunk/src/org/openstreetmap/josm/actions/JosmAction.java

    r3244 r3252  
    77 
    88import javax.swing.AbstractAction; 
    9 import javax.swing.JComponent; 
    109 
    1110import org.openstreetmap.josm.Main; 
     
    7271        sc = shortcut; 
    7372        if (sc != null) { 
    74             Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sc.getKeyStroke(), name); 
    75             Main.contentPane.getActionMap().put(name, this); 
     73            Main.registerActionShortcut(this, sc); 
    7674        } 
    7775        putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc)); 
     
    9088    public void destroy() { 
    9189        if (sc != null) { 
    92             Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).remove(sc.getKeyStroke()); 
    93             Main.contentPane.getActionMap().remove(sc.getKeyStroke()); 
     90            Main.unregisterActionShortcut(sc); 
    9491        } 
    9592        MapView.removeLayerChangeListener(layerChangeAdapter); 
  • trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java

    r2512 r3252  
    22package org.openstreetmap.josm.actions; 
    33 
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    45import static org.openstreetmap.josm.tools.I18n.tr; 
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    66 
    77import java.awt.event.ActionEvent; 
    88import java.awt.event.KeyEvent; 
    9  
    10 import javax.swing.JComponent; 
    119 
    1210import org.openstreetmap.josm.Main; 
     
    2220 
    2321        // Add extra shortcut C-S-a 
    24         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( 
    25                 Shortcut.registerShortcut("edit:unselectallfocus", tr("Edit: {0}", tr("Unselect All (Focus)")), 
    26                         KeyEvent.VK_A, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT).getKeyStroke(), 
    27                         tr("Unselect All")); 
     22        Main.registerActionShortcut(this, Shortcut.registerShortcut("edit:unselectallfocus", tr("Edit: {0}", tr("Unselect All (Focus)")), 
     23                KeyEvent.VK_A, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT)); 
     24 
     25 
    2826 
    2927        // Add extra shortcut ESCAPE 
     
    3331         * for now this is a reasonable approximation. 
    3432         */ 
    35         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( 
    36                 Shortcut.registerShortcut("edit:unselectallescape", tr("Edit: {0}", tr("Unselect All (Escape)")), 
    37                         KeyEvent.VK_ESCAPE, Shortcut.GROUP_DIRECT).getKeyStroke(), 
    38                         tr("Unselect All")); 
     33        Main.registerActionShortcut(this, Shortcut.registerShortcut("edit:unselectallescape", tr("Edit: {0}", tr("Unselect All (Escape)")), 
     34                KeyEvent.VK_ESCAPE, Shortcut.GROUP_DIRECT)); 
    3935 
    4036        putValue("help", ht("/Action/UnselectAll")); 
  • trunk/src/org/openstreetmap/josm/actions/ZoomInAction.java

    r3083 r3252  
    88import java.awt.event.KeyEvent; 
    99 
    10 import javax.swing.JComponent; 
    1110import javax.swing.KeyStroke; 
    1211 
     
    2524        ); 
    2625        putValue("help", ht("/Action/ZoomIn")); 
    27         // make numpad + behave like + (action is already registred) 
    28         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD,0), tr("Zoom In")); 
     26        // make numpad + behave like + 
     27        Main.registerActionShortcut(this, KeyStroke.getKeyStroke(KeyEvent.VK_ADD, 0)); 
    2928    } 
    3029 
    3130    public void actionPerformed(ActionEvent e) { 
    32         Object name = Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).get(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, 0)); 
    33         Main.contentPane.getActionMap().put(name, this); 
    34  
    3531        if (!Main.isDisplayingMapView()) return; 
    3632        Main.map.mapView.zoomToFactor(0.9); 
  • trunk/src/org/openstreetmap/josm/actions/ZoomOutAction.java

    r3083 r3252  
    88import java.awt.event.KeyEvent; 
    99 
    10 import javax.swing.JComponent; 
    1110import javax.swing.KeyStroke; 
    1211 
     
    2120        putValue("help", ht("/Action/ZoomOut")); 
    2221        // make numpad - behave like - 
    23         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT,0), tr("Zoom Out")); 
     22        Main.registerActionShortcut(this, KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT,0)); 
    2423    } 
    2524 
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r3177 r3252  
    3030import java.util.Set; 
    3131 
    32 import javax.swing.JComponent; 
    3332import javax.swing.JOptionPane; 
    3433 
     
    9594 
    9695        // Add extra shortcut N 
    97         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( 
    98                 Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT).getKeyStroke(), tr("Draw")); 
     96        Main.registerActionShortcut(this, Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT)); 
    9997 
    10098        cursorCrosshair = getCursor(); 
  • trunk/src/org/openstreetmap/josm/gui/MainApplet.java

    r3248 r3252  
    4747    private final class MainCaller extends Main { 
    4848        private MainCaller() { 
    49             setContentPane(contentPane); 
     49            setContentPane(contentPanePrivate); 
    5050            setJMenuBar(menu); 
    5151            setBounds(bounds); 
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r3232 r3252  
    5353    public MainApplication(JFrame mainFrame) { 
    5454        super(); 
    55         mainFrame.setContentPane(contentPane); 
     55        mainFrame.setContentPane(contentPanePrivate); 
    5656        mainFrame.setJMenuBar(menu); 
    5757        mainFrame.setBounds(bounds); 
  • trunk/src/org/openstreetmap/josm/gui/MapFrame.java

    r3189 r3252  
    9191    public final int DEF_TOGGLE_DLG_WIDTH = 330; 
    9292 
    93     public MapFrame() { 
     93    public MapFrame(JPanel contentPane) { 
    9494        setSize(400,400); 
    9595        setLayout(new BorderLayout()); 
    9696 
    97         mapView = new MapView(); 
     97        mapView = new MapView(contentPane); 
    9898 
    9999        new FileDrop(mapView); 
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r3229 r3252  
    2929 
    3030import javax.swing.AbstractButton; 
    31 import javax.swing.JComponent; 
    3231import javax.swing.JOptionPane; 
     32import javax.swing.JPanel; 
    3333 
    3434import org.openstreetmap.josm.Main; 
    3535import org.openstreetmap.josm.actions.AutoScaleAction; 
    36 import org.openstreetmap.josm.actions.JosmAction; 
    3736import org.openstreetmap.josm.actions.MoveAction; 
    3837import org.openstreetmap.josm.actions.mapmode.MapMode; 
     
    189188    private Rectangle lastClipBounds = new Rectangle(); 
    190189 
    191     public MapView() { 
     190    public MapView(final JPanel contentPane) { 
    192191        Main.pref.addPreferenceChangeListener(this); 
    193192        addComponentListener(new ComponentAdapter(){ 
     
    213212                } 
    214213 
    215                 new MapMover(MapView.this, Main.contentPane); 
    216                 JosmAction mv; 
    217                 mv = new MoveAction(MoveAction.Direction.UP); 
    218                 if (mv.getShortcut() != null) { 
    219                     Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(mv.getShortcut().getKeyStroke(), "UP"); 
    220                     Main.contentPane.getActionMap().put("UP", mv); 
    221                 } 
    222                 mv = new MoveAction(MoveAction.Direction.DOWN); 
    223                 if (mv.getShortcut() != null) { 
    224                     Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(mv.getShortcut().getKeyStroke(), "DOWN"); 
    225                     Main.contentPane.getActionMap().put("DOWN", mv); 
    226                 } 
    227                 mv = new MoveAction(MoveAction.Direction.LEFT); 
    228                 if (mv.getShortcut() != null) { 
    229                     Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(mv.getShortcut().getKeyStroke(), "LEFT"); 
    230                     Main.contentPane.getActionMap().put("LEFT", mv); 
    231                 } 
    232                 mv = new MoveAction(MoveAction.Direction.RIGHT); 
    233                 if (mv.getShortcut() != null) { 
    234                     Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(mv.getShortcut().getKeyStroke(), "RIGHT"); 
    235                     Main.contentPane.getActionMap().put("RIGHT", mv); 
    236                 } 
     214                new MapMover(MapView.this, contentPane); 
     215                new MoveAction(MoveAction.Direction.UP); 
     216                new MoveAction(MoveAction.Direction.DOWN); 
     217                new MoveAction(MoveAction.Direction.LEFT); 
     218                new MoveAction(MoveAction.Direction.RIGHT); 
    237219            } 
    238220        }); 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r3219 r3252  
    610610        btnAdd.getActionMap().put("onEnter", addAction); 
    611611 
    612         Shortcut sc = Shortcut.registerShortcut("properties:add", tr("Add Properties"), KeyEvent.VK_B, 
    613                 Shortcut.GROUP_MNEMONIC); 
    614         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sc.getKeyStroke(), "properties:add"); 
    615         Main.contentPane.getActionMap().put("properties:add", addAction); 
     612        Main.registerActionShortcut(addAction, Shortcut.registerShortcut("properties:add", tr("Add Properties"), KeyEvent.VK_B, 
     613                Shortcut.GROUP_MNEMONIC)); 
    616614 
    617615        // -- edit action 
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java

    r2969 r3252  
    1717import java.awt.event.WindowEvent; 
    1818 
     19import javax.swing.AbstractAction; 
    1920import javax.swing.Box; 
    20 import javax.swing.AbstractAction; 
    2121import javax.swing.ImageIcon; 
    2222import javax.swing.JButton; 
     
    5454 
    5555    public static ImageViewerDialog getInstance() { 
    56         if (dialog == null) { 
     56        if (dialog == null) 
    5757            throw new AssertionError(); // a new instance needs to be created first 
    58         } 
    5958        return dialog; 
    6059    } 
     
    8382        btnPrevious.setPreferredSize(buttonDim); 
    8483        Shortcut scPrev = Shortcut.registerShortcut( 
    85             "geoimage:previous", tr("Geoimage: {0}", tr("Show previous Image")), KeyEvent.VK_PAGE_UP, Shortcut.GROUP_DIRECT); 
     84                "geoimage:previous", tr("Geoimage: {0}", tr("Show previous Image")), KeyEvent.VK_PAGE_UP, Shortcut.GROUP_DIRECT); 
    8685        final String APREVIOUS = "Previous Image"; 
    87         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scPrev.getKeyStroke(), APREVIOUS); 
    88         Main.contentPane.getActionMap().put(APREVIOUS, prevAction); 
     86        Main.registerActionShortcut(prevAction, scPrev); 
    8987        btnPrevious.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scPrev.getKeyStroke(), APREVIOUS); 
    9088        btnPrevious.getActionMap().put(APREVIOUS, prevAction); 
     
    9593        btnDelete.setPreferredSize(buttonDim); 
    9694        Shortcut scDelete = Shortcut.registerShortcut( 
    97             "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", DELETE_TEXT), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.SHIFT_DEFAULT); 
    98         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), DELETE_TEXT); 
    99         Main.contentPane.getActionMap().put(DELETE_TEXT, delAction); 
     95                "geoimage:deleteimagefromlayer", tr("Geoimage: {0}", DELETE_TEXT), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.SHIFT_DEFAULT); 
     96        Main.registerActionShortcut(delAction, scDelete); 
    10097        btnDelete.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), DELETE_TEXT); 
    10198        btnDelete.getActionMap().put(DELETE_TEXT, delAction); 
     
    105102        btnDeleteFromDisk.setPreferredSize(buttonDim); 
    106103        Shortcut scDeleteFromDisk = Shortcut.registerShortcut( 
    107             "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete File from disk")), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.GROUP_MENU + Shortcut.SHIFT_DEFAULT); 
     104                "geoimage:deletefilefromdisk", tr("Geoimage: {0}", tr("Delete File from disk")), KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT, Shortcut.GROUP_MENU + Shortcut.SHIFT_DEFAULT); 
    108105        final String ADELFROMDISK = "Delete image file from disk"; 
    109         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), ADELFROMDISK); 
    110         Main.contentPane.getActionMap().put(ADELFROMDISK, delFromDiskAction); 
     106        Main.registerActionShortcut(delFromDiskAction, scDeleteFromDisk); 
    111107        btnDeleteFromDisk.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDeleteFromDisk.getKeyStroke(), ADELFROMDISK); 
    112108        btnDeleteFromDisk.getActionMap().put(ADELFROMDISK, delFromDiskAction); 
     
    116112        btnNext.setPreferredSize(buttonDim); 
    117113        Shortcut scNext = Shortcut.registerShortcut( 
    118             "geoimage:next", tr("Geoimage: {0}", tr("Show next Image")), KeyEvent.VK_PAGE_DOWN, Shortcut.GROUP_DIRECT); 
     114                "geoimage:next", tr("Geoimage: {0}", tr("Show next Image")), KeyEvent.VK_PAGE_DOWN, Shortcut.GROUP_DIRECT); 
    119115        final String ANEXT = "Next Image"; 
    120         Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scNext.getKeyStroke(), ANEXT); 
    121         Main.contentPane.getActionMap().put(ANEXT, nextAction); 
     116        Main.registerActionShortcut(nextAction, scNext); 
    122117        btnNext.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scNext.getKeyStroke(), ANEXT); 
    123118        btnNext.getActionMap().put(ANEXT, nextAction); 
     
    192187            } else if (COMMAND_REMOVE.equals(action)) { 
    193188                if (currentLayer != null) { 
    194                    currentLayer.removeCurrentPhoto(); 
     189                    currentLayer.removeCurrentPhoto(); 
    195190                } 
    196191            } else if (COMMAND_REMOVE_FROM_DISK.equals(action)) { 
     
    221216    public void displayImage(GeoImageLayer layer, ImageEntry entry) { 
    222217        synchronized(this) { 
    223 //            if (currentLayer == layer && currentEntry == entry) { 
    224 //                repaint(); 
    225 //                return; 
    226 //            }                     TODO: pop up image dialog but don't load image again 
     218            //            if (currentLayer == layer && currentEntry == entry) { 
     219            //                repaint(); 
     220            //                return; 
     221            //            }                     TODO: pop up image dialog but don't load image again 
    227222 
    228223            if (centerView && Main.map != null && entry != null && entry.getPos() != null) { 
Note: See TracChangeset for help on using the changeset viewer.