public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (_editorService != null) { if (context.Instance != null) { // CR modifying to accomodate PropertyBag Type instanceType = null; object objinfo = null; ContextHelper.GetAuthorizationTypeContextInstanceObject(context, ref objinfo, ref instanceType); var obj = (AuthorizationRule)objinfo; _instance = objinfo.GetType(); _lstProperties.Items.Clear(); _lstProperties.Items.Add("(None)"); _sizeSortedNamespaces = new List <string>(); var currentCslaObject = (CslaObjectInfo)GeneratorController.Current.GetSelectedItem(); _sizeSortedNamespaces = currentCslaObject.Namespaces.ToList(); _sizeSortedNamespaces.Add(currentCslaObject.ObjectNamespace); _sizeSortedNamespaces = BusinessRuleTypeEditor.GetSizeSorted(_sizeSortedNamespaces); // Get Assembly File Path var assemblyFileInfo = _instance.GetProperty("AssemblyFile"); var assemblyFilePath = (string)assemblyFileInfo.GetValue(objinfo, null); // If Assembly path is available, use assembly to load a drop down with available types. if (!string.IsNullOrEmpty(assemblyFilePath)) { var assembly = Assembly.LoadFrom(assemblyFilePath); var alltypes = assembly.GetExportedTypes(); if (alltypes.Length > 0) { _baseTypes = new List <BaseProperty>(); } foreach (var type in alltypes) { // check here for Csla.Rules.IAuthorizationRule inheritance if (type.GetInterface("Csla.Rules.IAuthorizationRule") != null) { // exclude abstract classes and exclude Property level rules for Objects and vv. if (!type.IsAbstract && CTorMatchesRuleLevel(obj, type)) { var listableType = type.ToString(); if (type.IsGenericType) { listableType = listableType.Substring(0, listableType.LastIndexOf('`')); foreach (var argument in type.GetGenericArguments()) { listableType += "<" + argument.Name + ">"; } } listableType = listableType.Replace("><", ","); listableType = BusinessRuleTypeEditor.StripKnownNamespaces(_sizeSortedNamespaces, listableType); _lstProperties.Items.Add(listableType); _baseTypes.Add(new BaseProperty(type, type.BaseType, listableType)); } } } _lstProperties.Sorted = true; } var entry = BusinessRuleTypeEditor.StripKnownNamespaces(_sizeSortedNamespaces, obj.Type); if (_lstProperties.Items.Contains(entry)) { _lstProperties.SelectedItem = entry; } else { _lstProperties.SelectedItem = "(None)"; } _editorService.DropDownControl(_lstProperties); if (_lstProperties.SelectedIndex < 0 || _lstProperties.SelectedItem.ToString() == "(None)") { FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(string.Empty); } FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(_lstProperties.SelectedItem.ToString()); } } return(value); }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (_editorService != null) { if (context.Instance != null) { // CR modifying to accomodate PropertyBag Type instanceType = null; object objinfo = null; ContextHelper.GetTypeInfoContextInstanceObject(context, ref objinfo, ref instanceType); var obj = (TypeInfo)objinfo; _instance = objinfo.GetType(); _lstProperties.Items.Clear(); _lstProperties.Items.Add("(None)"); _sizeSortedNamespaces = new List <string>(); var currentCslaObject = GeneratorController.Current.CurrentCslaObject; _sizeSortedNamespaces = currentCslaObject.Namespaces.ToList(); _sizeSortedNamespaces.Add(currentCslaObject.ObjectNamespace); _sizeSortedNamespaces = BusinessRuleTypeEditor.GetSizeSorted(_sizeSortedNamespaces); var alltypes = GeneratorController.Current.CurrentUnit.CslaObjects; if (alltypes.Count > 0) { _baseTypes = new List <BaseProperty>(); } var isCustomCriteria = !(obj.IsInheritedType || obj.IsInheritedTypeWinForms); var currentBaseClass = currentCslaObject.GetCslaBaseClassName(); foreach (var type in alltypes) { var addToList = false; if (isCustomCriteria) { addToList = type.IsCriteriaClass(); } else { if (!GeneratorController.Current.CurrentUnit.Params.EnforceGenericInheritance) { var isMatch = currentCslaObject.IsObjectType() == type.IsObjectType() && currentCslaObject.IsCollectionType() == type.IsCollectionType(); var isSameBaseClass = isMatch && currentBaseClass == type.GetCslaBaseClassName(); var isInheritedNonGeneric = type.IsBaseClass() && !type.IsGenericType; addToList = isSameBaseClass || isInheritedNonGeneric; } var isInheritedMatchingGeneric = type.IsBaseClass() && type.IsGenericType && type.GetGenericArguments().Length == currentCslaObject.NumberOfGenericArguments(); var isNotSameObject = !ReferenceEquals(currentCslaObject, type); addToList = (addToList || isInheritedMatchingGeneric) && isNotSameObject; } if (addToList) { var listableType = type.GenericName; if (!string.IsNullOrEmpty(listableType)) { listableType = BusinessRuleTypeEditor.StripKnownNamespaces( _sizeSortedNamespaces, listableType); _lstProperties.Items.Add(listableType); _baseTypes.Add(new BaseProperty(type, listableType)); } } } _lstProperties.Sorted = true; if (_lstProperties.Items.Contains(obj.ObjectName)) { _lstProperties.SelectedItem = obj.ObjectName; } else { _lstProperties.SelectedItem = "(None)"; } _editorService.DropDownControl(_lstProperties); if (_lstProperties.SelectedIndex < 0 || _lstProperties.SelectedItem.ToString() == "(None)") { FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(string.Empty); } FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(_lstProperties.SelectedItem.ToString()); } } return(value); }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (_editorService != null) { if (context.Instance != null) { // CR modifying to accomodate PropertyBag Type instanceType = null; object objinfo = null; ContextHelper.GetTypeInfoContextInstanceObject(context, ref objinfo, ref instanceType); var obj = (TypeInfo)objinfo; _instance = objinfo.GetType(); _lstProperties.Items.Clear(); _lstProperties.Items.Add("(None)"); var currentCslaObject = GeneratorController.Current.CurrentCslaObject; _sizeSortedNamespaces = currentCslaObject.Namespaces.ToList(); _sizeSortedNamespaces.Add(currentCslaObject.ObjectNamespace); _sizeSortedNamespaces.Add("Csla"); _sizeSortedNamespaces = BusinessRuleTypeEditor.GetSizeSorted(_sizeSortedNamespaces); // Get Assembly File Path var assemblyFileInfo = _instance.GetProperty("AssemblyFile"); var assemblyFilePath = (string)assemblyFileInfo.GetValue(objinfo, null); // If Assembly path is available, use assembly to load a drop down with available types. if (!string.IsNullOrEmpty(assemblyFilePath)) { var assembly = Assembly.LoadFrom(assemblyFilePath); var alltypes = assembly.GetExportedTypes(); if (alltypes.Length > 0) { _baseTypes = new List <BaseProperty>(); } var isCustomCriteria = !(obj.IsInheritedType || obj.IsInheritedTypeWinForms); var numberOfGenericArguments = 1; if (!isCustomCriteria) { numberOfGenericArguments = currentCslaObject.NumberOfGenericArguments(); } foreach (var type in alltypes) { if (type.GetInterface("Csla.Core.IBusinessObject") != null || type.GetInterface("Csla.Core.IObservableBindingList") != null || type.GetInterface("Csla.Core.IExtendedBindingList") != null) { // exclude interface classes if (!type.IsInterface) { var listableType = string.Empty; if (!GeneratorController.Current.CurrentUnit.Params.EnforceGenericInheritance && !isCustomCriteria) { listableType = type.ToString(); } if (type.IsGenericType) { if (type.GetGenericArguments().Length == numberOfGenericArguments) { listableType = type.ToString(); listableType = listableType.Substring(0, listableType.LastIndexOf('`')); foreach (var argument in type.GetGenericArguments()) { listableType += "<" + argument.Name + ">"; } listableType = listableType.Replace("><", ","); } else { listableType = string.Empty; } } if (!string.IsNullOrEmpty(listableType)) { listableType = BusinessRuleTypeEditor.StripKnownNamespaces( _sizeSortedNamespaces, listableType); _lstProperties.Items.Add(listableType); _baseTypes.Add(new BaseProperty(type, listableType)); } } } } _lstProperties.Sorted = true; } var entry = BusinessRuleTypeEditor.StripKnownNamespaces(_sizeSortedNamespaces, obj.Type); if (_lstProperties.Items.Contains(entry)) { _lstProperties.SelectedItem = entry; } else { _lstProperties.SelectedItem = "(None)"; } _editorService.DropDownControl(_lstProperties); if (_lstProperties.SelectedIndex < 0 || _lstProperties.SelectedItem.ToString() == "(None)") { FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(string.Empty); } FillPropertyGrid(obj, _lstProperties.SelectedItem.ToString()); return(_lstProperties.SelectedItem.ToString()); } } return(value); }