1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "xpcAccessibleTextRange.h"
9 #include "TextRange-inl.h"
11 #include "nsIMutableArray.h"
12 #include "nsComponentManagerUtils.h"
13 #include "nsQueryObject.h"
14 #include "xpcAccessibleDocument.h"
16 using namespace mozilla
;
17 using namespace mozilla::a11y
;
19 // nsISupports and cycle collection
21 NS_IMPL_CYCLE_COLLECTION(xpcAccessibleTextRange
, mRange
.mRoot
,
22 mRange
.mStartContainer
, mRange
.mEndContainer
)
24 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(xpcAccessibleTextRange
)
25 NS_INTERFACE_MAP_ENTRY(nsIAccessibleTextRange
)
26 NS_INTERFACE_MAP_ENTRY(xpcAccessibleTextRange
)
27 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports
, nsIAccessibleTextRange
)
30 NS_IMPL_CYCLE_COLLECTING_ADDREF(xpcAccessibleTextRange
)
31 NS_IMPL_CYCLE_COLLECTING_RELEASE(xpcAccessibleTextRange
)
33 // nsIAccessibleTextRange
36 xpcAccessibleTextRange::GetStartContainer(nsIAccessibleText
** aAnchor
) {
37 NS_ENSURE_ARG_POINTER(aAnchor
);
38 NS_IF_ADDREF(*aAnchor
= ToXPCText(mRange
.StartContainer()));
43 xpcAccessibleTextRange::GetStartOffset(int32_t* aOffset
) {
44 NS_ENSURE_ARG_POINTER(aOffset
);
45 *aOffset
= mRange
.StartOffset();
50 xpcAccessibleTextRange::GetEndContainer(nsIAccessibleText
** aAnchor
) {
51 NS_ENSURE_ARG_POINTER(aAnchor
);
52 NS_IF_ADDREF(*aAnchor
= ToXPCText(mRange
.EndContainer()));
57 xpcAccessibleTextRange::GetEndOffset(int32_t* aOffset
) {
58 NS_ENSURE_ARG_POINTER(aOffset
);
59 *aOffset
= mRange
.EndOffset();
64 xpcAccessibleTextRange::GetContainer(nsIAccessible
** aContainer
) {
65 NS_ENSURE_ARG_POINTER(aContainer
);
66 NS_IF_ADDREF(*aContainer
= ToXPC(mRange
.Container()));
71 xpcAccessibleTextRange::GetEmbeddedChildren(nsIArray
** aList
) {
73 nsCOMPtr
<nsIMutableArray
> xpcList
=
74 do_CreateInstance(NS_ARRAY_CONTRACTID
, &rv
);
75 NS_ENSURE_SUCCESS(rv
, rv
);
77 nsTArray
<Accessible
*> objects
;
78 mRange
.EmbeddedChildren(&objects
);
80 uint32_t len
= objects
.Length();
81 for (uint32_t idx
= 0; idx
< len
; idx
++)
82 xpcList
->AppendElement(static_cast<nsIAccessible
*>(ToXPC(objects
[idx
])));
84 xpcList
.forget(aList
);
90 xpcAccessibleTextRange::Compare(nsIAccessibleTextRange
* aOtherRange
,
92 RefPtr
<xpcAccessibleTextRange
> xpcRange(do_QueryObject(aOtherRange
));
93 if (!xpcRange
|| !aResult
) return NS_ERROR_INVALID_ARG
;
95 *aResult
= (mRange
== xpcRange
->mRange
);
100 xpcAccessibleTextRange::CompareEndPoints(uint32_t aEndPoint
,
101 nsIAccessibleTextRange
* aOtherRange
,
102 uint32_t aOtherRangeEndPoint
,
104 RefPtr
<xpcAccessibleTextRange
> xpcRange(do_QueryObject(aOtherRange
));
105 if (!xpcRange
|| !aResult
) return NS_ERROR_INVALID_ARG
;
108 (aEndPoint
== EndPoint_Start
) ? mRange
.StartPoint() : mRange
.EndPoint();
109 TextPoint otherPoint
= (aOtherRangeEndPoint
== EndPoint_Start
)
110 ? xpcRange
->mRange
.StartPoint()
111 : xpcRange
->mRange
.EndPoint();
116 *aResult
= p
< otherPoint
? -1 : 1;
122 xpcAccessibleTextRange::GetText(nsAString
& aText
) {
131 xpcAccessibleTextRange::GetBounds(nsIArray
** aRectList
) { return NS_OK
; }
134 xpcAccessibleTextRange::Move(uint32_t aUnit
, int32_t aCount
) { return NS_OK
; }
137 xpcAccessibleTextRange::MoveStart(uint32_t aUnit
, int32_t aCount
) {
142 xpcAccessibleTextRange::MoveEnd(uint32_t aUnit
, int32_t aCount
) {
147 xpcAccessibleTextRange::Normalize(uint32_t aUnit
) { return NS_OK
; }
150 xpcAccessibleTextRange::Crop(nsIAccessible
* aContainer
, bool* aSuccess
) {
151 Accessible
* container
= aContainer
->ToInternalAccessible();
152 NS_ENSURE_TRUE(container
, NS_ERROR_INVALID_ARG
);
154 *aSuccess
= mRange
.Crop(container
);
159 xpcAccessibleTextRange::FindText(const nsAString
& aText
, bool aIsBackward
,
161 nsIAccessibleTextRange
** aRange
) {
166 xpcAccessibleTextRange::FindAttr(uint32_t aAttr
, nsIVariant
* aVal
,
168 nsIAccessibleTextRange
** aRange
) {
173 xpcAccessibleTextRange::AddToSelection() { return NS_OK
; }
176 xpcAccessibleTextRange::RemoveFromSelection() { return NS_OK
; }
179 xpcAccessibleTextRange::Select() { return NS_OK
; }
182 xpcAccessibleTextRange::ScrollIntoView(uint32_t aHow
) { return NS_OK
; }