public WidgetEditSession (ProjectBackend sourceProject, WidgetDesignerFrontend frontend, string windowName) { this.frontend = frontend; undoManager = new ContainerUndoRedoManager (); undoQueue = new UndoQueue (); undoManager.UndoQueue = undoQueue; sourceWidget = windowName; this.project = sourceProject; rootWidget = sourceProject.GetTopLevelWrapper (windowName, true); rootWidget.Select (); undoManager.RootObject = rootWidget; this.project.Changed += new ProjectChangedEventHandler (OnChanged); this.project.ProjectReloaded += new EventHandler (OnProjectReloaded); this.project.ProjectReloading += new EventHandler (OnProjectReloading); // this.project.WidgetMemberNameChanged += new Stetic.Wrapper.WidgetNameChangedHandler (OnWidgetNameChanged); }
public WidgetEditSession (ProjectBackend sourceProject, WidgetDesignerFrontend frontend, string windowName, Stetic.ProjectBackend editingBackend, bool autoCommitChanges) { this.frontend = frontend; this.autoCommitChanges = autoCommitChanges; undoManager = new ContainerUndoRedoManager (); undoQueue = new UndoQueue (); undoManager.UndoQueue = undoQueue; sourceWidget = windowName; this.sourceProject = sourceProject; if (!autoCommitChanges) { // Reuse the action groups and icon factory of the main project gproject = editingBackend; // Attach will prevent the destruction of the action group list by gproject gproject.AttachActionGroups (sourceProject.ActionGroups); gproject.IconFactory = sourceProject.IconFactory; gproject.FileName = sourceProject.FileName; gproject.ImagesRootPath = sourceProject.ImagesRootPath; gproject.ResourceProvider = sourceProject.ResourceProvider; gproject.WidgetLibraries = (ArrayList) sourceProject.WidgetLibraries.Clone (); gproject.InternalWidgetLibraries = (ArrayList) sourceProject.InternalWidgetLibraries.Clone (); gproject.TargetGtkVersion = sourceProject.TargetGtkVersion; sourceProject.ComponentTypesChanged += OnSourceProjectLibsChanged; sourceProject.ProjectReloaded += OnSourceProjectReloaded; rootWidget = editingBackend.GetTopLevelWrapper (sourceWidget, false); if (rootWidget == null) { // Copy the widget to edit from the source project // When saving the file, this project will be merged with the main project. sourceProject.CopyWidgetToProject (windowName, gproject, windowName); rootWidget = gproject.GetTopLevelWrapper (windowName, true); } gproject.Modified = false; } else { rootWidget = sourceProject.GetTopLevelWrapper (windowName, true); gproject = sourceProject; } rootWidget.Select (); undoManager.RootObject = rootWidget; gproject.ModifiedChanged += new EventHandler (OnModifiedChanged); gproject.Changed += new EventHandler (OnChanged); gproject.ProjectReloaded += new EventHandler (OnProjectReloaded); gproject.ProjectReloading += new EventHandler (OnProjectReloading); // gproject.WidgetMemberNameChanged += new Stetic.Wrapper.WidgetNameChangedHandler (OnWidgetNameChanged); }
void SetErrorMode () { Gtk.Label lab = new Gtk.Label (); lab.Markup = "<b>" + Catalog.GetString ("The form designer could not be loaded") + "</b>"; Gtk.EventBox box = new Gtk.EventBox (); box.Add (lab); widget = Stetic.UserInterface.CreateWidgetDesigner (box, 100, 100); rootWidget = null; OnRootWidgetChanged (); }
void OnProjectReloaded (object s, EventArgs a) { // Update the actions group list if (!autoCommitChanges) { gproject.AttachActionGroups (sourceProject.ActionGroups); gproject.WidgetLibraries = (ArrayList) sourceProject.WidgetLibraries.Clone (); gproject.InternalWidgetLibraries = (ArrayList) sourceProject.InternalWidgetLibraries.Clone (); } Gtk.Widget[] tops = gproject.Toplevels; if (tops.Length > 0) { rootWidget = Stetic.Wrapper.Container.Lookup (tops[0]); undoManager.RootObject = rootWidget; if (rootWidget != null) { Gtk.Widget oldWidget = designer; if (widget != null) { widget.SelectionChanged -= OnSelectionChanged; widget = null; } OnRootWidgetChanged (); if (oldWidget != null) { // Delay the destruction of the old widget, so the designer has time to // show the new widget. This avoids flickering. GLib.Timeout.Add (500, delegate { oldWidget.Destroy (); return false; }); } gproject.NotifyComponentTypesChanged (); return; } } SetErrorMode (); }
public void Dispose () { sourceProject.ComponentTypesChanged -= OnSourceProjectLibsChanged; sourceProject.ProjectReloaded -= OnSourceProjectReloaded; gproject.ModifiedChanged -= new EventHandler (OnModifiedChanged); gproject.Changed -= new EventHandler (OnChanged); gproject.ProjectReloaded -= OnProjectReloaded; gproject.ProjectReloading -= OnProjectReloading; // gproject.WidgetMemberNameChanged -= new Stetic.Wrapper.WidgetNameChangedHandler (OnWidgetNameChanged); if (!autoCommitChanges) { // Don't dispose the project here! it will be disposed by the frontend if (widget != null) { widget.SelectionChanged -= OnSelectionChanged; // Don't dispose the widget. It will be disposed when destroyed together // with the container widget = null; } } if (plug != null) plug.Destroy (); gproject = null; rootWidget = null; frontend = null; System.Runtime.Remoting.RemotingServices.Disconnect (this); disposed = true; }
public static WidgetDesignerBackend CreateWidgetDesigner(Gtk.Container widget) { Stetic.Wrapper.Container wc = Stetic.Wrapper.Container.Lookup(widget); return(CreateWidgetDesigner(widget, wc.DesignWidth, wc.DesignHeight)); }
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", ToOSAgnosticRelPath(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 = ToOSAgnosticRelPath(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); }
void OnProjectReloaded (object s, EventArgs a) { Gtk.Widget topWidget = project.GetWidget (sourceWidget); if (topWidget != null) { rootWidget = Stetic.Wrapper.Container.Lookup (topWidget); undoManager.RootObject = rootWidget; if (rootWidget != null) { Gtk.Widget oldWidget = designer; if (widget != null) { widget.SelectionChanged -= OnSelectionChanged; widget = null; } OnRootWidgetChanged (); if (oldWidget != null) { // Delay the destruction of the old widget, so the designer has time to // show the new widget. This avoids flickering. GLib.Timeout.Add (500, delegate { oldWidget.Destroy (); return false; }); } project.NotifyComponentTypesChanged (); return; } } SetErrorMode (); }
public void Dispose () { project.ComponentTypesChanged -= OnSourceProjectLibsChanged; project.ProjectReloaded -= OnSourceProjectReloaded; project.Changed -= new ProjectChangedEventHandler (OnChanged); project.ProjectReloaded -= OnProjectReloaded; project.ProjectReloading -= OnProjectReloading; // project.WidgetMemberNameChanged -= new Stetic.Wrapper.WidgetNameChangedHandler (OnWidgetNameChanged); if (plug != null) plug.Destroy (); rootWidget = null; frontend = null; System.Runtime.Remoting.RemotingServices.Disconnect (this); disposed = true; }