import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.Map.Entry;
+import java.util.Set;
import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;
import org.simantics.g2d.diagram.DiagramHints;
import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.element.ElementClass;
import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.handler.ElementLayers;
+import org.simantics.g2d.layers.ILayers;
import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler;
import org.simantics.scenegraph.g2d.events.command.CommandEvent;
import org.simantics.scenegraph.g2d.events.command.Commands;
if (e.command.equals( Commands.SELECT_ALL )) {
IDiagram d = getHint( DiagramHints.KEY_DIAGRAM );
if (d==null) return true;
- addAll(0, d.getElements());
+ addAll(0, filterSelectionByLayers(d, d.getElements()));
return true;
}
if (e.command.equals( Commands.INVERT_SELECTION )) {
Set<IElement> current = getSelection(0);
Set<IElement> inverted = new HashSet<IElement>(d.getElements());
inverted.removeAll(current);
- setSelection(0, inverted);
+ setSelection(0, filterSelectionByLayers(d, inverted));
return true;
}
return false;
}
+ private static Collection<IElement> filterSelectionByLayers(IDiagram diagram, Collection<IElement> elements) {
+ ILayers layers = diagram.getHint(DiagramHints.KEY_LAYERS);
+ if (layers != null && !layers.getIgnoreFocusSettings()) {
+ List<IElement> filteredElements = new ArrayList<IElement>();
+ for (IElement element : elements) {
+ ElementClass ec = element.getElementClass();
+ ElementLayers el = ec.getAtMostOneItemOfClass(ElementLayers.class);
+ if (el == null || el.isFocusable(element, layers)) {
+ filteredElements.add(element);
+ }
+ }
+ return filteredElements;
+ } else {
+ return elements;
+ }
+ }
/**
* Get selection