private ComboBox CreateList(Type valueType,
                                    IRefList refList,
                                    ViewProperties[] properties,
                                    IServiceProvider serviceProvider)
        {
            ComboBox combo = new ComboBox();

            combo.CausesValidation  = true;
            combo.Sorted            = false;
            combo.FormattingEnabled = true;
            combo.DropDownStyle     = ComboBoxStyle.DropDownList;

            FormatProperties formatProperties = properties.OfType <FormatProperties>().FirstOrDefault();
            string           format           = formatProperties.With(x => x.Format);
            IFormatProvider  formatProvider   = formatProperties.With(x => x.FormatProvider);
            ICustomFormatter customFormatter  = formatProperties.With(x => x.CustomFormatter);

            combo.Format += (sender, args) =>
            {
                if (!object.Equals(args.DesiredType, typeof(string)))
                {
                    Log <DefaultEditorFactory> .Error("Se intenta convertir a un valor diferente de String.");

                    args.Value = null;
                    return;
                }

                // Se formatea.
                try
                {
                    object item = args.ListItem;
                    if (item is IFormattable)
                    {
                        args.Value = ((IFormattable)item).ToString(format, formatProvider);
                    }
                    else if (customFormatter != null)
                    {
                        args.Value = customFormatter.Format(format, item, formatProvider);
                    }
                    else
                    {
                        args.Value = item.ToString();
                    }
                }
                catch (Exception e)
                {
                    Log <DefaultEditorFactory> .Error("Excepcion al formatear.", e);

                    args.Value = null;
                }
            };

            ControlExchange.Set(combo, TypeUtils.NewGeneric <ControlExchange>(typeof(ComboBoxExchange <>), valueType));
            return(combo);
        }
Example #2
0
 public static IRefList <T> ChainConcat <T>(this IRefList <T> left, IRefList <T> right)
 {
     if (ChainedListExtensions.IsFixedSize(left) || ChainedListExtensions.IsFixedSize(right))
     {
         return(new ChainedFixedSizeRefList <T>(left, right));
     }
     else
     {
         return(new ChainedRefList <T>(left, right));
     }
 }
        public object Create(Type valueType, ViewProperties[] properties, IServiceProvider serviceProvider)
        {
            IRefList refList = properties.OfType <RefListProperties>().Select(rlp => rlp.RefList).FirstOrDefault();

            if (refList != null)
            {
                return(this.CreateList(valueType, refList, properties, serviceProvider));
            }

            Factory factory = this.dictionary.GetSafe(valueType);

            if (factory == null)
            {
                return(null);
            }
            return(factory(valueType, properties, serviceProvider));
        }
Example #4
0
        public override void ContentChanged(ComboBox editControl, IFormModel formModel, string name, IServiceProvider serviceProvider)
        {
            IEnumerable <ViewProperties> viewProperties = formModel.GetViewProperties(name);
            IRefList refList = viewProperties.OfType <RefListProperties>().Select(rlp => rlp.RefList).FirstOrDefault();

            if (refList != null)
            {
                IEnumerable items;
                if (formModel is IRefFormObject)
                {
                    object formObject = ((IRefFormObject)formModel).FormObject;
                    items = refList.GetItems(serviceProvider, formObject);
                }
                else
                {
                    items = refList.GetItems(serviceProvider, null);
                }
                editControl.Items.Clear();
                editControl.Items.AddRange(items.Cast <object>().ToArray());
            }
        }
Example #5
0
        public void ChainConcat_ReadOnlyLists()
        {
            string[]                    leftArray           = new[] { "a", "b", "c" };
            List <string>               leftList            = new List <string>(leftArray);
            IBaseRefList <string>       leftBaseRefList     = leftArray.AsRefList();
            IRefList <string>           leftRefList         = leftArray.AsRefList();
            IRefReadOnlyList <string>   leftRefReadOnlyList = leftArray.AsRefReadOnlyList();
            ReadOnlyCollection <string> leftReadOnlyList    = leftArray.AsReadOnly();         // or leftList.AsReadOnly()

            string[]                    rightArray           = new[] { "c", "d" };
            List <string>               rightList            = new List <string>(rightArray);
            IBaseRefList <string>       rightBaseRefList     = rightArray.AsRefList();
            IRefList <string>           rightRefList         = rightArray.AsRefList();
            IRefReadOnlyList <string>   rightRefReadOnlyList = rightArray.AsRefReadOnlyList();
            ReadOnlyCollection <string> rightReadOnlyList    = rightArray.AsReadOnly();         // or rightList.AsReadOnly()

            // Note: Following is not only testing runtime behavior, but also that the static binding of the appropriate ChainConcat extension method is correct.
            CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightRefReadOnlyList, leftArray.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftArray, rightReadOnlyList, leftArray.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftList, rightRefReadOnlyList, leftList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftList, rightReadOnlyList, leftList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightRefReadOnlyList, leftBaseRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftBaseRefList, rightReadOnlyList, leftBaseRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightRefReadOnlyList, leftRefList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefList, rightReadOnlyList, leftRefList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightArray, leftRefReadOnlyList.ChainConcat(rightArray), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightList, leftRefReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightBaseRefList, leftRefReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefList, leftRefReadOnlyList.ChainConcat(rightRefList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightRefReadOnlyList, leftRefReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedRefReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftRefReadOnlyList, rightReadOnlyList, leftRefReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightArray, leftReadOnlyList.ChainConcat(rightArray), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightList, leftReadOnlyList.ChainConcat(rightList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightBaseRefList, leftReadOnlyList.ChainConcat(rightBaseRefList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefList, leftReadOnlyList.ChainConcat(rightRefList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightRefReadOnlyList, leftReadOnlyList.ChainConcat(rightRefReadOnlyList), typeof(ChainedReadOnlyList <string>));
            CommonFixedSizeOrReadOnlyChainListTests(leftReadOnlyList, rightReadOnlyList, leftReadOnlyList.ChainConcat(rightReadOnlyList), typeof(ChainedReadOnlyList <string>));
        }
Example #6
0
 public static IRefList <T> ChainPrepend <T>(this IRefList <T> list, params T[] itemsToPrepend) => itemsToPrepend.ChainConcat(list);
Example #7
0
 public static IRefList <T> ChainAppend <T>(this IRefList <T> list, params T[] itemsToAppend) => list.ChainConcat(itemsToAppend);
Example #8
0
 public static IRefList <T> ChainConcat <T>(this T[] left, IRefList <T> right) =>
 new ChainedFixedSizeRefList <T>(new ArrayRefList <T>(left), right);
Example #9
0
 public static IRefList <T> ChainConcat <T>(this IRefList <T> left, T[] right) =>
 new ChainedFixedSizeRefList <T>(left, new ArrayRefList <T>(right));