Changeset 18049 in josm for trunk


Ignore:
Timestamp:
2021-07-17T16:24:05+02:00 (3 years ago)
Author:
Don-vip
Message:

fix #20796 - Delete image file from disk : only remove images from geoimage layer after successful deletion

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/ImageData.java

    r17579 r18049  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.data;
    3 
    4 import static org.openstreetmap.josm.tools.I18n.tr;
    53
    64import java.util.ArrayList;
     
    267265    /**
    268266     * Remove the current selected image from the list
    269      */
    270     public void removeSelectedImage() {
    271         List<ImageEntry> selectedImages = getSelectedImages();
    272         if (selectedImages.size() > 1) {
    273             throw new IllegalStateException(tr("Multiple images have been selected"));
    274         }
    275         removeImages(selectedImages);
    276     }
    277 
    278     /**
    279      * Remove the current selected image from the list
    280267     * @since 15348
    281268     */
    282269    public void removeSelectedImages() {
    283         List<ImageEntry> selectedImages = getSelectedImages();
    284         removeImages(selectedImages);
     270        removeImages(getSelectedImages());
    285271    }
    286272
     
    290276        }
    291277        for (ImageEntry img: getSelectedImages()) {
    292             data.remove(img);
    293             this.geoImages.remove(img);
    294         }
    295         if (selectedImagesIndex.get(0) >= data.size()) {
    296             setSelectedImageIndex(data.size() - 1);
     278            removeImage(img, false);
     279        }
     280        updateSelectedImage();
     281    }
     282
     283    /**
     284     * Update the selected image after removal of one or more images.
     285     * @since 18049
     286     */
     287    public void updateSelectedImage() {
     288        int size = data.size();
     289        Integer firstSelectedImageIndex = selectedImagesIndex.get(0);
     290        if (firstSelectedImageIndex >= size) {
     291            setSelectedImageIndex(size - 1);
    297292        } else {
    298             setSelectedImageIndex(selectedImagesIndex.get(0), true);
     293            setSelectedImageIndex(firstSelectedImageIndex, true);
    299294        }
    300295    }
     
    307302     */
    308303    public boolean isImageSelected(ImageEntry image) {
    309         int index = data.indexOf(image);
    310         return selectedImagesIndex.contains(index);
     304        return selectedImagesIndex.contains(data.indexOf(image));
    311305    }
    312306
     
    316310     */
    317311    public void removeImage(ImageEntry img) {
     312        removeImage(img, true);
     313    }
     314
     315    /**
     316     * Remove the image from the list and optionnally trigger update listener
     317     * @param img the {@link ImageEntry} to remove
     318     * @param fireUpdateEvent if {@code true}, notifies listeners of image update
     319     * @since xxx
     320     */
     321    public void removeImage(ImageEntry img, boolean fireUpdateEvent) {
    318322        data.remove(img);
    319323        this.geoImages.remove(img);
    320         notifyImageUpdate();
     324        if (fireUpdateEvent) {
     325            notifyImageUpdate();
     326        }
    321327    }
    322328
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java

    r18018 r18049  
    344344
    345345                if (result == 2) {
    346                     currentData.removeSelectedImages();
    347346                    for (ImageEntry delete : toDelete) {
    348347                        if (Utils.deleteFile(delete.getFile())) {
    349                             Logging.info("File " + delete.getFile() + " deleted.");
     348                            currentData.removeImage(delete, false);
     349                            Logging.info("File {0} deleted.", delete.getFile());
    350350                        } else {
    351351                            JOptionPane.showMessageDialog(
     
    357357                        }
    358358                    }
     359                    currentData.notifyImageUpdate();
     360                    currentData.updateSelectedImage();
    359361                }
    360362            }
  • trunk/test/unit/org/openstreetmap/josm/data/ImageDataTest.java

    r17715 r18049  
    5555        assertFalse(data.hasNextImage());
    5656        assertFalse(data.hasPreviousImage());
    57         data.removeSelectedImage();
     57        data.removeSelectedImages();
    5858    }
    5959
     
    182182
    183183    @Test
    184     void testRemoveSelectedImage() {
    185         List<ImageEntry> list = getOneImage();
    186         ImageData data = new ImageData(list);
    187         data.selectFirstImage();
    188         data.removeSelectedImage();
     184    void testRemoveSelectedImages() {
     185        List<ImageEntry> list = getOneImage();
     186        list.add(new ImageEntry());
     187
     188        ImageData data = new ImageData(list);
     189        data.selectFirstImage();
     190        data.addImageToSelection(list.get(1));
     191        data.removeSelectedImages();
    189192        assertEquals(0, data.getImages().size());
    190193        assertEquals(0, data.getSelectedImages().size());
     
    192195
    193196    @Test
    194     void testRemoveSelectedImages() {
    195         List<ImageEntry> list = getOneImage();
    196         list.add(new ImageEntry());
    197 
    198         ImageData data = new ImageData(list);
    199         data.selectFirstImage();
    200         data.addImageToSelection(list.get(1));
    201         data.removeSelectedImages();
    202         assertEquals(0, data.getImages().size());
    203         assertEquals(0, data.getSelectedImages().size());
    204     }
    205 
    206     @Test
    207197    void testRemoveSelectedImagesWithRemainingImages() {
    208198        List<ImageEntry> list = getOneImage();
     
    261251        data.addImageDataUpdateListener(listener);
    262252        data.selectFirstImage();
    263         data.removeSelectedImage();
     253        data.removeSelectedImages();
    264254    }
    265255
Note: See TracChangeset for help on using the changeset viewer.