示例#1
0
        public virtual void Save(Stream s, IGraph <IVisual, IVisualEdge> source, IGraphSceneLayout <IVisual, IVisualEdge> layout)
        {
            var graph = source.Source <IVisual, IVisualEdge, IThing, ILink> ();

            if (graph != null)
            {
                var serializer = new VisualThingXmlSerializer {
                    VisualThingGraph = graph, Layout = layout, VisualsCollection = source
                };
                serializer.Write(s);
            }
        }
        public virtual XElement Write(GraphSceneDisplayMemento display)
        {
            var result = new XElement(NodeNames.Display);

            if (display.Iori != null)
            {
                result.Add(new XElement(NodeNames.Source, Write(NodeNames.File, display.Iori.ToString())));
            }
            else
            {
                // TODO: write MemoryThingGraph
            }

            var graph = display.Scene.Graph.Source <IVisual, IVisualEdge, IThing, ILink> ();

            if (graph != null)
            {
                var serializer = new VisualThingXmlSerializer();
                serializer.VisualThingGraph = graph;
                serializer.Layout           = display.Layout;
                serializer.Write(display.Scene.Graph);
                result.Add(serializer.XThings);
            }

            var sceneInfoSerializer = new SceneInfoXmlSerializer();

            result.Add(sceneInfoSerializer.Write(display.Info));

            result.Add(new XElement(NodeNames.Viewport,
                                    Write(NodeNames.Offset, display.Offset),
                                    Write(NodeNames.ZoomState, display.ZoomState),
                                    Write(NodeNames.Zoom, display.Zoom)));

            // TODO: serialize Layout
            result.Add(new XElement(NodeNames.Layout,
                                    Write(NodeNames.StyleSheet, display.Layout.StyleSheet.Name)));

            var focused = display.Scene.Graph.ThingOf(display.Scene.Focused);

            if (focused != null)
            {
                result.Add(new XElement(NodeNames.Scene, Write(NodeNames.Focused, focused.Id.ToString("X"))));
            }
            return(result);
        }