104 lines
6.1 KiB
C++
104 lines
6.1 KiB
C++
// Copyright (c) Microsoft Corporation
|
|
//
|
|
#pragma once
|
|
|
|
|
|
// A Class representing the top level frame of the AnnotatedTextControl
|
|
class TextAreaProvider : public IRawElementProviderSimple,
|
|
public IRawElementProviderFragment,
|
|
public ITextProvider2
|
|
{
|
|
public:
|
|
TextAreaProvider(_In_ HWND hwnd, _In_ AnnotatedTextControl *control);
|
|
virtual ~TextAreaProvider();
|
|
|
|
// IUnknown methods
|
|
ULONG STDMETHODCALLTYPE AddRef();
|
|
ULONG STDMETHODCALLTYPE Release();
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _Outptr_ void**ppInterface);
|
|
|
|
// IRawElementProviderSimple methods
|
|
HRESULT STDMETHODCALLTYPE get_ProviderOptions(_Out_ ProviderOptions * retVal);
|
|
HRESULT STDMETHODCALLTYPE GetPatternProvider(PATTERNID iid, _Outptr_result_maybenull_ IUnknown * * retVal );
|
|
HRESULT STDMETHODCALLTYPE GetPropertyValue(PROPERTYID idProp, _Out_ VARIANT * retVal );
|
|
HRESULT STDMETHODCALLTYPE get_HostRawElementProvider(_Outptr_result_maybenull_ IRawElementProviderSimple ** retVal );
|
|
|
|
// IRawElementProviderFragment methods
|
|
HRESULT STDMETHODCALLTYPE Navigate(NavigateDirection direction, _Outptr_result_maybenull_ IRawElementProviderFragment ** retVal );
|
|
HRESULT STDMETHODCALLTYPE GetRuntimeId(_Outptr_result_maybenull_ SAFEARRAY ** retVal );
|
|
HRESULT STDMETHODCALLTYPE get_BoundingRectangle(_Out_ UiaRect * retVal );
|
|
HRESULT STDMETHODCALLTYPE GetEmbeddedFragmentRoots(_Outptr_result_maybenull_ SAFEARRAY ** retVal );
|
|
HRESULT STDMETHODCALLTYPE SetFocus();
|
|
HRESULT STDMETHODCALLTYPE get_FragmentRoot(_Outptr_result_maybenull_ IRawElementProviderFragmentRoot * * retVal);
|
|
|
|
// TextProvider methods
|
|
HRESULT STDMETHODCALLTYPE GetSelection(_Outptr_result_maybenull_ SAFEARRAY** retVal);
|
|
HRESULT STDMETHODCALLTYPE GetVisibleRanges(_Outptr_result_maybenull_ SAFEARRAY ** retVal);
|
|
HRESULT STDMETHODCALLTYPE RangeFromChild(_In_opt_ IRawElementProviderSimple * childElement, _Outptr_result_maybenull_ ITextRangeProvider ** retVal);
|
|
HRESULT STDMETHODCALLTYPE RangeFromPoint(UiaPoint screenLocation, _Outptr_result_maybenull_ ITextRangeProvider ** retVal);
|
|
HRESULT STDMETHODCALLTYPE get_DocumentRange(_Outptr_result_maybenull_ ITextRangeProvider ** retVal);
|
|
HRESULT STDMETHODCALLTYPE get_SupportedTextSelection(_Out_ SupportedTextSelection * retVal);
|
|
|
|
// ITextProvider2 methods
|
|
HRESULT STDMETHODCALLTYPE RangeFromAnnotation(_In_opt_ IRawElementProviderSimple *annotationElement, _Outptr_result_maybenull_ ITextRangeProvider **retVal);
|
|
HRESULT STDMETHODCALLTYPE GetCaretRange(_Out_ BOOL *isActive, _Outptr_result_maybenull_ ITextRangeProvider **retVal);
|
|
|
|
private:
|
|
// Ref Counter for this COM object
|
|
ULONG _refCount;
|
|
|
|
HWND _hwnd; // The HWND for this object
|
|
AnnotatedTextControl *_control; // The control object that this UIA object is referring to
|
|
};
|
|
|
|
// A text range for the TextArea control
|
|
class __declspec(uuid("d6558c5c-71dc-4b83-8ee6-06cab27612fd"))
|
|
TextAreaTextRange:
|
|
public ITextRangeProvider
|
|
{
|
|
public:
|
|
TextAreaTextRange(_In_ HWND hwnd, _In_ AnnotatedTextControl *control, _In_ Range range);
|
|
virtual ~TextAreaTextRange();
|
|
|
|
// IUnknown methods
|
|
ULONG STDMETHODCALLTYPE AddRef();
|
|
ULONG STDMETHODCALLTYPE Release();
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _Outptr_ void**ppInterface);
|
|
|
|
// ITextRangeProvider methods
|
|
HRESULT STDMETHODCALLTYPE Clone(_Outptr_result_maybenull_ ITextRangeProvider ** retVal);
|
|
HRESULT STDMETHODCALLTYPE Compare(_In_opt_ ITextRangeProvider * range, _Out_ BOOL *retVal);
|
|
HRESULT STDMETHODCALLTYPE CompareEndpoints(TextPatternRangeEndpoint endpoint, _In_opt_ ITextRangeProvider *targetRange, _In_ TextPatternRangeEndpoint targetEndpoint, _Out_ int *retVal);
|
|
HRESULT STDMETHODCALLTYPE ExpandToEnclosingUnit(_In_ TextUnit unit);
|
|
HRESULT STDMETHODCALLTYPE FindAttribute(_In_ TEXTATTRIBUTEID textAttributeId, _In_ VARIANT val, _In_ BOOL searchBackward, _Outptr_result_maybenull_ ITextRangeProvider **retVal);
|
|
HRESULT STDMETHODCALLTYPE FindText(_In_ BSTR text, BOOL searchBackward, BOOL ignoreCase, _Outptr_result_maybenull_ ITextRangeProvider **retVal);
|
|
HRESULT STDMETHODCALLTYPE GetAttributeValue(_In_ TEXTATTRIBUTEID textAttributeId, _Out_ VARIANT *retVal);
|
|
HRESULT STDMETHODCALLTYPE GetBoundingRectangles(_Outptr_result_maybenull_ SAFEARRAY ** retVal);
|
|
HRESULT STDMETHODCALLTYPE GetEnclosingElement(_Outptr_result_maybenull_ IRawElementProviderSimple **retVal);
|
|
HRESULT STDMETHODCALLTYPE GetText(_In_ int maxLength, _Out_ BSTR * retVal);
|
|
HRESULT STDMETHODCALLTYPE Move(_In_ TextUnit unit, _In_ int count, _Out_ int *retVal);
|
|
HRESULT STDMETHODCALLTYPE MoveEndpointByUnit(_In_ TextPatternRangeEndpoint endpoint, _In_ TextUnit unit, _In_ int count, _Out_ int *retVal);
|
|
HRESULT STDMETHODCALLTYPE MoveEndpointByRange(_In_ TextPatternRangeEndpoint endpoint, _In_opt_ ITextRangeProvider *targetRange, _In_ TextPatternRangeEndpoint targetEndpoint);
|
|
HRESULT STDMETHODCALLTYPE Select();
|
|
HRESULT STDMETHODCALLTYPE AddToSelection();
|
|
HRESULT STDMETHODCALLTYPE RemoveFromSelection();
|
|
HRESULT STDMETHODCALLTYPE ScrollIntoView(_In_ BOOL alignToTop);
|
|
HRESULT STDMETHODCALLTYPE GetChildren(_Outptr_result_maybenull_ SAFEARRAY ** retVal);
|
|
private:
|
|
// Helper function to convert Rects
|
|
HRESULT SafeArrayInsertRect(_In_ SAFEARRAY * sa, _In_ RectF rect, _In_ long index);
|
|
|
|
// Helper functions for walking/searching
|
|
bool CheckEndPointIsUnitEndpoint(_In_ EndPoint check, _In_ TextUnit unit, _In_ TEXTATTRIBUTEID specificAttribute);
|
|
EndPoint Walk(_In_ EndPoint start, _In_ bool forward, _In_ TextUnit unit, _In_ TEXTATTRIBUTEID specificAttribute, _In_ int count, _Out_ int *walked);
|
|
bool GetAnnotationsAtPoint(_In_ EndPoint endPoint, _Outptr_result_buffer_(*annotationCount) int **annotationIds, _Out_ int *annotationCount);
|
|
bool IsWhiteSpace(_In_ EndPoint check);
|
|
|
|
// Ref Counter for this COM object
|
|
ULONG _refCount;
|
|
|
|
HWND _hwnd; // The HWND for this object
|
|
AnnotatedTextControl *_control; // The control object that this UIA object is referring to
|
|
Range _range; // The range for this instance of TextAreaTextRange
|
|
};
|