Ejemplo n.º 1
0
        XmlDocument Write(bool includeUndoInfo)
        {
            XmlDocument doc = new XmlDocument();

            doc.PreserveWhitespace = true;

            XmlElement toplevel = doc.CreateElement("stetic-interface");

            doc.AppendChild(toplevel);

            ObjectWriter writer = new ObjectWriter(doc, FileFormat.Native);

            writer.CreateUndoInfo = includeUndoInfo;
            if (ownedGlobalActionGroups)
            {
                foreach (Wrapper.ActionGroup agroup in actionGroups)
                {
                    XmlElement elem = agroup.Write(writer);
                    toplevel.AppendChild(elem);
                }
            }

            if (iconFactory.Icons.Count > 0)
            {
                toplevel.AppendChild(iconFactory.Write(doc));
            }

            foreach (WidgetData data in topLevels)
            {
                if (data.Widget != null)
                {
                    Stetic.Wrapper.Container wrapper = Stetic.Wrapper.Container.Lookup(data.Widget);
                    if (wrapper == null)
                    {
                        continue;
                    }

                    XmlElement elem = wrapper.Write(writer);
                    if (elem != null)
                    {
                        toplevel.AppendChild(elem);
                    }
                }
                else
                {
                    toplevel.AppendChild(doc.ImportNode(data.XmlData, true));
                }
            }

            // Remove undo annotations from the xml document
            if (!includeUndoInfo)
            {
                CleanUndoData(doc.DocumentElement);
            }

            return(doc);
        }
Ejemplo n.º 2
0
        XmlDocument Write(bool includeUndoInfo)
        {
            XmlDocument doc = new XmlDocument();

            doc.PreserveWhitespace = true;

            XmlElement toplevel = doc.CreateElement("stetic-interface");

            doc.AppendChild(toplevel);

            XmlElement config = doc.CreateElement("configuration");

            if (!string.IsNullOrEmpty(imagesRootPath))
            {
                XmlElement iroot = doc.CreateElement("images-root-path");
                iroot.InnerText = imagesRootPath;
                config.AppendChild(iroot);
            }
            if (!string.IsNullOrEmpty(targetGtkVersion))
            {
                XmlElement iroot = doc.CreateElement("target-gtk-version");
                iroot.InnerText = targetGtkVersion;
                config.AppendChild(iroot);
            }

            if (config.ChildNodes.Count > 0)
            {
                toplevel.AppendChild(config);
            }

            if (widgetLibraries.Count > 0 || (resolver != null && resolver.Directories.Count > 0))
            {
                XmlElement importElem = doc.CreateElement("import");
                toplevel.AppendChild(importElem);
                string basePath = Path.GetDirectoryName(fileName);

                if (resolver != null && resolver.Directories.Count > 0)
                {
                    foreach (string dir in resolver.Directories)
                    {
                        XmlElement dirElem = doc.CreateElement("assembly-directory");
                        if (basePath != null)
                        {
                            dirElem.SetAttribute("path", AbsoluteToRelativePath(basePath, dir));
                        }
                        else
                        {
                            dirElem.SetAttribute("path", dir);
                        }
                        toplevel.AppendChild(dirElem);
                    }
                }

                foreach (string wlib in widgetLibraries)
                {
                    string     libName = wlib;
                    XmlElement libElem = doc.CreateElement("widget-library");
                    if (wlib.EndsWith(".dll") || wlib.EndsWith(".exe"))
                    {
                        if (basePath != null)
                        {
                            libName = AbsoluteToRelativePath(basePath, wlib);
                        }
                    }

                    libElem.SetAttribute("name", libName);
                    if (IsInternalLibrary(wlib))
                    {
                        libElem.SetAttribute("internal", "true");
                    }
                    importElem.AppendChild(libElem);
                }
            }

            ObjectWriter writer = new ObjectWriter(doc, FileFormat.Native);

            writer.CreateUndoInfo = includeUndoInfo;
            if (ownedGlobalActionGroups)
            {
                foreach (Wrapper.ActionGroup agroup in actionGroups)
                {
                    XmlElement elem = agroup.Write(writer);
                    toplevel.AppendChild(elem);
                }
            }

            if (iconFactory.Icons.Count > 0)
            {
                toplevel.AppendChild(iconFactory.Write(doc));
            }

            foreach (WidgetData data in topLevels)
            {
                if (data.Widget != null)
                {
                    Stetic.Wrapper.Container wrapper = Stetic.Wrapper.Container.Lookup(data.Widget);
                    if (wrapper == null)
                    {
                        continue;
                    }

                    XmlElement elem = wrapper.Write(writer);
                    if (elem != null)
                    {
                        toplevel.AppendChild(elem);
                    }
                }
                else
                {
                    toplevel.AppendChild(doc.ImportNode(data.XmlData, true));
                }
            }

            // Remove undo annotations from the xml document
            if (!includeUndoInfo)
            {
                CleanUndoData(doc.DocumentElement);
            }

            return(doc);
        }