Changeset 8293 in josm for trunk/src/org


Ignore:
Timestamp:
2015-04-29T23:38:33+02:00 (9 years ago)
Author:
Don-vip
Message:

fix #11383 - IndexOutOfBoundsException in LayerListDialog

File:
1 edited

Legend:

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

    r8291 r8293  
    12281228        public List<Layer> getSelectedLayers() {
    12291229            List<Layer> selected = new ArrayList<>();
    1230             for (int i=0; i<getLayers().size(); i++) {
     1230            List<Layer> layers = getLayers();
     1231            for (int i=0; i<layers.size(); i++) {
    12311232                if (selectionModel.isSelectedIndex(i)) {
    1232                     selected.add(getLayers().get(i));
     1233                    selected.add(layers.get(i));
    12331234                }
    12341235            }
     
    13161317
    13171318        /**
    1318          * Replies true if the currently selected layers can move up
    1319          * by one position
    1320          *
    1321          * @return true if the currently selected layers can move up
    1322          * by one position
     1319         * Replies true if the currently selected layers can move up by one position
     1320         *
     1321         * @return true if the currently selected layers can move up by one position
    13231322         */
    13241323        public boolean canMoveUp() {
     
    13341333            if (!canMoveUp()) return;
    13351334            List<Integer> sel = getSelectedRows();
     1335            List<Layer> layers = getLayers();
    13361336            for (int row : sel) {
    1337                 Layer l1 = getLayers().get(row);
    1338                 Layer l2 = getLayers().get(row-1);
    1339                 Main.map.mapView.moveLayer(l2,row);
     1337                Layer l1 = layers.get(row);
     1338                Layer l2 = layers.get(row-1);
     1339                Main.map.mapView.moveLayer(l2, row);
    13401340                Main.map.mapView.moveLayer(l1, row-1);
    13411341            }
     
    13491349
    13501350        /**
    1351          * Replies true if the currently selected layers can move down
    1352          * by one position
    1353          *
    1354          * @return true if the currently selected layers can move down
    1355          * by one position
     1351         * Replies true if the currently selected layers can move down by one position
     1352         *
     1353         * @return true if the currently selected layers can move down by one position
    13561354         */
    13571355        public boolean canMoveDown() {
     
    13681366            List<Integer> sel = getSelectedRows();
    13691367            Collections.reverse(sel);
     1368            List<Layer> layers = getLayers();
    13701369            for (int row : sel) {
    1371                 Layer l1 = getLayers().get(row);
    1372                 Layer l2 = getLayers().get(row+1);
     1370                Layer l1 = layers.get(row);
     1371                Layer l2 = layers.get(row+1);
    13731372                Main.map.mapView.moveLayer(l1, row+1);
    13741373                Main.map.mapView.moveLayer(l2, row);
     
    13901389            int index = selectionModel.getMinSelectionIndex();
    13911390            if (index < 0) return;
    1392             if (index >= getLayers().size()) return;
    1393             Layer layer = getLayers().get(index);
     1391            List<Layer> layers = getLayers();
     1392            if (index >= layers.size()) return;
     1393            Layer layer = layers.get(index);
    13941394            fireMakeVisible(index, layer);
    13951395        }
     
    14361436         */
    14371437        protected void ensureActiveSelected() {
    1438             if (getLayers().isEmpty())
     1438            List<Layer> layers = getLayers();
     1439            if (layers.isEmpty())
    14391440                return;
    14401441            final Layer activeLayer = getActiveLayer();
    14411442            if (activeLayer != null) {
    14421443                // there's an active layer - select it and make it visible
    1443                 int idx = getLayers().indexOf(activeLayer);
     1444                int idx = layers.indexOf(activeLayer);
    14441445                selectionModel.setSelectionInterval(idx, idx);
    14451446                ensureSelectedIsVisible();
     
    14791480        @Override
    14801481        public Object getValueAt(int row, int col) {
    1481             if (row >= 0 && row < getLayers().size()) {
     1482            List<Layer> layers = getLayers();
     1483            if (row >= 0 && row < layers.size()) {
    14821484                switch (col) {
    1483                 case 0: return getLayers().get(row) == getActiveLayer();
    1484                 case 1: return getLayers().get(row);
    1485                 case 2: return getLayers().get(row);
     1485                case 0: return layers.get(row) == getActiveLayer();
     1486                case 1: return layers.get(row);
     1487                case 2: return layers.get(row);
    14861488                default: throw new RuntimeException();
    14871489                }
     
    14991501        @Override
    15001502        public void setValueAt(Object value, int row, int col) {
    1501             Layer l = getLayers().get(row);
    1502             switch (col) {
    1503             case 0:
    1504                 Main.map.mapView.setActiveLayer(l);
    1505                 l.setVisible(true);
    1506                 break;
    1507             case 1:
    1508                 l.setVisible((Boolean) value);
    1509                 break;
    1510             case 2:
    1511                 l.setName((String) value);
    1512                 break;
    1513             default: throw new RuntimeException();
    1514             }
    1515             fireTableCellUpdated(row, col);
     1503            List<Layer> layers = getLayers();
     1504            if (row < layers.size()) {
     1505                Layer l = layers.get(row);
     1506                switch (col) {
     1507                case 0:
     1508                    Main.map.mapView.setActiveLayer(l);
     1509                    l.setVisible(true);
     1510                    break;
     1511                case 1:
     1512                    l.setVisible((Boolean) value);
     1513                    break;
     1514                case 2:
     1515                    l.setName((String) value);
     1516                    break;
     1517                default: throw new RuntimeException();
     1518                }
     1519                fireTableCellUpdated(row, col);
     1520            }
    15161521        }
    15171522
Note: See TracChangeset for help on using the changeset viewer.