import org.simantics.g2d.layers.ILayers;
import org.simantics.g2d.layers.ILayersEditor;
import org.simantics.g2d.layers.ILayersEditor.ILayersEditorListener;
-import org.simantics.g2d.layers.SimpleLayer;
import org.simantics.g2d.layers.SimpleLayers;
import org.simantics.layer0.Layer0;
@Override
public void perform(WriteGraph g) throws Exception {
String newName = layer.getName();
- for (Resource l : g.getObjects(diagram, dia.HasLayer)) {
- String name = g.getRelatedValue(l, l0.HasName);
+ for (Resource layer : g.getObjects(diagram, dia.HasLayer)) {
+ String name = g.getRelatedValue(layer, l0.HasName);
if (newName.equals(name)) {
return;
}
}
- GraphLayer l = new GraphLayerUtil(g).createLayer(newName, false);
- g.claim(diagram, dia.HasLayer, l.getLayer());
- layers.put(newName, l);
+
+ IGraphLayerUtil util = g.adapt(DiagramResource.getInstance(g).Layer, IGraphLayerUtil.class);
+ GraphLayer layer = util.createLayer(g, newName, false);
+ g.claim(diagram, dia.HasLayer, layer.getLayer());
+ layers.put(newName, layer);
}
}
}
}
- GraphLayer loadLayer(ReadGraph g, Resource layer) throws DatabaseException {
- String name = g.getRelatedValue(layer, l0.HasName);
- Resource visible = g.getSingleObject(layer, dia.HasVisibleTag);
- Resource focusable = g.getSingleObject(layer, dia.HasFocusableTag);
- return new GraphLayer(name, layer, visible, focusable);
- }
-
public ILayersEditor loadLayers(IDiagram diagram, ReadGraph g, Resource diagramResource) throws DatabaseException {
+
SimpleLayers result = new SimpleLayers();
ConcurrentMap<String, GraphLayer> newLayers = new ConcurrentHashMap<String, GraphLayer>();
// We need to put GraphLayer to newLayers so...
for (Resource layer : g.getObjects(diagramResource, dia.HasLayer)) {
- GraphLayer gl = loadLayer(g, layer);
+ IGraphLayerUtil layerUtil = g.adapt(g.getSingleObject(layer, Layer0.getInstance(g).InstanceOf), IGraphLayerUtil.class);
+
+ GraphLayer gl = layerUtil.loadLayer(g, layer);
for (String name : fixed) {
if (name.equals(gl.getName())) {
- SimpleLayer l = new SimpleLayer(gl.getName());
+ ILayer l = gl.getILayer();
newLayers.put(gl.getName(), gl);
result.addLayer(l);
result.activate(l);
System.out.println("Loading layers");
for (Resource layer : g.getObjects(diagramResource, dia.HasLayer)) {
- GraphLayer gl = loadLayer(g, layer);
- SimpleLayer l = new SimpleLayer(gl.getName());
+ IGraphLayerUtil layerUtil = g.adapt(g.getSingleObject(layer, Layer0.getInstance(g).InstanceOf), IGraphLayerUtil.class);
+ GraphLayer gl = layerUtil.loadLayer(g, layer);
+ ILayer l = gl.getILayer();
newLayers.put(gl.getName(), gl);
result.addLayer(l);
if (DEBUG_LAYERS)
System.out.println(" Loaded " + (active ? "active" : "inactive") + " layer '" + gl.getName() + "'");
- l.addLayerListener(layerListener);
+ if (l instanceof IEditableLayer)
+ ((IEditableLayer) l).addLayerListener(layerListener);
if (active)
result.activate(l);
}
graph.forHasStatement(element, gl.getVisible(), element, new AsyncProcedureAdapter<Boolean>() {
@Override
public void execute(AsyncReadGraph graph, Boolean result) {
- synchronized (visible) {
- visible.add(l);
+ if (result) {
+ synchronized (visible) {
+ visible.add(l);
+ }
}
if (DEBUG_LAYERS)
System.out.println(" Visible on layer '" + gl.getName() + "'");
graph.forHasStatement(element, gl.getFocusable(), element, new AsyncProcedureAdapter<Boolean>() {
@Override
public void execute(AsyncReadGraph graph, Boolean result) {
- synchronized (focusable) {
- focusable.add(l);
+ if (result) {
+ synchronized (focusable) {
+ focusable.add(l);
+ }
}
if (DEBUG_LAYERS)
System.out.println(" Focusable on layer '" + gl.getName() + "'");
for (ILayer layer : visibleLayers) {
GraphLayer gl = layers.get(layer.getName());
if (gl != null) {
- DiagramGraphUtil.tag(g, element, gl.getVisible(), true);
- DiagramGraphUtil.tag(g, element, gl.getFocusable(), true);
+ gl.forEachTag(tag -> DiagramGraphUtil.tag(g, element, tag, true));
}
}
}