コード例 #1
0
		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);
		}
コード例 #2
0
		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);
		}
コード例 #3
0
		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 ();
		}
コード例 #4
0
		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 ();
		}
コード例 #5
0
		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;
		}
コード例 #6
0
 public static WidgetDesignerBackend CreateWidgetDesigner(Gtk.Container widget)
 {
     Stetic.Wrapper.Container wc = Stetic.Wrapper.Container.Lookup(widget);
     return(CreateWidgetDesigner(widget, wc.DesignWidth, wc.DesignHeight));
 }
コード例 #7
0
ファイル: ProjectBackend.cs プロジェクト: noah1510/dotdevelop
        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);
        }
コード例 #8
0
		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 ();
		}
コード例 #9
0
		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;
		}