X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.spreadsheet.graph%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fgraph%2FSpreadsheetNodeManager.java;h=b86544c0dfed7a7e42328334622a84d21c568dbb;hb=f56d8b5c5225ef421009dadca4cec0ac56aef019;hp=caa6dc23f4602d10589187018c99f66a9f1f9a24;hpb=89b915a237d980f62d9ffe2caeb8a69170e0ce56;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetNodeManager.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetNodeManager.java index caa6dc23f..b86544c0d 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetNodeManager.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetNodeManager.java @@ -1,22 +1,45 @@ package org.simantics.spreadsheet.graph; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.mutable.Variant; import org.simantics.layer0.Layer0; -import org.simantics.simulator.toolkit.StandardNodeManager; +import org.simantics.simulator.toolkit.db.StandardVariableNodeManager; import org.simantics.simulator.variable.exceptions.NodeManagerException; +import org.simantics.spreadsheet.SpreadsheetCellStyle; import org.simantics.spreadsheet.resource.SpreadsheetResource; +import org.simantics.spreadsheet.solver.SheetNode; +import org.simantics.spreadsheet.solver.SpreadsheetBook; +import org.simantics.spreadsheet.solver.SpreadsheetBook.SpreadsheetBookListener; +import org.simantics.spreadsheet.solver.SpreadsheetCell; +import org.simantics.spreadsheet.solver.SpreadsheetCellContent; +import org.simantics.spreadsheet.solver.SpreadsheetCellContentExpression; +import org.simantics.spreadsheet.solver.SpreadsheetCellEditable; +import org.simantics.spreadsheet.solver.SpreadsheetFormula; +import org.simantics.spreadsheet.solver.SpreadsheetTypeNode; import org.simantics.structural.stubs.StructuralResource2; @SuppressWarnings("rawtypes") -public class SpreadsheetNodeManager extends StandardNodeManager { +public class SpreadsheetNodeManager extends StandardVariableNodeManager { public SpreadsheetNodeManager(SpreadsheetRealm realm) { super(realm, realm.getEngine()); + realm.getEngine().registerListener(new SpreadsheetBookListener() { + + @Override + public void cellsChanged(Collection cells) { + for(SpreadsheetCell cell : cells) { + System.err.println("Modification in cell " + cell); + refreshVariable(new SpreadsheetCellContent(cell)); + refreshVariable(new SpreadsheetCellContentExpression(cell)); + } + } + }); } static final Set COMPONENT_CLASS = Collections.singleton(StructuralResource2.URIs.Component); @@ -52,6 +75,12 @@ public class SpreadsheetNodeManager extends StandardNodeManager dirtyNodeContents = findDirtyNodeContents(node); super.setValueAndFireSelectedListeners(node, value, binding, dirtyNodeContents); + if(value instanceof SpreadsheetFormula) { + SpreadsheetCellContent scc = (SpreadsheetCellContent)node; + SpreadsheetCellContentExpression scce = new SpreadsheetCellContentExpression(scc.cell); + // We need to also refresh the expression variable in this case + refreshVariable(scce); + } } //Find the cells that are used by this cell and their SpreadsheetContents, so that they can be marked as dirty later @@ -78,4 +107,18 @@ public class SpreadsheetNodeManager extends StandardNodeManager