Exemplo n.º 1
0
 /// <summary>
 /// Find a matching layout for this Member using known values and converters.
 /// See <see cref="RawCallLayout.FindLayout(string, ConverterInfo[])"/>
 /// </summary>
 /// <param name="name">member name</param>
 /// <returns>layout found</returns>
 protected virtual IRawLayout GetLayout(string name)
 {
     return(RawCallLayout.FindLayout(name, Converters));
 }
Exemplo n.º 2
0
        /// <summary>
        /// When configured by XML or by <see cref="ArrangementConverter"/> in general,
        /// the <see cref="Option"/> is tried to figure out the <see cref="IRawLayout"/> to use.
        /// </summary>
        /// <remarks>
        /// It can be a <see cref="PatternString" />, then the option will be stringified.
        /// It can be a <see cref="string"/>, then <see cref="ArrangementConverter.GetArrangement"/> will be attempted.
        /// It can be an <see cref="IArrangement"/>, then it will be used to arrange a new <see cref="RawArrangedLayout"/>
        /// It can be another <see cref="IMember" />, then if Name was not set yet it will be adopted.
        /// It can be a <see cref="ConverterInfo" />, then a new RawCallLayout will be set up around it.
        /// It can be a <see cref="PatternParser" />, then a new RawCallLayout will be set up around it.
        /// </remarks>
        public void ActivateOptions()
        {
            if (Option == null)
            {
                Option = GetLayout(Name);
                return;
            }

            if (Option is PatternString)
            {
                var ps = (PatternString)Option;
                Option = ps.Format();
            }

            if (Option is string)
            {
                // try to parse an arrangement
                var arrangement = ArrangementConverter.GetArrangement(Option as string, Converters);
                if (arrangement != null)
                {
                    Option = arrangement;
                }
            }

            if (Option is string)
            {
                // try to find a layout
                var layout = GetLayout(Option as string);
                if (layout != null)
                {
                    Option = layout;
                }
            }

            if (Option is ConverterInfo)
            {
                Option = new RawCallLayout((ConverterInfo)Option);
            }

            if (Option is PatternConverter)
            {
                Option = new RawCallLayout(Name, (PatternConverter)Option);
            }

            if (Option is IOptionHandler)
            {
                // this simplifies calls in ArrangementConverter a lot
                ((IOptionHandler)Option).ActivateOptions();
            }

            if (Option is ILayout)
            {
                var layout  = (ILayout)Option;
                var playout = Option as PatternLayout;

                if (playout != null && Converters != null)
                {
                    foreach (var conv in Converters)
                    {
                        playout.AddConverter(conv);
                    }
                }

                Option = new Layout2RawLayoutAdapter((ILayout)Option);
            }
            else if (Option is IMember)
            {
                var optionMember = (IMember)Option;

                if (String.IsNullOrEmpty(Name))
                {
                    Name = optionMember.Name;
                }

                Option = optionMember.Layout;
            }
            else if (Option is IArrangement)
            {
                var optionArrangemet = (IArrangement)Option;

                var l = new RawArrangedLayout();
                optionArrangemet.Arrange(l.Members, Converters);
                Option = l;
            }

            if (Option is IOptionHandler)
            {
                // do it again if object changed
                ((IOptionHandler)Option).ActivateOptions();
            }
        }