X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fflag%2FIOTablesInfo.java;fp=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fflag%2FIOTablesInfo.java;h=fd53e094c2439b48ce0517ee318b7a91b40b96d3;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/flag/IOTablesInfo.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/flag/IOTablesInfo.java new file mode 100644 index 000000000..fd53e094c --- /dev/null +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/flag/IOTablesInfo.java @@ -0,0 +1,47 @@ +package org.simantics.diagram.flag; + +import java.util.ArrayList; + +import org.simantics.databoard.Bindings; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.scl.runtime.tuple.Tuple2; + +public class IOTablesInfo { + public static final IOTablesInfo EMPTY = new IOTablesInfo(); + + ArrayList tables = new ArrayList(); + + public Tuple2 getBindingRef(double x, double y) { + for(IOTableInfo table : tables) { + if(x < table.x || x > table.x + table.width) + continue; + return new Tuple2(table.name, (int)((y-table.y)/table.rowHeight)); + } + return null; + } + + public boolean updateBinding(WriteGraph graph, DiagramResource DIA, Resource flagResource, double flagX, double flagY) throws DatabaseException { + Tuple2 bindingRef = getBindingRef(flagX, flagY); + + if(bindingRef != null) { + graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, (String)bindingRef.c0, Bindings.STRING); + graph.claimLiteral(flagResource, DIA.Flag_HasIOTableRowIndex, (Integer)bindingRef.c1, Bindings.INTEGER); + return true; + } + else { + String currentBinding = graph.getPossibleRelatedValue(flagResource, DIA.Flag_HasIOTableBinding); + if(currentBinding != null && !currentBinding.isEmpty()) { + graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, "", Bindings.STRING); + double[] transform = graph.getRelatedValue(flagResource, DIA.HasTransform, Bindings.DOUBLE_ARRAY); + transform[4] = flagX; + transform[5] = flagY; + graph.claimLiteral(flagResource, DIA.HasTransform, transform); + return true; + } + return false; + } + } +}