Files
ZuneShell.dll/UIX/Microsoft/Iris/Accessibility/AccessibleChildren.cs
T

99 lines
2.7 KiB
C#
Raw Normal View History

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.Accessibility.AccessibleChildren
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
using Microsoft.Iris.Session;
using Microsoft.Iris.UI;
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
namespace Microsoft.Iris.Accessibility
{
[ComVisible(true)]
public class AccessibleChildren : IEnumVARIANT
{
private AccessibleProxy _proxy;
private int _current;
internal AccessibleChildren(AccessibleProxy proxy)
: this(proxy, -1)
{
}
internal AccessibleChildren(AccessibleProxy proxy, int position)
{
2021-04-02 19:10:51 -05:00
_proxy = proxy;
_current = position;
}
2021-04-02 19:10:51 -05:00
internal IEnumVARIANT Clone() => new AccessibleChildren(_proxy, _current);
internal int Next(int count, object[] children)
{
int index = 0;
do
{
2021-04-02 19:10:51 -05:00
++_current;
if (_current >= _proxy.UI.Children.Count)
{
2021-04-02 19:10:51 -05:00
_current = _proxy.UI.Children.Count;
break;
}
2021-04-02 19:10:51 -05:00
UIClass child = (UIClass)_proxy.UI.Children[_current];
2021-03-31 17:15:06 -05:00
children[index] = child.AccessibleProxy;
++index;
}
while (index < count);
return index;
}
2021-04-02 19:10:51 -05:00
internal void Reset() => _current = -1;
internal bool Skip(int count)
{
2021-04-02 19:10:51 -05:00
_current += count;
if (_current < _proxy.UI.Children.Count)
return true;
2021-04-02 19:10:51 -05:00
_current = _proxy.UI.Children.Count;
return false;
}
IEnumVARIANT IEnumVARIANT.Clone()
{
2021-04-02 19:10:51 -05:00
VerifyEnumeratorAccess();
return Clone();
}
unsafe int IEnumVARIANT.Next(int celt, object[] rgVar, IntPtr pceltFetched)
{
2021-04-02 19:10:51 -05:00
VerifyEnumeratorAccess();
int num = Next(celt, rgVar);
*(int*)(void*)pceltFetched = num;
return num != celt ? 1 : 0;
}
int IEnumVARIANT.Reset()
{
2021-04-02 19:10:51 -05:00
VerifyEnumeratorAccess();
Reset();
return 0;
}
int IEnumVARIANT.Skip(int celt)
{
2021-04-02 19:10:51 -05:00
VerifyEnumeratorAccess();
return !Skip(celt) ? 1 : 0;
}
private void VerifyEnumeratorAccess()
{
2021-04-02 19:10:51 -05:00
if (_proxy.UI != null && UIDispatcher.IsUIThread)
return;
Marshal.ThrowExceptionForHR(-2147467259);
}
}
}