michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* vim:expandtab:shiftwidth=2:tabstop=2: michael@0: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "ia2AccessibleEditableText.h" michael@0: michael@0: #include "AccessibleEditableText_i.c" michael@0: #include "HyperTextAccessible-inl.h" michael@0: #include "HyperTextAccessibleWrap.h" michael@0: michael@0: #include "nsCOMPtr.h" michael@0: #include "nsString.h" michael@0: michael@0: using namespace mozilla::a11y; michael@0: michael@0: // IAccessibleEditableText michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::copyText(long aStartOffset, long aEndOffset) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: textAcc->CopyText(aStartOffset, aEndOffset); michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::deleteText(long aStartOffset, long aEndOffset) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: textAcc->DeleteText(aStartOffset, aEndOffset); michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::insertText(long aOffset, BSTR *aText) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidOffset(aOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: uint32_t length = ::SysStringLen(*aText); michael@0: nsAutoString text(*aText, length); michael@0: michael@0: textAcc->InsertText(text, aOffset); michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::cutText(long aStartOffset, long aEndOffset) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: textAcc->CutText(aStartOffset, aEndOffset); michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::pasteText(long aOffset) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidOffset(aOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: textAcc->PasteText(aOffset); michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::replaceText(long aStartOffset, long aEndOffset, michael@0: BSTR *aText) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: HyperTextAccessible* textAcc = static_cast(this); michael@0: if (textAcc->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) michael@0: return E_INVALIDARG; michael@0: michael@0: textAcc->DeleteText(aStartOffset, aEndOffset); michael@0: michael@0: uint32_t length = ::SysStringLen(*aText); michael@0: nsAutoString text(*aText, length); michael@0: textAcc->InsertText(text, aStartOffset); michael@0: michael@0: return S_OK; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: ia2AccessibleEditableText::setAttributes(long aStartOffset, long aEndOffset, michael@0: BSTR *aAttributes) michael@0: { michael@0: return E_NOTIMPL; michael@0: }