Ticket #18130: patch_select_image_after_remove.patch

File patch_select_image_after_remove.patch, 3.2 KB (added by francois2, 5 years ago)

Select next image after remove

  • src/org/openstreetmap/josm/data/ImageData.java

     
    246246     * Remove the current selected image from the list
    247247     */
    248248    public void removeSelectedImage() {
    249         List<ImageEntry> selected = getSelectedImages();
    250         if (selected.size() > 1) {
     249        List<ImageEntry> selectedImages = getSelectedImages();
     250        if (selectedImages.size() > 1) {
    251251            throw new IllegalStateException(tr("Multiple images have been selected"));
    252252        }
    253         if (selected.isEmpty()) {
    254             return;
    255         }
    256         data.remove(getSelectedImages().get(0));
    257         if (selectedImagesIndex.get(0) == data.size()) {
    258             setSelectedImageIndex(data.size() - 1);
    259         } else {
    260             setSelectedImageIndex(selectedImagesIndex.get(0), true);
    261         }
     253        removeImages(selectedImages);
    262254    }
    263255
    264256    /**
     
    266258     * @since 15348
    267259     */
    268260    public void removeSelectedImages() {
    269         List<ImageEntry> selected = getSelectedImages();
    270         if (selected.isEmpty()) {
     261        List<ImageEntry> selectedImages = getSelectedImages();
     262        removeImages(selectedImages);
     263    }
     264
     265    private void removeImages(List<ImageEntry> selectedImages) {
     266        if (selectedImages.isEmpty()) {
    271267            return;
    272268        }
    273269        for (ImageEntry img: getSelectedImages()) {
    274270            data.remove(img);
    275271        }
    276         setSelectedImageIndex(-1, true);
     272        if (selectedImagesIndex.get(0) == data.size()) {
     273            setSelectedImageIndex(data.size() - 1);
     274        } else {
     275            setSelectedImageIndex(selectedImagesIndex.get(0), true);
     276        }
    277277    }
    278278
    279279    /**
  • test/unit/org/openstreetmap/josm/data/ImageDataTest.java

     
    195195    }
    196196
    197197    @Test
     198    public void testSelectImageAfterRemove() {
     199        List<ImageEntry> list = getOneImage();
     200        list.add(new ImageEntry());
     201
     202        ImageData data = new ImageData(list);
     203        data.selectFirstImage();
     204        data.removeSelectedImages();
     205        assertEquals(1, data.getImages().size());
     206        assertEquals(1, data.getSelectedImages().size());
     207        assertEquals(list.get(0), data.getSelectedImages().get(0));
     208    }
     209
     210    @Test
     211    public void testSelectImageAfterRemoveWhenTheLastIsSelected() {
     212        List<ImageEntry> list = getOneImage();
     213        list.add(new ImageEntry());
     214
     215        ImageData data = new ImageData(list);
     216        data.selectLastImage();
     217        data.removeSelectedImages();
     218        assertEquals(1, data.getImages().size());
     219        assertEquals(1, data.getSelectedImages().size());
     220        assertEquals(list.get(0), data.getSelectedImages().get(0));
     221    }
     222
     223    @Test
    198224    public void testRemoveSelectedImageTriggerListener() {
    199225        List<ImageEntry> list = getOneImage();
    200226        list.add(new ImageEntry());