private void Scan() { List <GLib.GType> gtypes = new List <GLib.GType>(); foreach (PropertyInfo info in typeof(T).GetProperties(BindingFlags.Default | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { object[] attrs = info.GetCustomAttributes(typeof(NodeColumnAttribute), false); if (attrs.Length > 0) { NodeColumnAttribute attr = (NodeColumnAttribute)attrs[0]; MethodInfo getter = info.GetGetMethod(); d_valueGetters.Insert(attr.Index, getter); d_sortable[attr.Index] = Array.IndexOf(getter.ReturnType.GetInterfaces(), typeof(IComparable)) != -1; gtypes.Insert(attr.Index, (GLib.GType)info.PropertyType); } attrs = info.GetCustomAttributes(typeof(PrimaryKeyAttribute), false); if (attrs.Length > 0) { MethodInfo getter = info.GetGetMethod(); d_primaryKeys[info.PropertyType] = getter; } } foreach (MethodInfo info in typeof(T).GetMethods(BindingFlags.Default | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { object[] attrs = info.GetCustomAttributes(typeof(CustomRendererAttribute), false); foreach (object attr in attrs) { CustomRendererAttribute at = (CustomRendererAttribute)attr; d_customRenderers.Add(new CustomRenderer(at.Column, at.Renderer, info)); } attrs = info.GetCustomAttributes(typeof(SortColumnAttribute), false); foreach (object attr in attrs) { SortColumnAttribute at = (SortColumnAttribute)attr; d_sortColumns[at.Column] = info; d_sortable[at.Column] = true; } } d_gtypes = gtypes.ToArray(); }
public override string ToString() { List <string> ret = new List <string>(); foreach (PropertyInfo info in GetType().GetProperties()) { object[] attrs = info.GetCustomAttributes(typeof(NodeColumnAttribute), false); if (attrs.Length > 0) { NodeColumnAttribute attr = (NodeColumnAttribute)attrs[0]; ret.Insert(attr.Index, String.Format("{0} = {1}", info.Name, info.GetGetMethod().Invoke(this, new object[] {}))); } } return(String.Format("[Node: {0}]", String.Join(", ", ret.ToArray()))); }