private void AddSaveData(DirtyMarkNode node, string combinedId, Dictionary <string, object> saveData) { var combined = string.IsNullOrEmpty(combinedId) ? node.id: $"{combinedId}.{node.id}"; if (node.IsLeafNode) { saveData.Add(combined, node.Dirty.Value); } else { foreach (var child in node.Children) { AddSaveData(child, combined, saveData); } } }
private void AddChild(DirtyMarkNode child) { _children.Add(child); child.Dirty .Skip(1) .Subscribe(_ => ChildNodeUpdated?.Invoke()); if (_childrenDirtyCombined == null) { _childrenDirtyCombined = child._dirty; } else { _childrenDirtyCombined = Observable.CombineLatest(_childrenDirtyCombined, child._dirty, (a, b) => a || b) .ToReadOnlyReactiveProperty(_childrenDirtyCombined.Value || child._dirty.Value); } _markObserver?.Dispose(); _markObserver = _childrenDirtyCombined.Subscribe(c => _dirty.Value = c); }
private DirtyMarkNode SearchChild(List <string> splittedId) { if (splittedId.Count == 0) { return(this); } var target = _children.FirstOrDefault(node => node.id.Equals(splittedId[0])); if (target == null) { target = new DirtyMarkNode(splittedId[0]); AddChild(target); } if (splittedId.Count == 1) { return(target); } else { return(target.SearchChild(new List <string>(splittedId.Skip(1)))); } }
public DirtyMarkSaveManager(DirtyMarkNode rootNode) { _root = rootNode; }