Revision 40945
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/toc/actions/CopyLayersTocMenuEntry.java | ||
---|---|---|
24 | 24 |
package org.gvsig.app.project.documents.view.toc.actions; |
25 | 25 |
|
26 | 26 |
import java.awt.Component; |
27 |
import java.util.ArrayList; |
|
28 |
import java.util.List; |
|
27 | 29 |
|
28 | 30 |
import javax.swing.JOptionPane; |
29 | 31 |
|
... | ... | |
34 | 36 |
import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction; |
35 | 37 |
import org.gvsig.app.project.documents.view.toc.ITocItem; |
36 | 38 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
39 |
import org.gvsig.fmap.mapcontext.layers.FLayers; |
|
37 | 40 |
import org.gvsig.i18n.Messages; |
38 | 41 |
import org.gvsig.tools.persistence.PersistentState; |
39 | 42 |
|
... | ... | |
73 | 76 |
} |
74 | 77 |
|
75 | 78 |
|
76 |
public void execute(ITocItem item, FLayer[] selectedItems) {
|
|
79 |
public void execute(ITocItem item, FLayer[] selItems) { |
|
77 | 80 |
|
78 | 81 |
PersistentState lyrs_state = null; |
79 | 82 |
|
80 | 83 |
try { |
84 |
/* |
|
85 |
* This prevents copying the same layer |
|
86 |
* twice (because a parent is also copied) |
|
87 |
*/ |
|
88 |
FLayer[] tocopy = getLayersWithNoActiveAncestors(selItems); |
|
89 |
|
|
81 | 90 |
lyrs_state = CopyPasteLayersUtils.getAsFLayersPersistentState( |
82 |
selectedItems, this.getMapContext());
|
|
91 |
tocopy, this.getMapContext());
|
|
83 | 92 |
/* |
84 | 93 |
* Saving layers data to clipboard. |
85 | 94 |
* Files and URLs are not relativized |
... | ... | |
107 | 116 |
} |
108 | 117 |
} |
109 | 118 |
|
119 |
private FLayer[] getLayersWithNoActiveAncestors(FLayer[] selItems) { |
|
120 |
|
|
121 |
List<FLayer> resp = new ArrayList<FLayer>(); |
|
122 |
FLayer lyr = null; |
|
123 |
for (int i=0; i<selItems.length; i++) { |
|
124 |
lyr = selItems[i]; |
|
125 |
if (!hasActiveAncestor(lyr)) { |
|
126 |
resp.add(lyr); |
|
127 |
} |
|
128 |
} |
|
129 |
return resp.toArray(new FLayer[0]); |
|
130 |
} |
|
110 | 131 |
|
132 |
private boolean hasActiveAncestor(FLayer lyr) { |
|
133 |
|
|
134 |
FLayers lyrs = lyr.getParentLayer(); |
|
135 |
while (lyrs != null) { |
|
136 |
if (lyrs.isActive()) { |
|
137 |
return true; |
|
138 |
} else { |
|
139 |
if (lyrs == lyrs.getParentLayer()) { |
|
140 |
/* |
|
141 |
* Prevent endless loop due to bad setting |
|
142 |
*/ |
|
143 |
return false; |
|
144 |
} else { |
|
145 |
lyrs = lyrs.getParentLayer(); |
|
146 |
} |
|
147 |
} |
|
148 |
} |
|
149 |
return false; |
|
150 |
} |
|
151 |
|
|
152 |
|
|
111 | 153 |
} |
Also available in: Unified diff