Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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);
            }
        }