//---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Конструктор инициализирует объект класса указанными параметрами
 /// </summary>
 /// <param name="property_info">Метаданные свойства</param>
 /// <param name="property_desc">Описание свойства</param>
 /// <param name="property_type">Допустимый тип свойства</param>
 //---------------------------------------------------------------------------------------------------------
 public CPropertyModelBase(PropertyInfo property_info, CPropertyDesc property_desc, TPropertyType property_type)
 {
     mInfo         = property_info;
     mPropertyType = property_type;
     ApplyInfoFromDecs(property_desc);                       // Имеет преимущество
     ApplyInfoFromAttributes();
 }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Получение данных описание свойства с помощью внешнего описания свойства
            /// </summary>
            /// <param name="desc">Описание свойства</param>
            //---------------------------------------------------------------------------------------------------------
            protected void ApplyInfoFromDecs(CPropertyDesc desc)
            {
                if (desc != null)
                {
                    if (String.IsNullOrEmpty(desc.DisplayName) == false)
                    {
                        mDisplayName = desc.DisplayName;
                    }

                    if (String.IsNullOrEmpty(desc.Description) == false)
                    {
                        mDescription = desc.Description;
                    }

                    if (desc.PropertyOrder != -1)
                    {
                        mPropertyOrder = desc.PropertyOrder;
                    }

                    if (String.IsNullOrEmpty(desc.Category) == false)
                    {
                        mCategory = desc.Category;
                    }

                    if (desc.CategoryOrder != -1)
                    {
                        mCategoryOrder = desc.CategoryOrder;
                    }

                    if (desc.IsReadOnly)
                    {
                        mIsReadOnly = true;
                    }

                    if (desc.DefaultValue != null)
                    {
                        mDefaultValue = desc.DefaultValue;
                    }

                    if (desc.ListValues != null)
                    {
                        mListValues = desc.ListValues;
                    }
                }
            }
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Заполнить контекстное меню списком допустимых значений
 /// </summary>
 /// <param name="context_menu">Контекстное меню</param>
 //---------------------------------------------------------------------------------------------------------
 public virtual void AssingContenxMenuListValues(ContextMenu context_menu)
 {
     if (IsListValues)
     {
         IEnumerable enumerable = CPropertyDesc.GetValue(mListValues, mListValuesMemberName,
                                                         mListValuesMemberType, mInstance) as IEnumerable;
         if (context_menu != null && enumerable != null)
         {
             context_menu.Items.Clear();
             foreach (var item in enumerable)
             {
                 context_menu.Items.Add(new MenuItem()
                 {
                     Header = item, Tag = this
                 });
             }
         }
     }
 }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Проверка на значение что оно из списка значений
            /// </summary>
            //---------------------------------------------------------------------------------------------------------
            public override void CheckIsValueFromList()
            {
                mIsValueFromList = false;

                if (IsListValues)
                {
                    IEnumerable enumerable = CPropertyDesc.GetValue(mListValues, mListValuesMemberName,
                                                                    mListValuesMemberType, mInstance) as IEnumerable;
                    foreach (var item in enumerable)
                    {
                        if (item.Equals(Value))
                        {
                            mIsValueFromList = true;
                            break;
                        }
                    }
                }

                NotifyPropertyChanged(PropertyArgsIsValueFromList);
            }
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Конструктор инициализирует объект класса указанными параметрами
 /// </summary>
 /// <param name="property_info">Метаданные свойства</param>
 /// <param name="property_desc">Описание свойства</param>
 //---------------------------------------------------------------------------------------------------------
 public CPropertyModelEnum(PropertyInfo property_info, CPropertyDesc property_desc)
     : base(property_info, property_desc, TPropertyType.Enum)
 {
     mEnumValues = new ArrayList(Enum.GetValues(property_info.PropertyType));
     mEnumNames  = new List <String>(Enum.GetNames(property_info.PropertyType));
 }
Exemple #6
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Добавление модели свойства для числовых типов
            /// </summary>
            /// <param name="property_info">Метаданные свойства</param>
            /// <param name="property_desc">Описание свойства</param>
            //---------------------------------------------------------------------------------------------------------
            protected void AddModelPropertyNumeric(PropertyInfo property_info, CPropertyDesc property_desc)
            {
                switch (Type.GetTypeCode(property_info.PropertyType))
                {
                case TypeCode.Empty:
                    break;

                case TypeCode.Object:
                    break;

                case TypeCode.DBNull:
                    break;

                case TypeCode.Boolean:
                    break;

                case TypeCode.Char:
                    mProperties.Add(new PropertyModelRange <Char>(property_info, property_desc));
                    break;

                case TypeCode.SByte:
                    mProperties.Add(new PropertyModelRange <SByte>(property_info, property_desc));
                    break;

                case TypeCode.Byte:
                    mProperties.Add(new PropertyModelRange <Byte>(property_info, property_desc));
                    break;

                case TypeCode.Int16:
                    mProperties.Add(new PropertyModelRange <Int16>(property_info, property_desc));
                    break;

                case TypeCode.UInt16:
                    mProperties.Add(new PropertyModelRange <UInt16>(property_info, property_desc));
                    break;

                case TypeCode.Int32:
                    mProperties.Add(new PropertyModelRange <Int32>(property_info, property_desc));
                    break;

                case TypeCode.UInt32:
                    mProperties.Add(new PropertyModelRange <UInt32>(property_info, property_desc));
                    break;

                case TypeCode.Int64:
                    mProperties.Add(new PropertyModelRange <Int64>(property_info, property_desc));
                    break;

                case TypeCode.UInt64:
                    mProperties.Add(new PropertyModelRange <UInt64>(property_info, property_desc));
                    break;

                case TypeCode.Single:
                    mProperties.Add(new PropertyModelRange <Single>(property_info, property_desc));
                    break;

                case TypeCode.Double:
                    mProperties.Add(new PropertyModelRange <Double>(property_info, property_desc));
                    break;

                case TypeCode.Decimal:
                    mProperties.Add(new PropertyModelRange <Decimal>(property_info, property_desc));
                    break;

                case TypeCode.DateTime:
                    break;

                case TypeCode.String:
                    break;

                default:
                    break;
                }
            }
Exemple #7
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Добавление модели свойств
            /// </summary>
            //---------------------------------------------------------------------------------------------------------
            protected void AddModelProperties()
            {
                // Получаем список свойств
                PropertyInfo[] props = mSelectedObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).OrderBy(x => x.MetadataToken).ToArray();
                for (Int32 i = 0; i < props.Length; i++)
                {
                    PropertyInfo property_info = props[i];
                    Type         type          = property_info.PropertyType;

                    // Проверка на видимость свойства
                    BrowsableAttribute browsable_attribute = property_info.GetAttribute <BrowsableAttribute>();
                    if (browsable_attribute != null && browsable_attribute.Browsable == false)
                    {
                        continue;
                    }

                    // Получаем описание свойства
                    CPropertyDesc property_desc = GetPropertyDesc(property_info);

                    //  Проверка на видимость
                    if (property_desc != null && property_desc.IsHideInspector)
                    {
                        continue;
                    }

                    // Логическое свойство
                    if (type.Name == nameof(Boolean))
                    {
                        mProperties.Add(new PropertyModel <Boolean>(property_info, property_desc, TPropertyType.Boolean));
                        continue;
                    }

                    // Перечисление
                    if (type.IsEnum)
                    {
                        mProperties.Add(new CPropertyModelEnum(property_info, property_desc));
                        continue;
                    }

                    // Числовое свойство
                    if (type.IsNumericType())
                    {
                        AddModelPropertyNumeric(property_info, property_desc);
                        continue;
                    }

                    if (type.Name == nameof(TMeasurementValue))
                    {
                        mProperties.Add(new PropertyModelMeasurementValue(property_info, property_desc));
                        continue;
                    }

                    if (type.Name == nameof(DateTime))
                    {
                        mProperties.Add(new PropertyModel <DateTime>(property_info, property_desc, TPropertyType.DateTime));
                        continue;
                    }

                    if (type.Name == nameof(String))
                    {
                        mProperties.Add(new PropertyModel <String>(property_info, property_desc, TPropertyType.String));
                        continue;
                    }
                }
            }
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Конструктор инициализирует объект класса указанными параметрами
 /// </summary>
 /// <param name="property_info">Метаданные свойства</param>
 /// <param name="property_desc">Описание свойства</param>
 /// <param name="property_type">Допустимый тип свойства</param>
 //---------------------------------------------------------------------------------------------------------
 public PropertyModel(PropertyInfo property_info, CPropertyDesc property_desc, TPropertyType property_type)
     : base(property_info, property_desc, property_type)
 {
 }
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Конструктор инициализирует объект класса указанными параметрами
 /// </summary>
 /// <param name="property_info">Метаданные свойства</param>
 /// <param name="property_desc">Описание свойства</param>
 //---------------------------------------------------------------------------------------------------------
 public PropertyModelMeasurementValue(PropertyInfo property_info, CPropertyDesc property_desc)
     : base(property_info, property_desc, TPropertyType.Measurement)
 {
     GetInfoFromAttributesRange();
 }
Exemple #10
0
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Конструктор инициализирует объект класса указанными параметрами
 /// </summary>
 /// <param name="property_info">Метаданные свойства</param>
 /// <param name="property_desc">Описание свойства</param>
 //---------------------------------------------------------------------------------------------------------
 public PropertyModelRange(PropertyInfo property_info, CPropertyDesc property_desc)
     : base(property_info, property_desc, TPropertyType.Numeric)
 {
     GetInfoFromAttributesRange();
 }