/// <summary> /// adds items to view and data /// </summary> /// <param name="item"></param> /// <param name="pt"></param> public virtual void Add(IEnumerable <TItem> elements, bool justify, bool arrange) { var scene = this.Scene; ApplyFilter(); var curr = scene.Focused; var affected = new SubGraphWorker <TItem, TEdge>(this.SubGraph) .Add(elements); if (justify || arrange) { var aligner = CreateAligner(scene); var options = Layout.Options(); if (arrange) { options.Collisions = Collisions.NextFree | Collisions.Toggle; aligner.Columns(affected, options); } else if (justify) { aligner.Justify(affected); } aligner.Commit(); } RestoreFocused(curr); }
public void ReadDescriptionTest() { IThing root = GetRoot(); if (root == null) { WriteDescriptionTest(); } root = GetRoot(); ReportDetail("Reading"); this.Tickers.Start(); var schemaGraph = this.Graph as SchemaThingGraph; var view = new SubGraph <IThing, ILink>(this.Graph, new Graph <IThing, ILink>()); var facade = new SubGraphWorker <IThing, ILink>(view); view.Add(root); var iCount = 0; for (var i = 0; i < ReadCount; i++) { foreach (var thing in facade.Expand(new IThing[] { root }, false)) { if (!(thing is ILink)) { var thingToDisplay = schemaGraph.ThingToDisplay(thing); iCount++; } } } ReportSummary(string.Format("Reads \t{0}\t({1} repeats)", iCount, ReadCount)); }
/// <summary> /// adds item to view and data /// </summary> /// <param name="item"></param> /// <param name="pt"></param> public virtual void Add(TItem item, Point pt) { var scene = this.Scene; if (scene == null || item == null) { return; } ApplyFilter(); var curr = scene.Focused; var affected = new SubGraphWorker <TItem, TEdge> (this.SubGraph).Add(item); var aligner = CreateAligner(scene); aligner.Locator.Justify(item); var options = Layout.Options(); var bounds = aligner.NearestNextFreeSpace(pt, aligner.Locator.GetSize(item), new TItem[] { item }, true, options.Dimension, options.Distance); aligner.Locator.SetLocation(item, bounds.Location); aligner.AffectedEdges(new TItem[] { item }); aligner.Commit(); RestoreFocused(curr); }
public virtual void AddRaw(IEnumerable <TItem> elements) { var scene = this.Scene; ApplyFilter(); var curr = scene.Focused; var affected = new SubGraphWorker <TItem, TEdge> (this.SubGraph) .Add(elements); }
public virtual void Expand(bool deep) { var scene = this.Scene; if (scene.Selected.Count > 0) { ApplyFilter(); var roots = scene.Selected.Elements; var curr = scene.Focused; var affected = new SubGraphWorker <TItem, TEdge> (this.SubGraph).Expand(roots, deep); var aligner = CreateAligner(scene); var options = Layout.Options(); var walk = SubGraph.Walk(); roots.ForEach(root => { affected.Add(root); var route = (deep ? walk.DeepWalk(root, 1) : walk.ExpandWalk(root, 1)) .OnEach(l => { if (l.Node is TEdge) { aligner.Locator.AffectedEdges.Add((TEdge)l.Node); } return(l); }) .Where(l => !(l.Node is TEdge) && affected.Contains(l.Node)); if (OrderBy != null) { route = route.OrderBy(l => l, new LevelItemComparer <TItem> { OrderBy = this.OrderBy }); } route = route.ToArray(); if (route.Count() > 0) { var bounds = new Rectangle(aligner.Locator.GetLocation(root), aligner.Locator.GetSize(root)); options.Collisions = Collisions.None; var cols = aligner.MeasureWalk(route, ref bounds, options); aligner.DequeColumn(cols, ref bounds, options); options.Collisions = Collisions.NextFree | Collisions.PerColumn | Collisions.Toggle; aligner.LocateColumns(cols, bounds, options); } }); aligner.Commit(); RestoreFocused(curr); } }
public void TestExpand() { var options = new AlignerOptions { AlignX = Alignment.Start, AlignY = Alignment.Center, Dimension = Dimension.X, PointOrder = PointOrder.XY, }; var worker = SceneWorkerWithTestData2(3, options); options.Distance = worker.Layout.Distance; var origins = new IVisual [] { worker.Scene.Focused }; var aligner = new Aligner <IVisual, IVisualEdge> (worker.Scene, worker.Layout); var deep = false; var graphView = worker.Scene.Graph as SubGraph <IVisual, IVisualEdge>; var affected = new SubGraphWorker <IVisual, IVisualEdge> (graphView).Expand(origins, deep); var walk = graphView.Walk(); origins.ForEach(origin => { var route = (deep ? walk.DeepWalk(origin, 1) : walk.ExpandWalk(origin, 1)) .Where(l => !(l.Node is IVisualEdge)).ToArray(); var bounds = new Rectangle(aligner.Locator.GetLocation(origin), aligner.Locator.GetSize(origin)); options.Collisions = Collisions.None; var cols = aligner.MeasureWalk(route, ref bounds, options); var removeCol = cols.Dequeue(); if (options.Dimension == Dimension.X) { var adjust = options.AlignY.Delta(bounds.Height, removeCol.Item2.Height); bounds.Location = new Point(bounds.X + removeCol.Item2.Width + options.Distance.Width, bounds.Y - adjust); } else { var adjust = options.AlignX.Delta(bounds.Width, removeCol.Item2.Width); bounds.Location = new Point(bounds.X + adjust, bounds.Y + removeCol.Item2.Height + options.Distance.Height); } options.Collisions = Collisions.NextFree | Collisions.PerColumn | Collisions.Toggle; aligner.LocateColumns(cols, bounds, options); }); aligner.Commit(); worker.Modeller.Perform(); worker.Modeller.Finish(); ReportPainter.PushPaint(ctx => worker.Painter.Paint(ctx)); WritePainter(); }
public virtual void Collapse() { if (Scene.Selected.Count > 0) { ApplyFilter(); var scene = this.Scene; var curr = scene.Focused; var affected = new SubGraphWorker <TItem, TEdge> (this.SubGraph) { RemoveOrphans = this.RemoveOrphans } .Collapse(scene.Selected.Elements); UpdateRemoved(affected); RestoreFocused(curr); } }