Ignore:
Timestamp:
2018-02-18T05:02:23+01:00 (7 years ago)
Author:
Don-vip
Message:

see #8039, see #10456 - support read-only data layers

File:
1 edited

Legend:

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

    r13219 r13434  
    4848
    4949    /**
    50      * This event is fired whenever the active or the edit layer changes.
     50     * This event is fired whenever the active or the data layer changes.
    5151     * @author Michael Zangl
    5252     */
    5353    public static class ActiveLayerChangeEvent extends LayerManagerEvent {
    5454
    55         private final OsmDataLayer previousEditLayer;
     55        private final OsmDataLayer previousDataLayer;
    5656
    5757        private final Layer previousActiveLayer;
     
    6060         * Create a new {@link ActiveLayerChangeEvent}
    6161         * @param source The source
    62          * @param previousEditLayer the previous edit layer
     62         * @param previousDataLayer the previous data layer
    6363         * @param previousActiveLayer the previous active layer
    6464         */
    65         ActiveLayerChangeEvent(MainLayerManager source, OsmDataLayer previousEditLayer,
     65        ActiveLayerChangeEvent(MainLayerManager source, OsmDataLayer previousDataLayer,
    6666                Layer previousActiveLayer) {
    6767            super(source);
    68             this.previousEditLayer = previousEditLayer;
     68            this.previousDataLayer = previousDataLayer;
    6969            this.previousActiveLayer = previousActiveLayer;
    7070        }
    7171
    7272        /**
    73          * Gets the edit layer that was previously used.
    74          * @return The old edit layer, <code>null</code> if there is none.
    75          */
     73         * Gets the data layer that was previously used.
     74         * @return The old data layer, <code>null</code> if there is none.
     75         * @deprecated use {@link #getPreviousDataLayer}
     76         */
     77        @Deprecated
    7678        public OsmDataLayer getPreviousEditLayer() {
    77             return previousEditLayer;
     79            return getPreviousDataLayer();
     80        }
     81
     82        /**
     83         * Gets the data layer that was previously used.
     84         * @return The old data layer, <code>null</code> if there is none.
     85         * @since 13434
     86         */
     87        public OsmDataLayer getPreviousDataLayer() {
     88            return previousDataLayer;
    7889        }
    7990
     
    8899        /**
    89100         * Gets the data set that was previously used.
    90          * @return The data set of {@link #getPreviousEditLayer()}.
    91          */
     101         * @return The data set of {@link #getPreviousDataLayer()}.
     102         * @deprecated use {@link #getPreviousDataSet}
     103         */
     104        @Deprecated
    92105        public DataSet getPreviousEditDataSet() {
    93             if (previousEditLayer != null) {
    94                 return previousEditLayer.data;
     106            return getPreviousDataSet();
     107        }
     108
     109        /**
     110         * Gets the data set that was previously used.
     111         * @return The data set of {@link #getPreviousDataLayer()}.
     112         * @since 13434
     113         */
     114        public DataSet getPreviousDataSet() {
     115            if (previousDataLayer != null) {
     116                return previousDataLayer.data;
    95117            } else {
    96118                return null;
     
    151173
    152174    /**
    153      * The edit layer is the current active data layer.
    154      */
    155     private OsmDataLayer editLayer;
     175     * The current active data layer. It might be editable or not, based on its read-only status.
     176     */
     177    private OsmDataLayer dataLayer;
    156178
    157179    private final List<ActiveLayerChangeListener> activeLayerChangeListeners = new CopyOnWriteArrayList<>();
     
    214236
    215237    /**
    216      * Set the active layer, unless the layer is read-only.
     238     * Set the active layer, unless the layer is being uploaded.
    217239     * If the layer is an OsmDataLayer, the edit layer is also changed.
    218240     * @param layer The active layer.
     
    221243        // we force this on to the EDT Thread to make events fire from there.
    222244        // The synchronization lock needs to be held by the EDT.
    223         if (layer instanceof OsmDataLayer && ((OsmDataLayer) layer).isReadOnly()) {
     245        if (layer instanceof OsmDataLayer && ((OsmDataLayer) layer).isUploadInProgress()) {
    224246            GuiHelper.runInEDT(() ->
    225247                    JOptionPane.showMessageDialog(
     
    240262
    241263    private void setActiveLayer(Layer layer, boolean forceEditLayerUpdate) {
    242         ActiveLayerChangeEvent event = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
     264        ActiveLayerChangeEvent event = new ActiveLayerChangeEvent(this, dataLayer, activeLayer);
    243265        activeLayer = layer;
    244266        if (activeLayer instanceof OsmDataLayer) {
    245             editLayer = (OsmDataLayer) activeLayer;
     267            dataLayer = (OsmDataLayer) activeLayer;
    246268        } else if (forceEditLayerUpdate) {
    247             editLayer = null;
     269            dataLayer = null;
    248270        }
    249271        fireActiveLayerChange(event);
     
    252274    private void fireActiveLayerChange(ActiveLayerChangeEvent event) {
    253275        GuiHelper.assertCallFromEdt();
    254         if (event.getPreviousActiveLayer() != activeLayer || event.getPreviousEditLayer() != editLayer) {
     276        if (event.getPreviousActiveLayer() != activeLayer || event.getPreviousDataLayer() != dataLayer) {
    255277            for (ActiveLayerChangeListener l : activeLayerChangeListeners) {
    256278                l.activeOrEditLayerChanged(event);
     
    277299    @Override
    278300    protected Collection<Layer> realRemoveSingleLayer(Layer layer) {
    279         if ((layer instanceof OsmDataLayer) && (((OsmDataLayer) layer).isReadOnly())) {
     301        if ((layer instanceof OsmDataLayer) && (((OsmDataLayer) layer).isUploadInProgress())) {
    280302            GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog(MainApplication.parent,
    281303                    tr("Trying to delete the layer with background upload. Please wait until the upload is finished.")));
     
    285307        }
    286308
    287         if (layer == activeLayer || layer == editLayer) {
     309        if (layer == activeLayer || layer == dataLayer) {
    288310            Layer nextActive = suggestNextActiveLayer(layer);
    289311            setActiveLayer(nextActive, true);
     
    337359    public synchronized Layer getActiveLayer() {
    338360        if (activeLayer instanceof OsmDataLayer) {
    339             if (!((OsmDataLayer) activeLayer).isReadOnly()) {
     361            if (!((OsmDataLayer) activeLayer).isUploadInProgress()) {
    340362                return activeLayer;
    341363            } else {
     
    351373     *
    352374     * @return the current edit layer. May be null.
     375     * @see #getActiveDataLayer
    353376     */
    354377    public synchronized OsmDataLayer getEditLayer() {
    355         if (editLayer != null && !editLayer.isReadOnly())
    356             return editLayer;
     378        if (dataLayer != null && !dataLayer.isReadOnly())
     379            return dataLayer;
    357380        else
    358381            return null;
     
    360383
    361384    /**
    362      * Gets the data set of the active edit layer.
     385     * Replies the active data layer. The layer can be read-only.
     386     *
     387     * @return the current data layer. May be null or read-only.
     388     * @see #getEditLayer
     389     * @since 13434
     390     */
     391    public synchronized OsmDataLayer getActiveDataLayer() {
     392        if (dataLayer != null)
     393            return dataLayer;
     394        else
     395            return null;
     396    }
     397
     398    /**
     399     * Gets the data set of the active edit layer, if not readOnly.
    363400     * @return That data set, <code>null</code> if there is no edit layer.
     401     * @see #getActiveDataSet
    364402     */
    365403    public synchronized DataSet getEditDataSet() {
    366         if (editLayer != null) {
    367             return editLayer.data;
     404        if (dataLayer != null && !dataLayer.isReadOnly()) {
     405            return dataLayer.data;
     406        } else {
     407            return null;
     408        }
     409    }
     410
     411    /**
     412     * Gets the data set of the active data layer. The dataset can be read-only.
     413     * @return That data set, <code>null</code> if there is no active data layer.
     414     * @see #getEditDataSet
     415     * @since 13434
     416     */
     417    public synchronized DataSet getActiveDataSet() {
     418        if (dataLayer != null) {
     419            return dataLayer.data;
    368420        } else {
    369421            return null;
     
    413465     */
    414466    public void invalidateEditLayer() {
    415         if (editLayer != null) {
    416             editLayer.invalidate();
     467        if (dataLayer != null) {
     468            dataLayer.invalidate();
    417469        }
    418470    }
     
    445497     */
    446498    public void prepareLayerForUpload(OsmDataLayer layer) {
    447 
    448499        GuiHelper.assertCallFromEdt();
     500        layer.setUploadInProgress();
    449501        layer.setReadOnly();
    450502
    451503        // Reset only the edit layer as empty
    452         if (editLayer == layer) {
    453             ActiveLayerChangeEvent activeLayerChangeEvent = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
    454             editLayer = null;
     504        if (dataLayer == layer) {
     505            ActiveLayerChangeEvent activeLayerChangeEvent = new ActiveLayerChangeEvent(this, dataLayer, activeLayer);
     506            dataLayer = null;
    455507            fireActiveLayerChange(activeLayerChangeEvent);
    456508        }
     
    467519        GuiHelper.assertCallFromEdt();
    468520        layer.unsetReadOnly();
     521        layer.unsetUploadInProgress();
    469522
    470523        // Set the layer as edit layer if the edit layer is empty.
    471         if (editLayer == null) {
    472             ActiveLayerChangeEvent layerChangeEvent = new ActiveLayerChangeEvent(this, editLayer, activeLayer);
    473             editLayer = layer;
     524        if (dataLayer == null) {
     525            ActiveLayerChangeEvent layerChangeEvent = new ActiveLayerChangeEvent(this, dataLayer, activeLayer);
     526            dataLayer = layer;
    474527            fireActiveLayerChange(layerChangeEvent);
    475528        }
Note: See TracChangeset for help on using the changeset viewer.