Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }