]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java
Introduce new DiagramViewer.getRuntimeFromManager()
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / SpreadsheetBook.java
index f87ce4d0675e851fee84a432d093241f38245607..d741d4c7abf5870958ff585a675649c9bfc6127c 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;
@@ -22,12 +24,12 @@ import org.simantics.spreadsheet.graph.synchronization.LineUpdater;
 import org.simantics.spreadsheet.graph.synchronization.NullUpdater;
 import org.simantics.spreadsheet.graph.synchronization.SheetLineComponent;
 import org.simantics.spreadsheet.graph.synchronization.StyleUpdater;
-import org.simantics.structural.synchronization.base.ComponentFactory;
-import org.simantics.structural.synchronization.base.MappingBase;
 import org.simantics.structural.synchronization.base.ModuleUpdaterBase;
 import org.simantics.structural.synchronization.base.ModuleUpdaterFactoryBase;
-import org.simantics.structural.synchronization.base.Solver;
 import org.simantics.structural.synchronization.base.SolverNameUtil;
+import org.simantics.structural.synchronization.utils.ComponentFactory;
+import org.simantics.structural.synchronization.utils.MappingBase;
+import org.simantics.structural.synchronization.utils.Solver;
 
 import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
 import it.unimi.dsi.fastutil.longs.AbstractLongList;
@@ -40,7 +42,9 @@ public class SpreadsheetBook implements StandardNodeManagerSupport<SheetNode>, S
 
        private static final long serialVersionUID = 7417208688311691396L;
        
-       public Serializable NotAvailableError = new Serializable() {};
+       public Serializable NotAvailableError = new Serializable() {
+               private static final long serialVersionUID = 2535371785498129460L;
+       };
        
        public Long2ObjectOpenHashMap<AbstractLongSet> referenceMap = new Long2ObjectOpenHashMap<>();
        
@@ -365,7 +369,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();