Exemplo n.º 1
0
        public override List <AppResult> Children(bool recursive = true)
        {
            if (resultIter == null || !resultIter.HasValue)
            {
                List <AppResult> children = new List <AppResult> ();
                TreeIter         topIter;
                if (TModel.GetIterFirst(out topIter))
                {
                    var child = new GtkTreeModelResult(ParentWidget, TModel, Column, topIter);
                    children.Add(child);
                    this.FirstChild  = child;
                    child.ParentNode = this;

                    if (recursive)
                    {
                        var topIterChildren = FetchIterChildren(topIter, child, recursive);
                        child.FirstChild = topIterChildren.FirstOrDefault();
                        children.AddRange(topIterChildren);
                    }

                    GtkTreeModelResult previousSibling = child;
                    while (TModel.IterNext(ref topIter))
                    {
                        var nextSibling = new GtkTreeModelResult(ParentWidget, TModel, Column, topIter);
                        children.Add(nextSibling);

                        nextSibling.PreviousSibling = previousSibling;
                        previousSibling.NextSibling = nextSibling;
                        nextSibling.ParentNode      = this;

                        if (recursive)
                        {
                            var topIterChildren = FetchIterChildren(topIter, nextSibling, recursive);
                            nextSibling.FirstChild = topIterChildren.FirstOrDefault();
                            children.AddRange(topIterChildren);
                        }
                    }
                }

                DisposeWithResult(FirstChild);
                return(children);
            }

            TreeIter currentIter = (TreeIter)resultIter;

            return(FetchIterChildren(currentIter, this, recursive));
        }
Exemplo n.º 2
0
        List <AppResult> FetchIterChildren(TreeIter iter, GtkTreeModelResult result, bool recursive)
        {
            List <AppResult> newList = new List <AppResult> ();

            if (!TModel.IterHasChild(iter))
            {
                return(newList);
            }

            GtkTreeModelResult previousSibling = null;

            for (int i = 0; i < TModel.IterNChildren(iter); i++)
            {
                TreeIter childIter;
                if (TModel.IterNthChild(out childIter, iter, i))
                {
                    var child = new GtkTreeModelResult(ParentWidget, TModel, Column, childIter);

                    child.ParentNode      = this;
                    child.PreviousSibling = previousSibling;
                    if (previousSibling != null)
                    {
                        previousSibling.NextSibling = child;
                    }

                    newList.Add(child);
                    if (recursive)
                    {
                        var childrenIter = FetchIterChildren(childIter, child, recursive);
                        newList.AddRange(childrenIter);
                        child.FirstChild = childrenIter.FirstOrDefault();
                    }

                    previousSibling = child;
                }
            }
            result.FirstChild = newList.FirstOrDefault();
            DisposeWithResult(result.FirstChild);
            return(newList);
        }
Exemplo n.º 3
0
		protected ObjectProperties GetProperties (object resultObject)
		{
			var propertiesObject = new ObjectProperties ();
			if (resultObject != null) {
				var properties = resultObject.GetType ().GetProperties (
					BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
				foreach (var property in properties) {
					try {
						var value = GetPropertyValue (property.Name, resultObject);
						AppResult result = null;

						var gtkNotebookValue = value as Gtk.Notebook;
						if (gtkNotebookValue != null)
							result = new GtkNotebookResult (gtkNotebookValue);
						var gtkTreeviewValue = value as Gtk.TreeView;
						if (gtkTreeviewValue != null && result == null)
							result = new GtkTreeModelResult (gtkTreeviewValue, gtkTreeviewValue.Model, 0);
						var gtkWidgetValue = value as Gtk.Widget;
						if (gtkWidgetValue != null && result == null)
							result = new GtkWidgetResult (gtkWidgetValue);
						#if MAC
						var nsObjectValue = value as Foundation.NSObject;
						if (nsObjectValue != null && result == null)
							result = new NSObjectResult (nsObjectValue);
						#endif
						if (result == null)
							result = new ObjectResult (value);
						propertiesObject.Add (property.Name, result, property);
					} catch (Exception e) {
						MonoDevelop.Core.LoggingService.LogInfo ("Failed to fetch property '{0}' on '{1}' with Exception: {2}", property, resultObject, e);
					}
				}
			}

			return propertiesObject;
		}
Exemplo n.º 4
0
		List<AppResult> FetchIterChildren (TreeIter iter, GtkTreeModelResult result, bool recursive)
		{
			List<AppResult> newList = new List<AppResult> ();
			if (!TModel.IterHasChild (iter))
			{
				return newList;
			}

			GtkTreeModelResult previousSibling = null;
			for (int i = 0; i < TModel.IterNChildren (iter); i++) {
				TreeIter childIter;
				if (TModel.IterNthChild (out childIter, iter, i)) {
					var child = new GtkTreeModelResult (ParentWidget, TModel, Column, childIter);

					child.ParentNode = this;
					child.PreviousSibling = previousSibling;
					if (previousSibling != null)
						previousSibling.NextSibling = child;
					
					newList.Add (child);
					if (recursive) {
						var childrenIter = FetchIterChildren (childIter, child, recursive);
						newList.AddRange (childrenIter);
						child.FirstChild = childrenIter.FirstOrDefault ();
					}

					previousSibling = child;
				}
			}
			result.FirstChild = newList.FirstOrDefault ();
			return newList;
		}
Exemplo n.º 5
0
		public override List<AppResult> Children (bool recursive = true)
		{
			if (resultIter == null || !resultIter.HasValue) {
				List<AppResult> children = new List<AppResult> ();
				TreeIter topIter;
				if (TModel.GetIterFirst (out topIter)) {
					var child = new GtkTreeModelResult (ParentWidget, TModel, Column, topIter);
					children.Add (child);
					this.FirstChild = child;
					child.ParentNode = this;

					if (recursive) {
						var topIterChildren = FetchIterChildren (topIter, child, recursive);
						child.FirstChild = topIterChildren.FirstOrDefault ();
						children.AddRange (topIterChildren);
					}

					GtkTreeModelResult previousSibling = child;
					while (TModel.IterNext (ref topIter)) {
						var nextSibling = new GtkTreeModelResult (ParentWidget, TModel, Column, topIter);
						children.Add (nextSibling);

						nextSibling.PreviousSibling = previousSibling;
						previousSibling.NextSibling = nextSibling;
						nextSibling.ParentNode = this;

						if (recursive) {
							var topIterChildren = FetchIterChildren (topIter, nextSibling, recursive);
							nextSibling.FirstChild = topIterChildren.FirstOrDefault ();
							children.AddRange (topIterChildren);
						}
					}
				}
				return children;
			}

			TreeIter currentIter = (TreeIter) resultIter;
			return FetchIterChildren (currentIter, this, recursive);
		}
Exemplo n.º 6
0
		protected ObjectProperties GetProperties (object resultObject)
		{
			var propertiesObject = new ObjectProperties ();
			if (resultObject != null) {
				var properties = resultObject.GetType ().GetProperties (
					BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
				foreach (var property in properties) {
					var value = GetPropertyValue (property.Name, resultObject);
					AppResult result = null;

					var gtkNotebookValue = value as Gtk.Notebook;
					if (gtkNotebookValue != null)
						result = new GtkNotebookResult (gtkNotebookValue);
					var gtkTreeviewValue = value as Gtk.TreeView;
					if (gtkTreeviewValue != null && result == null)
						result = new GtkTreeModelResult (gtkTreeviewValue, gtkTreeviewValue.Model, 0);
					var gtkWidgetValue = value as Gtk.Widget;
					if (gtkWidgetValue != null && result == null)
						result = new GtkWidgetResult (gtkWidgetValue);
					#if MAC
					var nsObjectValue = value as Foundation.NSObject;
					if (nsObjectValue != null && result == null)
						result = new NSObjectResult (nsObjectValue);
					#endif
					if (result == null)
						result = new ObjectResult (value);

					propertiesObject.Add (property.Name, result, property);
				}
			}

			return propertiesObject;
		}