]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/SimpleElementLayers.java
Bringing layers back to life
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / element / handler / impl / SimpleElementLayers.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.g2d.element.handler.impl;
13
14 import java.util.Collections;
15 import java.util.Set;
16
17 import org.simantics.g2d.element.ElementHints;
18 import org.simantics.g2d.element.IElement;
19 import org.simantics.g2d.element.handler.ElementLayerListener;
20 import org.simantics.g2d.element.handler.ElementLayers;
21 import org.simantics.g2d.layers.ILayer;
22 import org.simantics.g2d.layers.ILayers;
23
24 /**
25  * @author Antti Villberg
26  */
27 public class SimpleElementLayers implements ElementLayers {
28
29     public static final SimpleElementLayers INSTANCE = new SimpleElementLayers();
30
31     private static final long serialVersionUID = 379502115902223354L;
32
33     @Override
34     public boolean isVisible(IElement e, ILayers layers) {
35
36         assert (e != null);
37         assert (layers != null);
38
39         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_VISIBLE_LAYERS);
40         if (elementLayers == null)
41             return true;
42
43         return !Collections.disjoint(layers.getVisibleLayers(), elementLayers);
44
45     }
46
47     @Override
48     public boolean isVisible(IElement e, ILayer layer) {
49
50         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_VISIBLE_LAYERS);
51         if (elementLayers == null)
52             return true;
53
54 //              System.out.println("Testing: '" + layer.getName() + "'");
55 //              for(ILayer l : elementLayers) System.out.println("elementLayer: '" + l.getName() + "'");
56 //              System.out.println("result = " + elementLayers.contains(layer));
57
58         return elementLayers.contains(layer);
59
60     }
61
62     @Override
63     public boolean isFocusable(IElement e, ILayers layers) {
64
65         assert (e != null);
66         assert (layers != null);
67
68         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_FOCUS_LAYERS);
69         if (elementLayers == null)
70             return true;
71
72         return !Collections.disjoint(layers.getVisibleLayers(), elementLayers);
73
74     }
75
76     @Override
77     public boolean isFocusable(IElement e, ILayer layer) {
78
79         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_FOCUS_LAYERS);
80         if (elementLayers == null)
81             return true;
82
83         return elementLayers.contains(layer);
84
85     }
86
87     @Override
88     public boolean setVisibility(IElement e, ILayer layer, boolean value) {
89
90         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_VISIBLE_LAYERS);
91         if (elementLayers == null)
92             return false;
93         boolean result;
94         if (value)
95             result = elementLayers.add(layer);
96         else
97             result = elementLayers.remove(layer);
98
99         if (result) {
100             for (ElementLayerListener ell : e.getElementClass().getItemsByClass(ElementLayerListener.class)) {
101                 ell.visibilityChanged(e, layer, value);
102             }
103         }
104
105         return result;
106     }
107
108     @Override
109     public boolean setFocusability(IElement e, ILayer layer, boolean value) {
110
111         Set<ILayer> elementLayers = (Set<ILayer>) e.getHint(ElementHints.KEY_FOCUS_LAYERS);
112         if (elementLayers == null)
113             return false;
114         boolean result;
115         if (value)
116             result = elementLayers.add(layer);
117         else
118             result = elementLayers.remove(layer);
119
120         if (result) {
121             for (ElementLayerListener ell : e.getElementClass().getItemsByClass(ElementLayerListener.class)) {
122                 ell.focusabilityChanged(e, layer, value);
123             }
124         }
125
126         return result;
127     }
128
129 }