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));
        }
Example #3
0
        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);
        }