public static ObjectProperty GetCustProps(Object obj, PropertyInfo prop)
        {
            ObjectProperty objprop = new ObjectProperty {
                Name                     = prop.Name,
                DefValue                 = obj.GetType().GetProperty(prop.Name).GetValue(obj, null),
                PropertyType             = prop.PropertyType,
                CanRead                  = prop.CanRead,
                CanWrite                 = prop.CanWrite,
                Props                    = prop,
                CompanionSourceFieldName = String.Empty,
                FieldMode                = (prop.PropertyType == typeof(bool)) ?
                                           WidgetAttribute.FieldMode.CheckBox : WidgetAttribute.FieldMode.TextBox
            };

            try {
                foreach (Attribute attr in objprop.Props.GetCustomAttributes(true))
                {
                    if (attr is WidgetAttribute)
                    {
                        var widgetAttrib = attr as WidgetAttribute;
                        if (null != widgetAttrib)
                        {
                            try { objprop.CompanionSourceFieldName = widgetAttrib.SelectFieldSource; } catch { objprop.CompanionSourceFieldName = ""; }
                            try { objprop.FieldMode = widgetAttrib.Mode; } catch { objprop.FieldMode = WidgetAttribute.FieldMode.Unknown; }
                        }
                    }
                }
            } catch (Exception ex) { }

            objprop.FieldDescription = ReflectionUtilities.GetDescriptionAttribute(obj.GetType(), objprop.Name);

            return(objprop);
        }
		public static ObjectProperty GetCustProps(Object obj, PropertyInfo prop) {
			ObjectProperty objprop = new ObjectProperty {
				Name = prop.Name,
				DefValue = obj.GetType().GetProperty(prop.Name).GetValue(obj, null),
				PropertyType = prop.PropertyType,
				CanRead = prop.CanRead,
				CanWrite = prop.CanWrite,
				Props = prop,
				CompanionSourceFieldName = String.Empty,
				FieldMode = (prop.PropertyType == typeof(bool)) ?
						WidgetAttribute.FieldMode.CheckBox : WidgetAttribute.FieldMode.TextBox
			};
			try {
				foreach (Attribute attr in objprop.Props.GetCustomAttributes(true)) {
					if (attr is WidgetAttribute) {
						var widgetAttrib = attr as WidgetAttribute;
						if (null != widgetAttrib) {
							try { objprop.CompanionSourceFieldName = widgetAttrib.SelectFieldSource; } catch { objprop.CompanionSourceFieldName = ""; }
							try { objprop.FieldMode = widgetAttrib.Mode; } catch { objprop.FieldMode = WidgetAttribute.FieldMode.Unknown; }
						}
					}
				}
			} catch (Exception ex) { }

			objprop.FieldDescription = ReflectionUtilities.GetDescriptionAttribute(obj.GetType(), objprop.Name);

			return objprop;
		}
 public override bool Equals(Object obj)
 {
     //Check for null and compare run-time types.
     if (obj == null || this.GetType() != obj.GetType())
     {
         return(false);
     }
     if (obj is ObjectProperty)
     {
         ObjectProperty p = (ObjectProperty)obj;
         return((this.Name == p.Name) && (this.PropertyType == p.PropertyType));
     }
     else
     {
         return(false);
     }
 }
        public static ObjectProperty GetCustProps(Object obj, PropertyInfo prop)
        {
            ObjectProperty objprop = new ObjectProperty(obj, prop);

            try {
                foreach (Attribute attr in objprop.Props.GetCustomAttributes(true))
                {
                    if (attr is WidgetAttribute)
                    {
                        var widgetAttrib = attr as WidgetAttribute;
                        if (null != widgetAttrib)
                        {
                            try { objprop.CompanionSourceFieldName = widgetAttrib.SelectFieldSource; } catch { objprop.CompanionSourceFieldName = ""; }
                            try { objprop.FieldMode = widgetAttrib.Mode; } catch { objprop.FieldMode = WidgetAttribute.FieldMode.Unknown; }
                        }
                    }
                }
            } catch (Exception ex) { }

            objprop.FieldDescription = ReflectionUtilities.GetDescriptionAttribute(obj.GetType(), objprop.Name);

            return(objprop);
        }
		protected void rpProps_Bind(object sender, RepeaterItemEventArgs e) {
			if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) {
				HiddenField hdnName = (HiddenField)e.Item.FindControl("hdnName");
				TextBox txtValue = (TextBox)e.Item.FindControl("txtValue");
				DropDownList ddlValue = (DropDownList)e.Item.FindControl("ddlValue");
				CheckBox chkValue = (CheckBox)e.Item.FindControl("chkValue");
				CheckBoxList chkValues = (CheckBoxList)e.Item.FindControl("chkValues");

				txtValue.Visible = true;
				string sName = hdnName.Value;

				ObjectProperty ListSourceProperty = new ObjectProperty();

				string sListSourcePropertyName = (from p in lstDefProps
												  where p.Name.ToLower() == sName.ToLower()
														&& !String.IsNullOrEmpty(p.CompanionSourceFieldName)
												  select p.CompanionSourceFieldName).FirstOrDefault();

				if (String.IsNullOrEmpty(sListSourcePropertyName)) {
					sListSourcePropertyName = String.Empty;
				}

				ListSourceProperty = (from p in lstDefProps
									  where p.CanRead == true
									  && p.CanWrite == false
									  && p.Name.ToLower() == sListSourcePropertyName.ToLower()
									  select p).FirstOrDefault();

				var dp = (from p in lstDefProps
						  where p.Name.ToLower() == sName.ToLower()
						  select p).FirstOrDefault();

				if (ListSourceProperty != null) {
					if (ListSourceProperty.DefValue is Dictionary<string, string>) {
						txtValue.Visible = false;

						//work with a drop down list, only allow one item in the drop down.
						if (dp.FieldMode == WidgetAttribute.FieldMode.DropDownList) {
							ddlValue.Visible = true;

							ddlValue.DataTextField = "Value";
							ddlValue.DataValueField = "Key";

							GeneralUtilities.BindListDefaultText(ddlValue, ListSourceProperty.DefValue, null, "Select Value", "");

							if (!String.IsNullOrEmpty(txtValue.Text)) {
								try {
									GeneralUtilities.SelectListValue(ddlValue, txtValue.Text);
								} catch { }
							}
						}

						// work with a checkbox list, allow more than one value
						if (dp.FieldMode == WidgetAttribute.FieldMode.CheckBoxList) {
							chkValues.Visible = true;

							chkValues.DataTextField = "Value";
							chkValues.DataValueField = "Key";

							GeneralUtilities.BindList(chkValues, ListSourceProperty.DefValue);

							// since this is a multi selected capable field, look for anything that starts with the
							// field name and has the delimeter trailing
							var pp = (from p in lstProps
									  where p.KeyName.ToLower().StartsWith(sName.ToLower() + "|")
									  select p).ToList();

							if (pp.Any()) {
								foreach (ListItem v in chkValues.Items) {
									v.Selected = (from p in pp
												  where p.KeyValue == v.Value
												  select p.KeyValue).Count() < 1 ? false : true;
								}
							}
						}
					}
				}

				if (dp.FieldMode == WidgetAttribute.FieldMode.RichHTMLTextBox
						|| dp.FieldMode == WidgetAttribute.FieldMode.MultiLineTextBox) {
					txtValue.Visible = true;
					txtValue.TextMode = TextBoxMode.MultiLine;
					txtValue.Columns = 60;
					txtValue.Rows = 5;
					if (dp.FieldMode == WidgetAttribute.FieldMode.RichHTMLTextBox) {
						txtValue.CssClass = "mceEditor";
					}
				}

				if (dp.PropertyType == typeof(bool) || dp.FieldMode == WidgetAttribute.FieldMode.CheckBox) {
					txtValue.Visible = false;
					chkValue.Visible = true;

					chkValue.Checked = Convert.ToBoolean(txtValue.Text);
				}
			}
		}
        //============================
        public static List<ObjectProperty> GetWidgetProperties(Widget w, Guid guidContentID)
        {
            Object widget = new Object();

            List<WidgetProps> lstProps = w.ParseDefaultControlProperties();

            if (w.ControlPath.Contains(":")) {
                if (w.ControlPath.ToUpper().StartsWith("CLASS:")) {
                    try {
                        string className = w.ControlPath.Replace("CLASS:", "");
                        Type t = Type.GetType(className);
                        widget = Activator.CreateInstance(t);
                    } catch (Exception ex) { }
                } else {
                    try {
                        string[] path = w.ControlPath.Split(':');
                        string objectPrefix = path[0];
                        string objectClass = path[1];

                        Type t = Type.GetType(objectClass);
                        Object obj = Activator.CreateInstance(t);

                        Object attrib = ReflectionUtilities.GetAttribute<WidgetActionSettingModelAttribute>(t, objectPrefix);

                        if (attrib != null) {
                            Type s = Type.GetType(((WidgetActionSettingModelAttribute)attrib).ClassName);
                            widget = Activator.CreateInstance(s);
                        }
                    } catch (Exception ex) { }
                }
            }

            if (widget is IAdminModule) {
                var w1 = (IAdminModule)widget;
                w1.SiteID = SiteData.CurrentSiteID;
            }

            if (widget is IWidget) {
                var w1 = (IWidget)widget;
                w1.SiteID = SiteData.CurrentSiteID;
                w1.RootContentID = w.Root_ContentID;
                w1.PageWidgetID = w.Root_WidgetID;
                w1.IsDynamicInserted = true;
            }

            if (widget is IWidgetRawData) {
                var w1 = (IWidgetRawData)widget;
                w1.RawWidgetData = w.ControlProperties;
            }

            List<ObjectProperty> lstDefProps = ObjectProperty.GetObjectProperties(widget);

            //require that widget be attributed to be on the list
            List<string> limitedPropertyList = (from ww in widget.GetType().GetProperties()
                                                where Attribute.IsDefined(ww, typeof(WidgetAttribute))
                                                select ww.Name.ToLower()).ToList();

            List<ObjectProperty> lstPropsToEdit = (from p in lstDefProps
                                                   join l in limitedPropertyList on p.Name.ToLower() equals l.ToLower()
                                                   where p.CanRead == true
                                                       && p.CanWrite == true
                                                   select p).ToList();

            foreach (var dp in lstPropsToEdit) {
                string sName = dp.Name.ToLower();
                List<WidgetProps> lstItmVals = lstProps.Where(x => x.KeyName.ToLower().StartsWith(sName + "|") || x.KeyName.ToLower() == sName).ToList();

                ObjectProperty ListSourceProperty = new ObjectProperty();

                string sListSourcePropertyName = (from p in lstDefProps
                                                  where p.Name.ToLower() == sName.ToLower()
                                                        && !String.IsNullOrEmpty(p.CompanionSourceFieldName)
                                                  select p.CompanionSourceFieldName).FirstOrDefault();

                if (String.IsNullOrEmpty(sListSourcePropertyName)) {
                    sListSourcePropertyName = String.Empty;
                }

                ListSourceProperty = (from p in lstDefProps
                                      where p.CanRead == true
                                         && p.CanWrite == false
                                         && p.Name.ToLower() == sListSourcePropertyName.ToLower()
                                      select p).FirstOrDefault();

                if (lstItmVals != null && lstItmVals.Any() && dp.FieldMode != WidgetAttribute.FieldMode.CheckBoxList) {
                    dp.TextValue = lstItmVals != null ? lstItmVals.FirstOrDefault().KeyValue : String.Empty;
                    dp.DefValue = dp.TextValue;
                }

                Type pt = dp.PropertyType;

                if (ListSourceProperty != null) {
                    if (ListSourceProperty.DefValue is Dictionary<string, string>) {
                        dp.Options = OptionSelections.GetOptionsFromDictionary((Dictionary<string, string>)ListSourceProperty.DefValue);

                        // work with a checkbox list, allow more than one value
                        if (dp.FieldMode == WidgetAttribute.FieldMode.CheckBoxList) {
                            // since this is a multi selected capable field, look for anything that starts with the
                            // field name and has the delimeter trailing

                            if (lstItmVals.Count > 0) {
                                foreach (var v in dp.Options) {
                                    v.Selected = (from p in lstItmVals
                                                  where p.KeyValue == v.Value
                                                  select p.KeyValue).Any();
                                }
                            }
                        }
                    }
                }

                if ((pt == typeof(bool)) || dp.FieldMode == WidgetAttribute.FieldMode.CheckBox) {
                    dp.FieldMode = WidgetAttribute.FieldMode.CheckBox;
                    dp.CheckBoxState = Convert.ToBoolean(dp.DefValue);
                }
            }

            return lstPropsToEdit;
        }
        //============================

        public static List <ObjectProperty> GetWidgetProperties(Widget w, Guid guidContentID)
        {
            Object widget = new Object();

            List <WidgetProps> lstProps = w.ParseDefaultControlProperties();

            if (w.ControlPath.Contains(":"))
            {
                if (w.ControlPath.ToUpperInvariant().StartsWith("CLASS:"))
                {
                    try {
                        string className = w.ControlPath.Replace("CLASS:", "");
                        Type   t         = ReflectionUtilities.GetTypeFromString(className);
                        widget = Activator.CreateInstance(t);
                    } catch (Exception ex) { }
                }
                else
                {
                    try {
                        string[] path         = w.ControlPath.Split(':');
                        string   objectPrefix = path[0];
                        string   objectClass  = path[1];

                        Type t = ReflectionUtilities.GetTypeFromString(objectClass);

                        Object obj    = Activator.CreateInstance(t);
                        Object attrib = ReflectionUtilities.GetAttribute <WidgetActionSettingModelAttribute>(t, objectPrefix);

                        if (attrib != null && attrib is WidgetActionSettingModelAttribute)
                        {
                            string attrClass = (attrib as WidgetActionSettingModelAttribute).ClassName;
                            Type   s         = ReflectionUtilities.GetTypeFromString(attrClass);

                            widget = Activator.CreateInstance(s);
                        }
                    } catch (Exception ex) { }
                }
            }
            else
            {
                if (w.ControlPath.Contains("|"))
                {
                    try {
                        string[] path       = w.ControlPath.Split('|');
                        string   viewPath   = path[0];
                        string   modelClass = String.Empty;
                        if (path.Length > 1)
                        {
                            modelClass = path[1];
                            Type objType = ReflectionUtilities.GetTypeFromString(modelClass);

                            widget = Activator.CreateInstance(objType);
                        }
                    } catch (Exception ex) { }
                }
            }

            if (widget is IAdminModule)
            {
                var w1 = (IAdminModule)widget;
                w1.SiteID = SiteData.CurrentSiteID;
            }

            if (widget is IWidget)
            {
                var w1 = (IWidget)widget;
                w1.SiteID            = SiteData.CurrentSiteID;
                w1.RootContentID     = w.Root_ContentID;
                w1.PageWidgetID      = w.Root_WidgetID;
                w1.IsDynamicInserted = true;
            }

            if (widget is IWidgetRawData)
            {
                var w1 = (IWidgetRawData)widget;
                w1.RawWidgetData = w.ControlProperties;
            }

            List <ObjectProperty> lstDefProps = ObjectProperty.GetObjectProperties(widget);

            //require that widget be attributed to be on the list
            List <string> limitedPropertyList = (from ww in widget.GetType().GetProperties()
                                                 where Attribute.IsDefined(ww, typeof(WidgetAttribute))
                                                 select ww.Name.ToLowerInvariant()).ToList();

            List <ObjectProperty> lstPropsToEdit = (from p in lstDefProps
                                                    join l in limitedPropertyList on p.Name.ToLowerInvariant() equals l.ToLowerInvariant()
                                                    where p.CanRead == true &&
                                                    p.CanWrite == true
                                                    select p).ToList();

            foreach (var dp in lstPropsToEdit)
            {
                string             sName      = dp.Name.ToLowerInvariant();
                List <WidgetProps> lstItmVals = lstProps.Where(x => x.KeyName.ToLowerInvariant().StartsWith(sName + "|") || x.KeyName.ToLowerInvariant() == sName).ToList();

                ObjectProperty sourceProperty = new ObjectProperty();

                string sListSourcePropertyName = (from p in lstDefProps
                                                  where p.Name.ToLowerInvariant() == sName.ToLowerInvariant() &&
                                                  !String.IsNullOrEmpty(p.CompanionSourceFieldName)
                                                  select p.CompanionSourceFieldName).FirstOrDefault();

                if (String.IsNullOrEmpty(sListSourcePropertyName))
                {
                    sListSourcePropertyName = String.Empty;
                }

                sourceProperty = (from p in lstDefProps
                                  where p.CanRead == true &&
                                  p.CanWrite == false &&
                                  p.Name.ToLowerInvariant() == sListSourcePropertyName.ToLowerInvariant()
                                  select p).FirstOrDefault();

                if (dp.FieldMode != WidgetAttribute.FieldMode.CheckBoxList)
                {
                    string sDefTxt = String.Empty;

                    if (lstItmVals != null && lstItmVals.Any())
                    {
                        dp.TextValue = lstItmVals != null?lstItmVals.FirstOrDefault().KeyValue : String.Empty;

                        dp.DefValue = dp.TextValue;
                    }
                    else
                    {
                        if (dp.DefValue != null)
                        {
                            sDefTxt = dp.DefValue.ToString();

                            if (dp.PropertyType == typeof(Boolean))
                            {
                                bool vB = Convert.ToBoolean(dp.DefValue.ToString());
                                sDefTxt = vB.ToString();
                            }
                            if (dp.PropertyType == typeof(System.Drawing.Color))
                            {
                                System.Drawing.Color vC = (System.Drawing.Color)dp.DefValue;
                                sDefTxt = System.Drawing.ColorTranslator.ToHtml(vC);
                            }
                        }

                        dp.TextValue = sDefTxt;
                    }
                }

                Type pt = dp.PropertyType;

                if (sourceProperty != null)
                {
                    if (sourceProperty.DefValue is Dictionary <string, string> )
                    {
                        dp.Options = OptionSelections.GetOptionsFromDictionary((Dictionary <string, string>)sourceProperty.DefValue);

                        // work with a checkbox list, allow more than one value
                        if (dp.FieldMode == WidgetAttribute.FieldMode.CheckBoxList)
                        {
                            // since this is a multi selected capable field, look for anything that starts with the
                            // field name and has the delimiter trailing

                            if (lstItmVals.Any() && dp.Options.Any())
                            {
                                foreach (var v in dp.Options)
                                {
                                    v.Selected = (from p in lstItmVals
                                                  where p.KeyValue == v.Key
                                                  select p.KeyValue).Any();
                                }
                            }
                        }
                    }
                }

                if (dp.FieldMode == WidgetAttribute.FieldMode.Unknown)
                {
                    if (pt == typeof(String) || pt == typeof(DateTime) ||
                        pt == typeof(Int16) || pt == typeof(Int32) || pt == typeof(Int64) ||
                        pt == typeof(float) || pt == typeof(Decimal) ||
                        pt == typeof(Guid) || pt == typeof(System.Drawing.Color))
                    {
                        dp.FieldMode = WidgetAttribute.FieldMode.TextBox;
                    }
                }

                if ((pt == typeof(Boolean)) || dp.FieldMode == WidgetAttribute.FieldMode.CheckBox)
                {
                    dp.FieldMode     = WidgetAttribute.FieldMode.CheckBox;
                    dp.CheckBoxState = Convert.ToBoolean(dp.TextValue);
                }
            }

            return(lstPropsToEdit);
        }
        public static ObjectProperty GetCustProps(Object obj, PropertyInfo prop)
        {
            ObjectProperty objprop = new ObjectProperty(obj, prop);

            try {
                foreach (Attribute attr in objprop.Props.GetCustomAttributes(true)) {
                    if (attr is WidgetAttribute) {
                        var widgetAttrib = attr as WidgetAttribute;
                        if (null != widgetAttrib) {
                            try { objprop.CompanionSourceFieldName = widgetAttrib.SelectFieldSource; } catch { objprop.CompanionSourceFieldName = ""; }
                            try { objprop.FieldMode = widgetAttrib.Mode; } catch { objprop.FieldMode = WidgetAttribute.FieldMode.Unknown; }
                        }
                    }
                }
            } catch (Exception ex) { }

            objprop.FieldDescription = ReflectionUtilities.GetDescriptionAttribute(obj.GetType(), objprop.Name);

            return objprop;
        }