Changeset 4916 in josm for trunk/src/org


Ignore:
Timestamp:
2012-02-11T16:28:18+01:00 (12 years ago)
Author:
stoecker
Message:

fix #7375 - resetting shortcuts not possible

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/PrefJPanel.java

    r4914 r4916  
    1515
    1616import java.util.regex.PatternSyntaxException;
    17 import javax.swing.*;
     17import javax.swing.AbstractAction;
     18import javax.swing.BorderFactory;
     19import javax.swing.BoxLayout;
     20import javax.swing.DefaultComboBoxModel;
     21import javax.swing.JCheckBox;
     22import javax.swing.JComboBox;
     23import javax.swing.JEditorPane;
     24import javax.swing.JLabel;
     25import javax.swing.JPanel;
     26import javax.swing.JScrollPane;
     27import javax.swing.JTabbedPane;
     28import javax.swing.JTable;
     29import javax.swing.JTextField;
     30import javax.swing.KeyStroke;
     31import javax.swing.ListSelectionModel;
     32import javax.swing.RowFilter;
     33import javax.swing.SwingConstants;
    1834import javax.swing.event.DocumentEvent;
    1935import javax.swing.event.DocumentListener;
    2036import javax.swing.event.ListSelectionEvent;
    2137import javax.swing.event.ListSelectionListener;
     38import javax.swing.table.AbstractTableModel;
    2239import javax.swing.table.TableModel;
    2340
     
    3451
    3552    // table of shortcuts
    36     private TableModel model;
     53    private AbstractTableModel model;
    3754    // comboboxes of modifier groups, mapping selectedIndex to real data
    3855    private static int[] modifInts = new int[]{
     
    124141    /** Creates new form prefJPanel */
    125142    // Ain't those auto-generated comments helpful or what? <g>
    126     public PrefJPanel(TableModel model) {
     143    public PrefJPanel(AbstractTableModel model) {
    127144        this.model = model;
    128145        initComponents();
     
    130147
    131148    private void initComponents() {
    132 
    133         // Did I mention auto-generated? That's the reason we
    134         // have lots of properties here and not some arrays...
    135        
    136         // r4914 - autogenerated code rearranged manually
    137        
    138149        JPanel editGroupPane = new JPanel();
    139150        JPanel hotkeyGroupPane = new JPanel();
     
    191202        shortcutTable.setModel(model);
    192203        shortcutTable.getSelectionModel().addListSelectionListener(new CbAction(this));
    193         //shortcutTable.setFillsViewportHeight(true); Java 1.6
     204        shortcutTable.setFillsViewportHeight(true);
    194205        shortcutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    195206        shortcutTable.setAutoCreateRowSorter(true);
     
    364375                    actionPerformed(null);
    365376                }
     377                model.fireTableCellUpdated(row, 1);
    366378            } else {
    367379                panel.disableAllModifierCheckboxes();
     
    375387                    int row = panel.shortcutTable.convertRowIndexToModel(lsm.getMinSelectionIndex());
    376388                    Shortcut sc = (Shortcut)panel.model.getValueAt(row, -1);
    377                     sc.setAssignedUser(!panel.cbDefault.isSelected());
    378389                    if (panel.cbDisable.isSelected()) {
    379390                        sc.setAssignedModifier(-1);
     
    393404                        }
    394405                    }
     406                    sc.setAssignedUser(!panel.cbDefault.isSelected());
    395407                    valueChanged(null);
    396408                }
     
    464476            if (expr.length()==0) { expr=null; }
    465477            try {
    466                 final TableRowSorter<TableModel> sorter =
    467                     ((TableRowSorter<TableModel> )shortcutTable.getRowSorter());
     478                final TableRowSorter<? extends TableModel> sorter =
     479                    ((TableRowSorter<? extends TableModel> )shortcutTable.getRowSorter());
    468480                if (expr == null) {
    469481                    sorter.setRowFilter(null);
  • 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.