tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ia2AccessibleEditableText.cpp (3106B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:expandtab:shiftwidth=2:tabstop=2:
      3 */
      4 /* This Source Code Form is subject to the terms of the Mozilla Public
      5 * License, v. 2.0. If a copy of the MPL was not distributed with this
      6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      7 
      8 #include "ia2AccessibleEditableText.h"
      9 #include "ia2AccessibleHypertext.h"
     10 
     11 #include "AccessibleEditableText_i.c"
     12 #include "mozilla/a11y/HyperTextAccessibleBase.h"
     13 
     14 #include "nsCOMPtr.h"
     15 #include "nsString.h"
     16 
     17 using namespace mozilla::a11y;
     18 
     19 HyperTextAccessibleBase* ia2AccessibleEditableText::TextAcc() {
     20  auto hyp = static_cast<ia2AccessibleHypertext*>(this);
     21  Accessible* acc = hyp->Acc();
     22  return acc ? acc->AsHyperTextBase() : nullptr;
     23 }
     24 
     25 // IAccessibleEditableText
     26 
     27 STDMETHODIMP
     28 ia2AccessibleEditableText::copyText(long aStartOffset, long aEndOffset) {
     29  HyperTextAccessibleBase* textAcc = TextAcc();
     30  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     31 
     32  if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) return E_INVALIDARG;
     33 
     34  textAcc->CopyText(aStartOffset, aEndOffset);
     35  return S_OK;
     36 }
     37 
     38 STDMETHODIMP
     39 ia2AccessibleEditableText::deleteText(long aStartOffset, long aEndOffset) {
     40  HyperTextAccessibleBase* textAcc = TextAcc();
     41  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     42 
     43  if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) return E_INVALIDARG;
     44 
     45  textAcc->DeleteText(aStartOffset, aEndOffset);
     46  return S_OK;
     47 }
     48 
     49 STDMETHODIMP
     50 ia2AccessibleEditableText::insertText(long aOffset, BSTR* aText) {
     51  uint32_t length = ::SysStringLen(*aText);
     52  nsAutoString text(*aText, length);
     53 
     54  HyperTextAccessibleBase* textAcc = TextAcc();
     55  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     56 
     57  if (!textAcc->IsValidOffset(aOffset)) return E_INVALIDARG;
     58 
     59  textAcc->InsertText(text, aOffset);
     60  return S_OK;
     61 }
     62 
     63 STDMETHODIMP
     64 ia2AccessibleEditableText::cutText(long aStartOffset, long aEndOffset) {
     65  HyperTextAccessibleBase* textAcc = TextAcc();
     66  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     67 
     68  if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) return E_INVALIDARG;
     69 
     70  textAcc->CutText(aStartOffset, aEndOffset);
     71  return S_OK;
     72 }
     73 
     74 STDMETHODIMP
     75 ia2AccessibleEditableText::pasteText(long aOffset) {
     76  HyperTextAccessibleBase* textAcc = TextAcc();
     77  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     78 
     79  if (!textAcc->IsValidOffset(aOffset)) return E_INVALIDARG;
     80 
     81  textAcc->PasteText(aOffset);
     82  return S_OK;
     83 }
     84 
     85 STDMETHODIMP
     86 ia2AccessibleEditableText::replaceText(long aStartOffset, long aEndOffset,
     87                                       BSTR* aText) {
     88  HyperTextAccessibleBase* textAcc = TextAcc();
     89  if (!textAcc) return CO_E_OBJNOTCONNECTED;
     90 
     91  if (!textAcc->IsValidRange(aStartOffset, aEndOffset)) return E_INVALIDARG;
     92 
     93  textAcc->DeleteText(aStartOffset, aEndOffset);
     94 
     95  uint32_t length = ::SysStringLen(*aText);
     96  nsAutoString text(*aText, length);
     97  textAcc->InsertText(text, aStartOffset);
     98 
     99  return S_OK;
    100 }
    101 
    102 STDMETHODIMP
    103 ia2AccessibleEditableText::setAttributes(long aStartOffset, long aEndOffset,
    104                                         BSTR* aAttributes) {
    105  return E_NOTIMPL;
    106 }