Exemple #1
0
        public virtual void Resume(IConceptUsecase usecase)
        {
            if (XmlUsecase == null || usecase.FavoriteManager == null)
            {
                return;
            }

            ComposeContentViewers();

            Mesh.ClearDisplays();

            var backHandler = Mesh.BackHandler <IThing, ILink>();
            var backGraphs  = backHandler.BackGraphs.ToArray();

            var ser = new UsecaseXmlSerializer();

            ser.Read(XmlUsecase, usecase);

            var graphChanged = backGraphs.Distinct().Any();

            // close others
            foreach (var g in backHandler.BackGraphs
                     //.Where(g=>backGraphs.Contains(g)
                     .Select(g => new { iori = ThingMeshHelper.GetIori(g), graph = g })
                     .Where(g => g.iori == null || !ser.FileNames.Contains(g.iori.ToString()))
                     .Select(j => j.graph)
                     .ToArray())
            {
                backHandler.UnregisterBackGraph(g);

                usecase.GraphSceneUiManager.SetContent(ThingMeshHelper.GetContent(g));
                usecase.GraphSceneUiManager.Close();
            }

            if (graphChanged)
            {
                usecase.FavoriteManager.Clear();
                usecase.SceneManager.Clear();
                usecase.VisualsDisplayHistory.Clear();

                foreach (var d in Mesh.Displays)
                {
                    if (d.Info.Id != usecase.FavoriteManager.HomeId)
                    {
                        usecase.VisualsDisplayHistory.Store(d, usecase.SceneManager);
                    }
                }
            }
            var thingGraph = backHandler.BackGraphs.FirstOrDefault() as IThingGraph;

            if (thingGraph != null)
            {
                usecase.GraphSceneUiManager.SetContent(ThingMeshHelper.GetContent(thingGraph));
            }

            var focused = usecase.SplitView.Display1.Data.Focused;

            usecase.SplitView.Display1.Data.FocusChanged?.Invoke(usecase.SplitView.Display1.Data, focused);
            usecase.SplitView.Display1.OnSceneFocusChanged();
        }
Exemple #2
0
        public virtual XElement Write(IConceptUsecase usecase)
        {
            var result = new XElement(NodeNames.Usecase);

            result.Add(new MeshXmlSerializer().Write(Mesh));

            var splitView = new XElement(NodeNames.SplitView);
            var displays  = new XElement(NodeNames.Displays);

            Action <IGraphSceneDisplay <IVisual, IVisualEdge>, string> writeSplitDisplays = (d, n) => {
                BeforeSave?.Invoke(d, n);
                var display = new XElement(GraphSceneDisplayXmlSerializer.NodeNames.Display);
                display.Add(Write(NodeNames.Name, n));
                display.Add(Write(SceneInfoXmlSerializer.NodeNames.Id, d.DataId.ToString("X")));
                displays.Add(display);
            };

            writeSplitDisplays(usecase.SplitView.Display1, NodeNames.SplitViewDisplay1);
            writeSplitDisplays(usecase.SplitView.Display2, NodeNames.SplitViewDisplay2);

            splitView.Add(displays);
            result.Add(splitView);

            var favorites = new XElement(NodeNames.Favorites);

            favorites.Add(Write(NodeNames.HomeId, usecase.FavoriteManager.HomeId.ToString("X")));
            result.Add(favorites);

            return(result);
        }
Exemple #3
0
        public void Save(IConceptUsecase usecase)
        {
            if (usecase.SplitView == null || usecase.GraphSceneUiManager == null)
            {
                return;
            }

            HomeId = usecase.FavoriteManager.HomeId;
            var displays = Mesh.Displays;

            usecase.VisualsDisplayHistory.SaveChanges(displays, usecase.SceneManager, false);
            usecase.FavoriteManager.SaveChanges(displays);
            usecase.GraphSceneUiManager.Save();

            Save("SplitView.Display1", usecase.SplitView.Display1);
            Save("SplitView.Display2", usecase.SplitView.Display2);

            ClearContentViewers();
        }
Exemple #4
0
        public virtual void Save(IConceptUsecase usecase)
        {
            if (usecase.SplitView == null || usecase.GraphSceneUiManager == null)
            {
                return;
            }

            var displays = Mesh.Displays;

            usecase.VisualsDisplayHistory.SaveChanges(displays, usecase.SceneManager, false);
            usecase.FavoriteManager.SaveChanges(displays);
            usecase.GraphSceneUiManager.Save();

            usecase.SplitView.ContentViewManager.SaveContentOfViewers();

            XmlUsecase = new UsecaseXmlSerializer()
                         .Write(usecase);

            StoreContentViewerTypes();
        }
Exemple #5
0
        public void Resume(IConceptUsecase usecase)
        {
            if (SavedDisps == null || usecase.FavoriteManager == null)
            {
                return;
            }

            // there could be a resume without compose (only called in start)
            if (Registry.Pooled <ContentViewerProvider> ().Viewers.Count() == 0)
            {
                ComposeContentViewers();
            }

            if (SavedDisps.Count > 0)
            {
                Restore("SplitView.Display1", usecase.SplitView.Display1);
                Restore("SplitView.Display2", usecase.SplitView.Display2);
                if (usecase.SplitView.CurrentDisplay != null && usecase.SplitView.CurrentDisplay.Data.Focused != null)
                {
                    usecase.SplitView.CurrentDisplay.OnSceneFocusChanged();
                }
            }
            usecase.FavoriteManager.HomeId = HomeId;
        }
Exemple #6
0
        public virtual void Read(XElement node, IConceptUsecase usecase)
        {
            var ms = new MeshXmlSerializer();

            ms.Read(node, Mesh);

            FileNames = ms.FileNames;

            var backHandler = Mesh.BackHandler <IThing, ILink> ();
            var filesOpen   = backHandler
                              .BackGraphs
                              .Select(g => new {
                Iori  = ThingMeshHelper.GetIori(g),
                Graph = g
            })
                              .Where(i => i.Iori != null)
                              .ToDictionary(k => k.Iori.ToString(), e => e.Graph);


            foreach (var file in ms.FileNames)
            {
                var io = Registry.Pooled <ThingGraphIoPool> ().Find(Path.GetExtension(file), Limaki.Contents.IO.IoMode.Read)
                         as ThingGraphIo;

                if (!filesOpen.ContainsKey(file))
                {
                    try {
                        var content = io.Open(Iori.FromFileName(file));
                        var g       = backHandler.WrapGraph(content.Data);
                        backHandler.RegisterBackGraph(g);
                    } catch (Exception e) {
                    }
                }
            }

            var displays = ReadElement(ReadElement(node, NodeNames.SplitView), NodeNames.Displays);

            foreach (var display in ReadElements(displays, GraphSceneDisplayXmlSerializer.NodeNames.Display))
            {
                var name = Read <string> (display, NodeNames.Name);
                var id   = Read <long> (display, SceneInfoXmlSerializer.NodeNames.Id);
                var d    = Mesh.Displays.Where(disp => disp.DataId == id).FirstOrDefault();
                if (d == null)
                {
                    var dm = ms.Displays.Where(disp => disp.Info.Id == id).FirstOrDefault();
                    if (name == NodeNames.SplitViewDisplay1 && dm != null)
                    {
                        dm.Restore(usecase.SplitView.Display1);
                        AfterRestore?.Invoke(d, name);
                    }
                    if (name == NodeNames.SplitViewDisplay2 && dm != null)
                    {
                        dm.Restore(usecase.SplitView.Display2);
                        AfterRestore?.Invoke(d, name);
                    }
                }
            }

            var homeId = Read <long> (ReadElement(node, NodeNames.Favorites), NodeNames.HomeId);

            usecase.FavoriteManager.HomeId = homeId;
        }