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)); }
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); }
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; }
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; }
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); }
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; }