public static SchemaMemberSelection CreateSelectionTree(object SourceObject, MemberAccesor SourceAccesor = null, IEnumerable <object> PreExclusion = null, Func <object, Tuple <bool, // is-selectable bool, // is-selected bool, // can-show-is-selected IRecognizableElement> // action-info > MemberMergeSelectionDeterminer = null, Func <object, MemberAccesor, bool> ChildrenFilter = null, // Determines whether a child should be included for selection (e.g. "obj is Concept || obj.CompositeIdeas.Count >0") SchemaMemberSelection DirectParent = null) { if (SourceAccesor == null) { SourceAccesor = GetAccesor(SourceObject); } if (SourceAccesor == null) { return(null); } var Selection = (MemberMergeSelectionDeterminer == null ? Tuple.Create(false, false, false, (IRecognizableElement)null) : MemberMergeSelectionDeterminer(SourceObject)); var Result = new SchemaMemberSelection(SourceObject, SourceAccesor) { RefMember = SourceObject, IsSelectable = Selection.Item1, IsSelected = (Selection.Item2 && (PreExclusion == null || !PreExclusion.Contains(SourceObject))), CanShowIsSelected = Selection.Item3, ActionInfo = Selection.Item4, Parent = DirectParent }; var SourceChildren = Result.MemberChildren; if (!SourceChildren.IsEmpty()) { Result.Children = new List <SchemaMemberSelection>(); foreach (var Child in SourceChildren) { var ChildAccesor = GetAccesor(Child); if (ChildrenFilter == null || (ChildAccesor != null && ChildrenFilter(Child, ChildAccesor))) { var SelItem = CreateSelectionTree(Child, ChildAccesor, PreExclusion, MemberMergeSelectionDeterminer, ChildrenFilter, Result); if (SelItem != null) { Result.Children.Add(SelItem); } } } } return(Result); }
public static void RegisterMemberTypeOperationsSet <TMember>(Func <TMember, IEnumerable <object> > ChildrenGetterOp, Func <TMember, string> NameCaptionGetterOp, Func <TMember, string> SummaryGetterOp = null, Func <TMember, ImageSource> PictogramGetterOp = null, Func <TMember, string> DescriptiveCaptionGetterOp = null, Func <TMember, ImageSource> DefinitorPictogramGetterOp = null) where TMember : class { General.ContractRequiresNotNull(ChildrenGetterOp, NameCaptionGetterOp); var Accesor = new MemberAccesor { ChildrenGetter = (obj => ChildrenGetterOp((TMember)obj)), NameCaptionGetter = (obj => NameCaptionGetterOp((TMember)obj)), SummaryGetter = (obj => SummaryGetterOp.NullDefault(ob => null)((TMember)obj)), PictogramGetter = (obj => PictogramGetterOp.NullDefault(ob => null)((TMember)obj)), DescriptiveCaptionGetter = (obj => DescriptiveCaptionGetterOp.NullDefault(ob => null)((TMember)obj)), DefinitorPictogramGetter = (obj => DefinitorPictogramGetterOp.NullDefault(ob => null)((TMember)obj)) }; RegisteredMemberTypeOperationsSets.AddOrReplace(typeof(TMember), Accesor); }
// --------------------------------------------------------------------------------------------------------------------------------------------------------- public SchemaMemberSelection(object RefMember, MemberAccesor Accesor) { this.RefMember = RefMember; this.Accesor = Accesor; }