Ignore:
Timestamp:
2016-07-23T14:54:19+02:00 (10 years ago)
Author:
Don-vip
Message:

fix #12478, fix #12565, fix #11114 - Use ​Swing Copy/Paste instead of CopyAction/PasteAction with custom buffer (patch by michael2402, modified) - gsoc-core

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/datatransfer/PrimitiveTransferable.java

    r9969 r10604  
    55import java.awt.datatransfer.Transferable;
    66import java.awt.datatransfer.UnsupportedFlavorException;
    7 import java.io.Serializable;
    87import java.util.ArrayList;
    9 import java.util.Collection;
     8import java.util.Arrays;
     9import java.util.List;
    1010
    11 import org.openstreetmap.josm.data.osm.OsmPrimitive;
     11import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1212import org.openstreetmap.josm.data.osm.PrimitiveData;
    13 import org.openstreetmap.josm.gui.DefaultNameFormatter;
    14 import org.openstreetmap.josm.tools.CheckParameterUtil;
     13import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
     14import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData;
    1515
    1616/**
    17  * Transferable objects for {@link PrimitiveData}.
     17 * Transferable objects for {@link PrimitiveTransferData} objects
    1818 * @since 9369
     19 * @since 10604 Complete rework
    1920 */
    2021public class PrimitiveTransferable implements Transferable {
    2122
    2223    /**
    23      * A wrapper for a collection of {@link PrimitiveData}.
     24     * The flavors that are available for normal primitives.
    2425     */
    25     public static final class Data implements Serializable {
    26         private static final long serialVersionUID = -1485089993600213704L;
    27         private final Collection<PrimitiveData> primitiveData;
    28 
    29         private Data(Collection<PrimitiveData> primitiveData) {
    30             CheckParameterUtil.ensureThat(primitiveData instanceof Serializable, "primitiveData must be instanceof Serializable");
    31             this.primitiveData = primitiveData;
    32         }
    33 
    34         /**
    35          * Returns the contained {@link PrimitiveData}
    36          * @return the contained {@link PrimitiveData}
    37          */
    38         public Collection<PrimitiveData> getPrimitiveData() {
    39             return primitiveData;
    40         }
    41     }
    42 
    43     /**
    44      * Data flavor for {@link PrimitiveData} which is wrapped in {@link Data}.
    45      */
    46     public static final DataFlavor PRIMITIVE_DATA = new DataFlavor(Data.class, Data.class.getName());
    47     private final Collection<? extends OsmPrimitive> primitives;
     26    private static final List<DataFlavor> PRIMITIVE_FLAVORS = Arrays.asList(PrimitiveTransferData.DATA_FLAVOR,
     27            TagTransferData.FLAVOR, DataFlavor.stringFlavor);
     28    private final PrimitiveTransferData primitives;
    4829
    4930    /**
     
    5132     * @param primitives collection of OSM primitives
    5233     */
    53     public PrimitiveTransferable(Collection<? extends OsmPrimitive> primitives) {
     34    public PrimitiveTransferable(PrimitiveTransferData primitives) {
    5435        this.primitives = primitives;
    5536    }
     
    5738    @Override
    5839    public DataFlavor[] getTransferDataFlavors() {
    59         return new DataFlavor[]{PRIMITIVE_DATA, DataFlavor.stringFlavor};
     40        ArrayList<DataFlavor> flavors = new ArrayList<>(PRIMITIVE_FLAVORS);
     41        return flavors.toArray(new DataFlavor[flavors.size()]);
    6042    }
    6143
    6244    @Override
    6345    public boolean isDataFlavorSupported(DataFlavor flavor) {
    64         return flavor == PRIMITIVE_DATA;
     46        DataFlavor[] flavors = getTransferDataFlavors();
     47        for (DataFlavor f : flavors) {
     48            if (flavor.equals(f)) {
     49                return true;
     50            }
     51        }
     52        return false;
    6553    }
    6654
     
    6957        if (DataFlavor.stringFlavor.equals(flavor)) {
    7058            return getStringData();
    71         } else if (PRIMITIVE_DATA.equals(flavor)) {
    72             return getPrimitiveData();
     59        } else if (PrimitiveTransferData.DATA_FLAVOR.equals(flavor)) {
     60            return primitives;
     61        } else if (TagTransferData.FLAVOR.equals(flavor)) {
     62            return new TagTransferData(primitives.getDirectlyAdded());
     63        } else {
     64            throw new UnsupportedFlavorException(flavor);
    7365        }
    74         throw new UnsupportedFlavorException(flavor);
    7566    }
    7667
    7768    protected String getStringData() {
    7869        final StringBuilder sb = new StringBuilder();
    79         for (OsmPrimitive primitive : primitives) {
    80             sb.append(primitive.getType())
    81               .append(' ').append(primitive.getUniqueId())
    82               .append(" # ").append(primitive.getDisplayName(DefaultNameFormatter.getInstance()))
    83               .append('\n');
     70        for (PrimitiveData primitive : primitives.getAll()) {
     71            if (sb.length() > 0) {
     72                sb.append("\n");
     73            }
     74            sb.append(OsmPrimitiveType.from(primitive).getAPIName()).append(' ').append(primitive.getId());
    8475        }
    8576        return sb.toString().replace("\u200E", "").replace("\u200F", "");
    8677    }
    87 
    88     protected Data getPrimitiveData() {
    89         final Collection<PrimitiveData> r = new ArrayList<>(primitives.size());
    90         for (OsmPrimitive primitive : primitives) {
    91             r.add(primitive.save());
    92         }
    93         return new Data(r);
    94     }
    9578}
Note: See TracChangeset for help on using the changeset viewer.