public void Clear()
 {
     foreach (var g in BackGraphs.ToArray())
     {
         UnregisterBackGraph(g);
     }
 }
 public void RegisterBackGraph(IGraph <TSourceItem, TSourceEdge> root)
 {
     if (!BackGraphs.Contains(root))
     {
         BackGraphs.Add(root);
         root.GraphChange -= this.BackGraphChange;
         root.GraphChange += this.BackGraphChange;
         root.ChangeData  -= this.BackGraphChangeData;
         root.ChangeData  += this.BackGraphChangeData;
     }
 }
        public void UnregisterBackGraph(IGraph <TSourceItem, TSourceEdge> root, bool forced)
        {
            root = BackGraphsOf(root).FirstOrDefault();
            var remove = forced || !ScenesOfBackGraph(root).Any();

            if (root != null && remove)
            {
                root.GraphChange -= this.BackGraphChange;
                root.ChangeData  -= this.BackGraphChangeData;
                BackGraphs.Remove(root);
            }
        }
 public IEnumerable <IGraph <TSourceItem, TSourceEdge> > BackGraphsOf(IGraph <TSourceItem, TSourceEdge> graph)
 {
     return(BackGraphs.Where(g => g == graph || g.UnWrapped() == graph || g.RootSink() == graph));
 }