private static List <LayoutableGroup> FindUserGroups(Control declaringControl) { Dictionary <String, LayoutableGroup> dictionary = new Dictionary <String, LayoutableGroup>(); FieldInfo[] fis = declaringControl.GetType().GetFields( BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); foreach (FieldInfo fi in fis) { Object[] attr = fi.GetCustomAttributes(typeof(IFixedLayoutGroup), true); foreach (Object o in attr) { Control c = (Control)fi.GetValue(declaringControl); IFixedLayoutGroup lg = (IFixedLayoutGroup)o; if (!dictionary.ContainsKey(lg.GroupId)) { dictionary[lg.GroupId] = new LayoutableGroup(VBoxLayoutType.Instance, new ControlAdapter(null, c)); } else { LayoutableGroup l = dictionary[lg.GroupId]; AbstractLayoutable asl = new ControlAdapter(null, c); if (l.Controls.Contains(asl)) { throw new Exception("MultipleDefinition"); } dictionary[lg.GroupId].Add(VBoxLayoutType.Instance, asl); } if (lg.CustomLayoutControl != null) { ICustomLayoutControl clc = (ICustomLayoutControl)Activator.CreateInstance(lg.CustomLayoutControl); clc.DeclaringControl = declaringControl; dictionary[lg.GroupId].CustomLayoutControl = clc; } } } List <LayoutableGroup> tmp = new List <LayoutableGroup>(); foreach (LayoutableGroup lg in dictionary.Values) { tmp.Add(lg); } return(tmp); }
private static void BuildInterimLayoutablesGroups(List <AbstractLayoutable> layoutables, BoxLayoutType boxType, List <LayoutableGroup> layoutableGroups) { foreach (AbstractLayoutable c in layoutables) { bool inserted = false; foreach (LayoutableGroup m in layoutableGroups) { if (m.Intersects(boxType, c)) { inserted = true; m.Add(boxType, c); } } if (!inserted) { LayoutableGroup m = new LayoutableGroup(boxType, c); layoutableGroups.Add(m); } } }