]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java
Spreadsheet updates cell values properly
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / SpreadsheetBook.java
index f87ce4d0675e851fee84a432d093241f38245607..d64d008edf713b1cfaf33a3e0fe28261bf188447 100644 (file)
@@ -6,9 +6,11 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 
 import org.simantics.databoard.Bindings;
 import org.simantics.databoard.binding.Binding;
@@ -365,7 +367,26 @@ public class SpreadsheetBook implements StandardNodeManagerSupport<SheetNode>, S
                v.visit(this);
        }
        
-       public List<SpreadsheetCell> invalidate(SpreadsheetCell cell) {
+       //Recursively find all SpreadsheetCells, invalidate them and return them all as a set
+       public Set<SpreadsheetCell> invalidate(SpreadsheetCell cell) {
+               Set<SpreadsheetCell> result = new HashSet<>();
+               result.add(cell);
+               cell.invalidate();
+               long refKey = cell.makeReferenceKey();
+               AbstractLongSet refs = referenceMap.remove(refKey);
+               if(refs == null) return result;
+               for(long ref : refs) {
+                       long sheet = ref >> 40;
+                       long row = (ref >> 20) & 0xFFFFF;
+                       long col = (ref) & 0xFFFFF;
+                       SpreadsheetCell referer = get(sheets.get((int)sheet), (int)row, (int)col);
+                       result.addAll(invalidate(referer));
+               }
+               return result;
+       }
+       
+       @Deprecated
+       public List<SpreadsheetCell> invalidateShallow(SpreadsheetCell cell) {
                ArrayList<SpreadsheetCell> result = new ArrayList<>();
                result.add(cell);
                cell.invalidate();