protected virtual void ComposePagesDisplay(IGraphSceneDisplay <IVisual, IVisualEdge> display) { display.SceneFocusChanged += (s, e) => { var docMan = new DigidocViz(); var pageContent = docMan.PageContent(e.Scene.Graph, e.Item); PageContent = pageContent; if (pageContent != null && ContentViewer != null) { AttachScroller(display, ContentViewer.Frontend as IDisplay); var thing = e.Scene.Graph.ThingOf(e.Item); ContentViewer.ContentId = thing.Id; } }; var layout = display.Layout; Border = new Size(0, -5); layout.StyleSheet = DefaultStyleSheet; var focusAction = display.ActionDispatcher.GetAction <GraphSceneFocusAction <IVisual, IVisualEdge> > (); if (focusAction != null) { focusAction.HitSize = -1; } var folding = display.Folding(); folding.Folder.RemoveOrphans = false; }
public virtual void SetDocument(GraphCursor <IVisual, IVisualEdge> source) { var pagesDisplay = this.PagesDisplay; // bring the docpages into view: var docManager = new DigidocViz(); var pageScene = new Scene(); pagesDisplay.Data = pageScene; var doc = source.Graph.ThingOf(source.Cursor); IGraph <IVisual, IVisualEdge> targetGraph = null; targetGraph = Mesh.CreateSinkGraph(source.Graph); pageScene.Graph = targetGraph; Mesh.AddScene(pageScene); var targetDocument = targetGraph.VisualOf(doc); this.DocumentVisual = targetDocument; // get the pages and add them to scene: var pages = docManager.Pages(targetGraph, targetDocument).OrderBy(e => e, new VisualComparer()).ToList(); pages.ForEach(page => pagesDisplay.Data.Add(page)); var distance = pagesDisplay.Layout.Distance; pagesDisplay.Layout.Border = this.Border; var aligner = new Aligner <IVisual, IVisualEdge> (pagesDisplay.Data, pagesDisplay.Layout); var dd = this.Border.Height; var options = new AlignerOptions { Distance = new Size(dd, dd), AlignX = Alignment.End, AlignY = Alignment.Start, Dimension = Dimension.X, PointOrderDelta = 1 }; aligner.OneColumn(pages, (Point)this.Border, options); aligner.Locator.Commit(aligner.GraphScene.Requests); new State { Hollow = true }.CopyTo(pagesDisplay.State); pagesDisplay.Text = source.Cursor.Data == null ? CommonSchema.NullString : source.Cursor.Data.ToString(); pagesDisplay.Viewport.Reset(); pagesDisplay.BackendRenderer.Render(); // show first page: var firstPage = pages.FirstOrDefault(); if (firstPage != null) { pageScene.Focused = firstPage; pagesDisplay.OnSceneFocusChanged(); } pagesDisplay.Perform(); var pageCache = new Set <IVisual> (pages); var moveResize = pagesDisplay.ActionDispatcher.GetAction <GraphItemMoveResizeAction <IVisual, IVisualEdge> > (); moveResize.FocusFilter = e => pageCache.Contains(e) ? null : e; }