Ignore:
Timestamp:
2012-02-11T16:28:18+01:00 (13 years 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.