Ignore:
Timestamp:
2009-12-12T17:51:39+01:00 (14 years ago)
Author:
Gubaer
Message:

Moved layer listener management from Layer to MapView
Made sure that listeners also unregister when they register for layer change events.

This will certainly break plugins. Plugin updates will follow later.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/Layer.java

    r2619 r2621  
    1111import java.beans.PropertyChangeSupport;
    1212import java.io.File;
    13 import java.util.Collection;
    14 import java.util.concurrent.CopyOnWriteArrayList;
    1513
    1614import javax.swing.AbstractAction;
     
    4947
    5048    /**
    51      * Interface to notify listeners of the change of the active layer.
    52      * @author imi
    53      */
    54     public interface LayerChangeListener {
    55         void activeLayerChange(Layer oldLayer, Layer newLayer);
    56         void layerAdded(Layer newLayer);
    57         void layerRemoved(Layer oldLayer);
    58     }
    59 
    60     /**
    61      * The listener of the active layer changes. You may register/deregister yourself
    62      * while an LayerChangeListener - action is executed.
    63      *
    64      * @deprecated use {@see #addLayerChangeListener(LayerChangeListener)}
    65      * and {@see #removeLayerChangeListener(LayerChangeListener)}
    66      */
    67     @Deprecated
    68     public static final Collection<LayerChangeListener> listeners = new CopyOnWriteArrayList<LayerChangeListener>();
    69 
    70     /**
    71      * Adds a layer change listener
    72      *
    73      * @param listener the listener. Ignored if null or already registered.
    74      */
    75     public static void addLayerChangeListener(LayerChangeListener listener) {
    76         if (listener != null && ! listeners.contains(listener)) {
    77             listeners.add(listener);
    78         }
    79     }
    80 
    81     /**
    82      * Removes a layer change listener
    83      *
    84      * @param listener the listener. Ignored if null or already registered.
    85      */
    86     public static void removeLayerChangeListener(LayerChangeListener listener) {
    87         if (listener != null && listeners.contains(listener)) {
    88             listeners.remove(listener);
    89         }
    90     }
    91 
    92     /**
    9349     * The visibility state of the layer.
    9450     *
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java

    r2617 r2621  
    1616import java.awt.Graphics2D;
    1717import java.awt.Image;
    18 import java.awt.MediaTracker;
    1918import java.awt.Point;
    2019import java.awt.Rectangle;
    21 import java.awt.Toolkit;
    2220import java.awt.event.MouseAdapter;
    2321import java.awt.event.MouseEvent;
    2422import java.awt.image.BufferedImage;
     23import java.beans.PropertyChangeEvent;
    2524import java.beans.PropertyChangeListener;
    26 import java.beans.PropertyChangeEvent;
    2725import java.io.File;
    2826import java.io.IOException;
     
    3028import java.util.ArrayList;
    3129import java.util.Arrays;
     30import java.util.Collection;
    3231import java.util.Collections;
    33 import java.util.Collection;
    3432import java.util.Date;
     33import java.util.HashSet;
    3534import java.util.LinkedHashSet;
    36 import java.util.HashSet;
    3735import java.util.List;
    3836
     
    5048import org.openstreetmap.josm.gui.MapView;
    5149import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     50import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    5251import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    5352import org.openstreetmap.josm.gui.layer.GpxLayer;
     
    102101        }
    103102        public int compareTo(ImageEntry image) {
    104             if (time != null && image.time != null) {
     103            if (time != null && image.time != null)
    105104                return time.compareTo(image.time);
    106             } else if (time == null && image.time == null) {
     105            else if (time == null && image.time == null)
    107106                return 0;
    108             } else if (time == null) {
     107            else if (time == null)
    109108                return -1;
    110             } else {
     109            else
    111110                return 1;
    112             }
    113111        }
    114112    }
     
    147145            }
    148146
    149             if (cancelled) {
     147            if (cancelled)
    150148                return;
    151             }
    152149            progressMonitor.subTask(tr("Read photos..."));
    153150            progressMonitor.setTicksCount(files.size());
     
    205202                        e.printStackTrace();
    206203                        rememberError(tr("Unable to get canonical path for directory {0}\n",
    207                                            f.getAbsolutePath()));
     204                                f.getAbsolutePath()));
    208205                    }
    209206
     
    228225
    229226                } else {
    230                       files.add(f);
    231                 }
    232             }
    233 
    234             if (nullFile) {
     227                    files.add(f);
     228                }
     229            }
     230
     231            if (nullFile)
    235232                throw new NullPointerException();
    236             }
    237233        }
    238234
     
    265261                Main.main.addLayer(layer);
    266262                layer.hook_up_mouse_events(); // Main.map.mapView should exist
    267                                               // now. Can add mouse listener
     263                // now. Can add mouse listener
    268264
    269265                if (! cancelled && layer.data.size() > 0) {
     
    329325                new JSeparator(),
    330326                correlateItem
    331                 };
     327        };
    332328    }
    333329
     
    336332        int i = 0;
    337333        for (ImageEntry e : data)
    338             if (e.pos != null)
     334            if (e.pos != null) {
    339335                i++;
     336            }
    340337        return data.size() + " " + trn("image", "images", data.size())
    341                 + " loaded. " + tr("{0} were found to be gps tagged.", i);
     338        + " loaded. " + tr("{0} were found to be gps tagged.", i);
    342339    }
    343340
     
    406403
    407404        return new Dimension(
    408             (int) Math.round(f * thumb.getWidth(null)),
    409             (int) Math.round(f * thumb.getHeight(null)));
     405                (int) Math.round(f * thumb.getWidth(null)),
     406                (int) Math.round(f * thumb.getHeight(null)));
    410407    }
    411408
     
    432429
    433430                for (ImageEntry e : data) {
    434                     if (e.pos == null)
     431                    if (e.pos == null) {
    435432                        continue;
     433                    }
    436434                    Point p = mv.getPoint(e.pos);
    437435                    if (e.thumbnail != null) {
     
    444442                    else { // thumbnail not loaded yet
    445443                        icon.paintIcon(mv, tempG,
    446                                    p.x - icon.getIconWidth() / 2,
    447                                    p.y - icon.getIconHeight() / 2);
     444                                p.x - icon.getIconWidth() / 2,
     445                                p.y - icon.getIconHeight() / 2);
    448446                    }
    449447                }
     
    454452        else {
    455453            for (ImageEntry e : data) {
    456                 if (e.pos == null)
     454                if (e.pos == null) {
    457455                    continue;
     456                }
    458457                Point p = mv.getPoint(e.pos);
    459458                icon.paintIcon(mv, g,
    460                            p.x - icon.getIconWidth() / 2,
    461                            p.y - icon.getIconHeight() / 2);
     459                        p.x - icon.getIconWidth() / 2,
     460                        p.y - icon.getIconHeight() / 2);
    462461            }
    463462        }
     
    475474                } else {
    476475                    selectedIcon.paintIcon(mv, g,
    477                                 p.x - selectedIcon.getIconWidth() / 2,
    478                                 p.y - selectedIcon.getIconHeight() / 2);
     476                            p.x - selectedIcon.getIconWidth() / 2,
     477                            p.y - selectedIcon.getIconHeight() / 2);
    479478                }
    480479            }
     
    484483    @Override
    485484    public void visitBoundingBox(BoundingXYVisitor v) {
    486         for (ImageEntry e : data)
     485        for (ImageEntry e : data) {
    487486            v.visit(e.pos);
     487        }
    488488    }
    489489
     
    508508
    509509            Rational[] components = dir
    510                     .getRationalArray(GpsDirectory.TAG_GPS_LONGITUDE);
     510            .getRationalArray(GpsDirectory.TAG_GPS_LONGITUDE);
    511511
    512512            deg = components[0].intValue();
     
    516516            lon = (deg + (min / 60) + (sec / 3600));
    517517
    518             if (dir.getString(GpsDirectory.TAG_GPS_LONGITUDE_REF).charAt(0) == 'W')
     518            if (dir.getString(GpsDirectory.TAG_GPS_LONGITUDE_REF).charAt(0) == 'W') {
    519519                lon = -lon;
     520            }
    520521
    521522            // latitude
     
    529530            lat = (deg + (min / 60) + (sec / 3600));
    530531
    531             if (dir.getString(GpsDirectory.TAG_GPS_LATITUDE_REF).charAt(0) == 'S')
     532            if (dir.getString(GpsDirectory.TAG_GPS_LATITUDE_REF).charAt(0) == 'S') {
    532533                lat = -lat;
     534            }
    533535
    534536            // Store values
     
    569571
    570572    public void checkPreviousNextButtons() {
    571 //        System.err.println("showing image " + currentPhoto);
     573        //        System.err.println("showing image " + currentPhoto);
    572574        ImageViewerDialog.setNextEnabled(currentPhoto < data.size() - 1);
    573575        ImageViewerDialog.setPreviousEnabled(currentPhoto > 0);
     
    596598            @Override public void mousePressed(MouseEvent e) {
    597599
    598                 if (e.getButton() != MouseEvent.BUTTON1) {
     600                if (e.getButton() != MouseEvent.BUTTON1)
    599601                    return;
    600                 }
    601                 if (isVisible())
     602                if (isVisible()) {
    602603                    Main.map.mapView.repaint();
     604                }
    603605            }
    604606
    605607            @Override public void mouseReleased(MouseEvent ev) {
    606                 if (ev.getButton() != MouseEvent.BUTTON1) {
     608                if (ev.getButton() != MouseEvent.BUTTON1)
    607609                    return;
    608                 }
    609                 if (!isVisible()) {
     610                if (!isVisible())
    610611                    return;
    611                 }
    612612
    613613                for (int i = data.size() - 1; i >= 0; --i) {
    614614                    ImageEntry e = data.get(i);
    615                     if (e.pos == null)
     615                    if (e.pos == null) {
    616616                        continue;
     617                    }
    617618                    Point p = Main.map.mapView.getPoint(e.pos);
    618619                    Rectangle r;
     
    622623                    } else {
    623624                        r = new Rectangle(p.x - icon.getIconWidth() / 2,
    624                                             p.y - icon.getIconHeight() / 2,
    625                                             icon.getIconWidth(),
    626                                             icon.getIconHeight());
     625                                p.y - icon.getIconHeight() / 2,
     626                                icon.getIconWidth(),
     627                                icon.getIconHeight());
    627628                    }
    628629                    if (r.contains(ev.getPoint())) {
     
    636637        };
    637638        Main.map.mapView.addMouseListener(mouseAdapter);
    638         Layer.listeners.add(new LayerChangeListener() {
     639        MapView.addLayerChangeListener(new LayerChangeListener() {
    639640            public void activeLayerChange(Layer oldLayer, Layer newLayer) {
    640641                if (newLayer == GeoImageLayer.this && currentPhoto >= 0) {
     
    656657                    data.clear();
    657658                    data = null;
     659                    // stop listening to layer change events
     660                    MapView.removeLayerChangeListener(this);
    658661                }
    659662            }
Note: See TracChangeset for help on using the changeset viewer.