public static void Import (ProjectBackend project, string filename) { XmlDocument doc = new XmlDocument (); doc.PreserveWhitespace = true; doc.XmlResolver = null; doc.Load (filename); project.Id = System.IO.Path.GetFileName (filename); doc = GladeUtils.XslImportTransform (doc); XmlNode node = doc.SelectSingleNode ("/glade-interface"); if (node == null) throw new ApplicationException (Catalog.GetString ("Not a glade file according to node name.")); ObjectReader reader = new ObjectReader (project, FileFormat.Glade); foreach (XmlElement toplevel in node.SelectNodes ("widget")) { Wrapper.Container wrapper = Stetic.ObjectWrapper.ReadObject (reader, toplevel, null) as Wrapper.Container; if (wrapper != null) project.AddWidget ((Gtk.Widget)wrapper.Wrapped); } }
public Stetic.Wrapper.ActionGroup AddNewActionGroupFromTemplate (string template) { XmlDocument doc = new XmlDocument (); doc.LoadXml (template); ObjectReader or = new ObjectReader (this, FileFormat.Native); Stetic.Wrapper.ActionGroup group = new Stetic.Wrapper.ActionGroup (); group.Read (or, doc.DocumentElement); ActionGroups.Add (group); return group; }
public Gtk.Widget GetWidget (WidgetData data) { if (data.Widget == null) { try { loading = true; ObjectReader reader = new ObjectReader (this, FileFormat.Native); Wrapper.Container wrapper = Stetic.ObjectWrapper.ReadObject (reader, data.XmlData) as Wrapper.Container; data.Widget = wrapper.Wrapped; } finally { loading = false; } } return data.Widget; }
void Read (XmlDocument doc) { loading = true; string basePath = fileName != null ? Path.GetDirectoryName (fileName) : null; try { string fn = fileName; Close (); fileName = fn; XmlNode node = doc.SelectSingleNode ("/stetic-interface"); if (node == null) throw new ApplicationException (Catalog.GetString ("Not a Stetic file according to node name.")); // Load configuration options foreach (XmlNode configNode in node.SelectNodes ("configuration/*")) { XmlElement config = configNode as XmlElement; if (config == null) continue; if (config.LocalName == "images-root-path") imagesRootPath = config.InnerText; else if (config.LocalName == "target-gtk-version") targetGtkVersion = config.InnerText; } // Load the assembly directories resolver = new AssemblyResolver (app); foreach (XmlElement libElem in node.SelectNodes ("import/assembly-directory")) { string dir = libElem.GetAttribute ("path"); if (dir.Length > 0) { if (basePath != null && !Path.IsPathRooted (dir)) { dir = FromOSAgnosticRelPath (Path.Combine (basePath, dir)); if (Directory.Exists (dir)) dir = Path.GetFullPath (dir); } resolver.Directories.Add (dir); } } // Import the referenced libraries foreach (XmlElement libElem in node.SelectNodes ("import/widget-library")) { string libname = libElem.GetAttribute ("name"); if (libname.EndsWith (".dll") || libname.EndsWith (".exe")) { if (basePath != null && !Path.IsPathRooted (libname)) { libname = FromOSAgnosticRelPath (Path.Combine (basePath, libname)); if (File.Exists (libname)) libname = Path.GetFullPath (libname); } } widgetLibraries.Add (libname); if (libElem.GetAttribute ("internal") == "true") internalLibs.Add (libname); } app.LoadLibraries (resolver, widgetLibraries); ObjectReader reader = new ObjectReader (this, FileFormat.Native); if (ownedGlobalActionGroups) { foreach (XmlElement groupElem in node.SelectNodes ("action-group")) { Wrapper.ActionGroup actionGroup = new Wrapper.ActionGroup (); actionGroup.Read (reader, groupElem); actionGroups.Add (actionGroup); } } XmlElement iconsElem = node.SelectSingleNode ("icon-factory") as XmlElement; if (iconsElem != null) iconFactory.Read (this, iconsElem); foreach (XmlElement toplevel in node.SelectNodes ("widget")) { topLevels.Add (new WidgetData (toplevel.GetAttribute ("id"), toplevel, null)); } } finally { loading = false; } }
public static Gtk.Widget ImportWidget (IProject project, XmlElement element) { ObjectReader reader = new ObjectReader (project, FileFormat.Native); ObjectWrapper wrapper = Stetic.ObjectWrapper.ReadObject (reader, element, null); return wrapper.Wrapped as Gtk.Widget; }
public static Stetic.Wrapper.Widget Import (IProject project, XmlDocument doc) { try { doc = XslImportTransform (doc); } catch { return null; } ObjectReader reader = new ObjectReader (project, FileFormat.Glade); XmlElement elem = (XmlElement)doc.SelectSingleNode ("glade-interface/widget"); if (elem.GetAttribute ("class") != "GtkWindow" || elem.GetAttribute ("id") != "glade-dummy-container") { // Creating a new toplevel Stetic.Wrapper.Widget toplevel = (Stetic.Wrapper.Widget) Stetic.ObjectWrapper.ReadObject (reader, elem); if (toplevel != null) { project.AddWindow ((Gtk.Window)toplevel.Wrapped); } return toplevel; } return (Stetic.Wrapper.Widget) Stetic.ObjectWrapper.ReadObject (reader, (XmlElement)elem.SelectSingleNode ("child/widget")); }
public static ObjectWrapper ReadObject (ObjectReader reader, XmlElement elem, ObjectWrapper wrapper) { try { wrapper.OnBeginRead (reader.Format); wrapper.Read (reader, elem); return wrapper; } catch (Exception ex) { Console.WriteLine (ex); ErrorWidget we = new ErrorWidget (ex, elem.GetAttribute ("id")); ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we); wrap.Read (reader, elem); return wrap; } finally { wrapper.OnEndRead (reader.Format); } }
public static ObjectWrapper ReadObject (ObjectReader reader, XmlElement elem) { string className = elem.GetAttribute ("class"); ClassDescriptor klass; if (reader.Format == FileFormat.Native) klass = Registry.LookupClassByName (className); else klass = Registry.LookupClassByCName (className); if (klass == null) { ErrorWidget we = new ErrorWidget (className, elem.GetAttribute ("id")); ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we); wrap.Read (reader, elem); return wrap; } if (!klass.SupportsGtkVersion (reader.Project.TargetGtkVersion)) { ErrorWidget we = new ErrorWidget (className, klass.TargetGtkVersion, reader.Project.TargetGtkVersion, elem.GetAttribute ("id")); ErrorWidgetWrapper wrap = (ErrorWidgetWrapper) Create (reader.Project, we); wrap.Read (reader, elem); return wrap; } ObjectWrapper wrapper = klass.CreateWrapper (); wrapper.classDescriptor = klass; wrapper.proj = reader.Project; return ReadObject (reader, elem, wrapper); }
public virtual void Read (ObjectReader reader, XmlElement element) { throw new System.NotImplementedException (); }
void AddActionGroup (XmlElement groupElem) { ObjectReader reader = new ObjectReader (this, FileFormat.Native); Wrapper.ActionGroup actionGroup = new Wrapper.ActionGroup (); actionGroup.Read (reader, groupElem); actionGroups.Add (actionGroup); }
public override void Read(ObjectReader reader, XmlElement elem) { elementData = elem; this.format = reader.Format; }
void Read(XmlDocument doc) { loading = true; string basePath = fileName != null?Path.GetDirectoryName(fileName) : null; try { string fn = fileName; Close(); fileName = fn; XmlNode node = doc.SelectSingleNode("/stetic-interface"); if (node == null) { throw new ApplicationException(Catalog.GetString("Not a Stetic file according to node name.")); } // Load configuration options foreach (XmlNode configNode in node.SelectNodes("configuration/*")) { XmlElement config = configNode as XmlElement; if (config == null) { continue; } if (config.LocalName == "images-root-path") { imagesRootPath = config.InnerText; } else if (config.LocalName == "target-gtk-version") { targetGtkVersion = config.InnerText; } } // Load the assembly directories resolver = new AssemblyResolver(app); foreach (XmlElement libElem in node.SelectNodes("import/assembly-directory")) { string dir = libElem.GetAttribute("path"); if (dir.Length > 0) { if (basePath != null && !Path.IsPathRooted(dir)) { dir = FromOSAgnosticRelPath(Path.Combine(basePath, dir)); if (Directory.Exists(dir)) { dir = Path.GetFullPath(dir); } } resolver.Directories.Add(dir); } } // Import the referenced libraries foreach (XmlElement libElem in node.SelectNodes("import/widget-library")) { string libname = libElem.GetAttribute("name"); if (libname.EndsWith(".dll") || libname.EndsWith(".exe")) { if (basePath != null && !Path.IsPathRooted(libname)) { libname = FromOSAgnosticRelPath(Path.Combine(basePath, libname)); if (File.Exists(libname)) { libname = Path.GetFullPath(libname); } } } widgetLibraries.Add(libname); if (libElem.GetAttribute("internal") == "true") { internalLibs.Add(libname); } } app.LoadLibraries(resolver, widgetLibraries); ObjectReader reader = new ObjectReader(this, FileFormat.Native); if (ownedGlobalActionGroups) { foreach (XmlElement groupElem in node.SelectNodes("action-group")) { Wrapper.ActionGroup actionGroup = new Wrapper.ActionGroup(); actionGroup.Read(reader, groupElem); actionGroups.Add(actionGroup); } } XmlElement iconsElem = node.SelectSingleNode("icon-factory") as XmlElement; if (iconsElem != null) { iconFactory.Read(this, iconsElem); } foreach (XmlElement toplevel in node.SelectNodes("widget")) { topLevels.Add(new WidgetData(toplevel.GetAttribute("id"), toplevel, null)); } } finally { loading = false; } }