internal static TItem GetItem <TItem>(Visual parent, string[] headerTexts, ShowNextItem <TItem> showNextItem) where TItem : Visual { GetItemDelegate <TItem, string> getItem = (visual, headerText) => { IsMatch <TItem> isMatch = (item) => (GetItemText(item) == headerText); Next <TItem> next = null; next = (v) => GetItemCore(v, isMatch, next); return(GetItemCore(visual, isMatch, next)); }; return(GetItem <TItem, string>(parent, headerTexts, getItem, showNextItem)); }
internal static TItem GetItem <TItem>(Visual parent, int[] indices, ShowNextItem <TItem> showNextItem) where TItem : Visual { GetItemDelegate <TItem, int> getItem = (visual, index) => { int currentIndex = 0; IsMatch <TItem> isMatch = (v) => (currentIndex++ == index); Next <TItem> next = null; next = (v) => GetItemCore(v, isMatch, next); return(GetItemCore(visual, isMatch, next)); }; return(GetItem <TItem, int>(parent, indices, getItem, showNextItem)); }
internal static TItem GetItem <TItem>(Visual parent, object[] indices, ShowNextItem <TItem> showNextItem) where TItem : Visual { GetItemDelegate <TItem, object> getItem = (visual, obj) => { int currentIndex = 0; IsMatch <TItem> isMatch = (v) => { if (obj is int) { return(currentIndex++ == (int)obj); } else if (obj is string) { return(GetItemText(v) == (string)obj); } throw new NotSupportedException(); }; Next <TItem> next = null; next = (v) => GetItemCore(v, isMatch, next); return(GetItemCore(visual, isMatch, next)); }; return(GetItem <TItem, object>(parent, indices, getItem, showNextItem)); }
static TItem GetItem <TItem, T>(Visual parent, T[] indices, GetItemDelegate <TItem, T> getItem, ShowNextItem <TItem> showNextItem) where TItem : Visual { Visual v = parent; for (int i = 0; i < indices.Length; i++) { var item = getItem(v, indices[i]); if (item == null) { throw new NotSupportedException(ResourcesLocal3.Instance.ErrorNotFoundItem); } if (i == indices.Length - 1) { return(item); } showNextItem(item); v = item; } return(null); }