Exemplo n.º 1
0
    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);
            }
        }
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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))));
        }
    }
Exemplo n.º 4
0
 public DirtyMarkSaveManager(DirtyMarkNode rootNode)
 {
     _root = rootNode;
 }