Changeset 9086 in josm for trunk/src


Ignore:
Timestamp:
2015-12-05T15:38:14+01:00 (8 years ago)
Author:
Don-vip
Message:

fix #12153 - Changing sorting order in Tags/Memberships window and clicking in one tag, edits the wrong tag

Location:
trunk/src/org/openstreetmap/josm/gui/dialogs/properties
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r9078 r9086  
    172172     * This sub-object is responsible for all adding and editing of tags
    173173     */
    174     private final transient TagEditHelper editHelper = new TagEditHelper(tagData, valueCount);
     174    private final transient TagEditHelper editHelper = new TagEditHelper(tagTable, tagData, valueCount);
    175175
    176176    private final transient DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
     
    561561    }
    562562
    563     private int findRow(TableModel model, Object value) {
     563    private int findViewRow(JTable table, TableModel model, Object value) {
    564564        for (int i = 0; i < model.getRowCount(); i++) {
    565565            if (model.getValueAt(i, 0).equals(value))
    566                 return i;
     566                return table.convertRowIndexToView(i);
    567567        }
    568568        return -1;
     
    639639        selectedTag = editHelper.getChangedKey(); // select last added or last edited key by default
    640640        if (selectedTag == null && tagTable.getSelectedRowCount() == 1) {
    641             selectedTag = (String) tagData.getValueAt(tagTable.getSelectedRow(), 0);
     641            selectedTag = editHelper.getDataKey(tagTable.getSelectedRow());
    642642        }
    643643        if (membershipTable.getSelectedRowCount() == 1) {
     
    737737
    738738        int selectedIndex;
    739         if (selectedTag != null && (selectedIndex = findRow(tagData, selectedTag)) != -1) {
     739        if (selectedTag != null && (selectedIndex = findViewRow(tagTable, tagData, selectedTag)) != -1) {
    740740            tagTable.changeSelection(selectedIndex, 0, false, false);
    741         } else if (selectedRelation != null && (selectedIndex = findRow(membershipData, selectedRelation)) != -1) {
     741        } else if (selectedRelation != null && (selectedIndex = findViewRow(membershipTable, membershipData, selectedRelation)) != -1) {
    742742            membershipTable.changeSelection(selectedIndex, 0, false, false);
    743743        } else if (hasTags) {
     
    791791     * @return The current selected tag
    792792     */
    793     @SuppressWarnings("unchecked")
    794793    public Tag getSelectedProperty() {
    795794        int row = tagTable.getSelectedRow();
    796795        if (row == -1) return null;
    797         Map<String, Integer> map = (TreeMap<String, Integer>) tagData.getValueAt(row, 1);
     796        Map<String, Integer> map = editHelper.getDataValues(row);
    798797        return new Tag(
    799                 tagData.getValueAt(row, 0).toString(),
     798                editHelper.getDataKey(row),
    800799                map.size() > 1 ? "" : map.keySet().iterator().next());
    801800    }
     
    952951            int nextKeyIndex = rows[0];
    953952            for (int row : rows) {
    954                 String key = tagData.getValueAt(row, 0).toString();
     953                String key = editHelper.getDataKey(row);
    955954                if (row == nextKeyIndex + 1) {
    956955                    nextKeyIndex = row; // no gap yet
     
    970969                    nextKeyIndex++;
    971970                }
    972                 nextKey = (String) tagData.getValueAt(nextKeyIndex, 0);
     971                nextKey = editHelper.getDataKey(nextKeyIndex);
    973972            }
    974973
     
    978977            membershipTable.clearSelection();
    979978            if (nextKey != null) {
    980                 tagTable.changeSelection(findRow(tagData, nextKey), 0, false, false);
     979                tagTable.changeSelection(findViewRow(tagTable, tagData, nextKey), 0, false, false);
    981980            }
    982981        }
     
    10101009            tagTable.clearSelection();
    10111010            if (nextRelation != null) {
    1012                 membershipTable.changeSelection(findRow(membershipData, nextRelation), 0, false, false);
     1011                membershipTable.changeSelection(findViewRow(membershipTable, membershipData, nextRelation), 0, false, false);
    10131012            }
    10141013        }
     
    11151114                if (tagTable.getSelectedRowCount() == 1) {
    11161115                    row = tagTable.getSelectedRow();
    1117                     String key = Utils.encodeUrl(tagData.getValueAt(row, 0).toString());
    1118                     @SuppressWarnings("unchecked")
    1119                     Map<String, Integer> m = (Map<String, Integer>) tagData.getValueAt(row, 1);
     1116                    String key = Utils.encodeUrl(editHelper.getDataKey(row));
     1117                    Map<String, Integer> m = editHelper.getDataValues(row);
    11201118                    String val = Utils.encodeUrl(m.entrySet().iterator().next().getKey());
    11211119
     
    12061204
    12071205        @Override
    1208         @SuppressWarnings("unchecked")
    12091206        public void actionPerformed(ActionEvent e) {
    12101207            final String url;
    12111208            if (tagTable.getSelectedRowCount() == 1) {
    12121209                final int row = tagTable.getSelectedRow();
    1213                 final String key = Utils.encodeUrl(tagData.getValueAt(row, 0).toString());
    1214                 Map<String, Integer> values = (Map<String, Integer>) tagData.getValueAt(row, 1);
     1210                final String key = Utils.encodeUrl(editHelper.getDataKey(row));
     1211                Map<String, Integer> values = editHelper.getDataValues(row);
    12151212                if (values.size() == 1) {
    12161213                    url = TAGINFO_URL_PROP.get() + "tags/" + key /* do not URL encode key, otherwise addr:street does not work */
     
    12391236            if (tagTable.getSelectedRowCount() != 1)
    12401237                return;
    1241             String key = tagData.getValueAt(tagTable.getSelectedRow(), 0).toString();
     1238            String key = editHelper.getDataKey(tagTable.getSelectedRow());
    12421239            Collection<OsmPrimitive> sel = Main.main.getInProgressSelection();
    12431240            String clipboard = Utils.getClipboardContent();
     
    12601257
    12611258            for (int row: rows) {
    1262                 String key = tagData.getValueAt(row, 0).toString();
     1259                String key = editHelper.getDataKey(row);
    12631260                if (sel.isEmpty())
    12641261                    return;
     
    13421339            if (tagTable.getSelectedRowCount() != 1)
    13431340                return;
    1344             String key = tagData.getValueAt(tagTable.getSelectedRow(), 0).toString();
     1341            String key = editHelper.getDataKey(tagTable.getSelectedRow());
    13451342            Collection<OsmPrimitive> sel = Main.main.getInProgressSelection();
    13461343            if (sel.isEmpty())
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java

    r9084 r9086  
    5353import javax.swing.JPanel;
    5454import javax.swing.JPopupMenu;
     55import javax.swing.JTable;
    5556import javax.swing.KeyStroke;
    5657import javax.swing.ListCellRenderer;
     
    8687 */
    8788class TagEditHelper {
     89    private final JTable tagTable;
    8890    private final DefaultTableModel tagData;
    8991    private final Map<String, Map<String, Integer>> valueCount;
     
    116118    };
    117119
    118     TagEditHelper(DefaultTableModel propertyData, Map<String, Map<String, Integer>> valueCount) {
     120    TagEditHelper(JTable tagTable, DefaultTableModel propertyData, Map<String, Map<String, Integer>> valueCount) {
     121        this.tagTable = tagTable;
    119122        this.tagData = propertyData;
    120123        this.valueCount = valueCount;
     124    }
     125
     126    public final String getDataKey(int viewRow) {
     127        return tagData.getValueAt(tagTable.convertRowIndexToModel(viewRow), 0).toString();
     128    }
     129
     130    @SuppressWarnings("unchecked")
     131    public final Map<String, Integer> getDataValues(int viewRow) {
     132        return (Map<String, Integer>) tagData.getValueAt(tagTable.convertRowIndexToModel(viewRow), 1);
    121133    }
    122134
     
    152164        if (sel == null || sel.isEmpty()) return;
    153165
    154         String key = tagData.getValueAt(row, 0).toString();
     166        String key = getDataKey(row);
    155167        objKey = key;
    156168
    157         @SuppressWarnings("unchecked")
    158         final EditTagDialog editDialog = new EditTagDialog(key,
    159                 (Map<String, Integer>) tagData.getValueAt(row, 1), focusOnKey);
     169        final EditTagDialog editDialog = new EditTagDialog(key, getDataValues(row), focusOnKey);
    160170        editDialog.showDialog();
    161171        if (editDialog.getValue() != 1) return;
     
    567577                }
    568578                for (int i = 0; i < tagData.getRowCount(); ++i) {
    569                     if (item.getValue().equals(tagData.getValueAt(i, 0))) {
     579                    if (item.getValue().equals(getDataKey(i))) {
    570580                        if (itemToSelect == item) {
    571581                            itemToSelect = null;
     
    831841            // performing this action leads to autocomplete to the next key (see #7671 comments)
    832842            for (int j = 0; j < tagData.getRowCount(); ++j) {
    833                 if (t.getKey().equals(tagData.getValueAt(j, 0))) {
     843                if (t.getKey().equals(getDataKey(j))) {
    834844                    action.setEnabled(false);
    835845                    break;
Note: See TracChangeset for help on using the changeset viewer.