Ignore:
Timestamp:
11.02.2012 16:28:18 (3 months ago)
Author:
stoecker
Message:

fix #7375 - resetting shortcuts not possible

File:
1 edited

Legend:

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

    r4900 r4916  
    138138     */ 
    139139    public void setAssignedUser(boolean assignedUser) { 
    140         this.reset = (!this.assignedUser && assignedUser); 
     140        this.reset = (this.assignedUser || reset) && !assignedUser; 
    141141        if (assignedUser) { 
    142142            assignedDefault = false; 
     143        } else if (reset) { 
     144            assignedKey = requestedKey; 
     145            assignedModifier = findModifier(requestedGroup, null); 
    143146        } 
    144147        this.assignedUser = assignedUser; 
     
    172175    } 
    173176 
    174     private void saveDefault() { 
     177    private void saveDefault(int modifier) { 
    175178        Main.pref.getCollection("shortcut.entry."+shortText, Arrays.asList(new String[]{longText, 
    176         String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(assignedKey), 
    177         String.valueOf(assignedModifier), String.valueOf(true), String.valueOf(false)})); 
     179        String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(requestedKey), 
     180        String.valueOf(modifier), String.valueOf(true), String.valueOf(false)})); 
    178181    } 
    179182 
    180183    // get a string that can be put into the preferences 
    181184    private boolean save() { 
    182         return Main.pref.putCollection("shortcut.entry."+shortText, Arrays.asList(new String[]{longText, 
    183         String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(assignedKey), 
    184         String.valueOf(assignedModifier), String.valueOf(assignedDefault), String.valueOf(assignedUser)})); 
     185        if (getAutomatic() || getReset() || !getAssignedUser()) { 
     186            return Main.pref.putCollection("shortcut.entry."+shortText, null); 
     187        } else { 
     188            return Main.pref.putCollection("shortcut.entry."+shortText, Arrays.asList(new String[]{longText, 
     189            String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(assignedKey), 
     190            String.valueOf(assignedModifier), String.valueOf(assignedDefault), String.valueOf(assignedUser)})); 
     191        } 
    185192    } 
    186193 
     
    347354        boolean changed = false; 
    348355        for (Shortcut sc : shortcuts.values()) { 
    349             if (!sc.getAutomatic() && !sc.getReset() && sc.getAssignedUser()) { 
    350                 changed = changed | sc.save(); 
    351             } 
     356            changed = changed | sc.save(); 
    352357        } 
    353358        return changed; 
     
    427432    } 
    428433 
     434    private static int findModifier(int group, Integer modifier) { 
     435        Integer defaultModifier = getGroupModifier(group + GROUPS_DEFAULT); 
     436        if(modifier != null) { 
     437            if(modifier == SHIFT_DEFAULT) { 
     438                defaultModifier |= KeyEvent.SHIFT_DOWN_MASK; 
     439            } else { 
     440                defaultModifier = modifier; 
     441            } 
     442        } 
     443        else if (defaultModifier == null) { // garbage in, no shortcut out 
     444            defaultModifier = getGroupModifier(GROUP_NONE + GROUPS_DEFAULT); 
     445        } 
     446        return defaultModifier; 
     447    } 
     448 
    429449    // and now the workhorse. same parameters as above, just one more: if originalShortcut is not null and 
    430450    // is different from the shortcut that will be assigned, a popup warning will be displayed to the user. 
     
    435455            Shortcut originalShortcut) { 
    436456        doInit(); 
     457        Integer defaultModifier = findModifier(requestedGroup, modifier); 
    437458        if (shortcuts.containsKey(shortText)) { // a re-register? maybe a sc already read from the preferences? 
    438459            Shortcut sc = shortcuts.get(shortText); 
    439460            sc.setLongText(longText); // or set by the platformHook, in this case the original longText doesn't match the real action 
     461            sc.saveDefault(defaultModifier); 
    440462            return sc; 
    441         } 
    442         Integer defaultModifier = getGroupModifier(requestedGroup + GROUPS_DEFAULT); 
    443         if(modifier != null) { 
    444             if(modifier == SHIFT_DEFAULT) { 
    445                 defaultModifier |= KeyEvent.SHIFT_DOWN_MASK; 
    446             } else { 
    447                 defaultModifier = modifier; 
    448             } 
    449         } 
    450         else if (defaultModifier == null) { // garbage in, no shortcut out 
    451             defaultModifier = getGroupModifier(GROUP_NONE + GROUPS_DEFAULT); 
    452463        } 
    453464        Shortcut conflictsWith = null; 
     
    483494        } 
    484495 
    485         potentialShortcut.saveDefault(); 
     496        potentialShortcut.saveDefault(defaultModifier); 
    486497        shortcuts.put(shortText, potentialShortcut); 
    487498        return potentialShortcut; 
Note: See TracChangeset for help on using the changeset viewer.