Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #include "nsAccessibleRelation.h"
7 :
8 : #include "Relation.h"
9 : #include "Accessible.h"
10 : #include "xpcAccessibleDocument.h"
11 :
12 : #include "nsArrayUtils.h"
13 : #include "nsComponentManagerUtils.h"
14 :
15 : using namespace mozilla::a11y;
16 :
17 0 : nsAccessibleRelation::nsAccessibleRelation(uint32_t aType,
18 0 : Relation* aRel) :
19 0 : mType(aType)
20 : {
21 0 : mTargets = do_CreateInstance(NS_ARRAY_CONTRACTID);
22 0 : Accessible* targetAcc = nullptr;
23 0 : while ((targetAcc = aRel->Next()))
24 0 : mTargets->AppendElement(static_cast<nsIAccessible*>(ToXPC(targetAcc)), false);
25 0 : }
26 :
27 0 : nsAccessibleRelation::nsAccessibleRelation(uint32_t aType,
28 0 : const nsTArray<ProxyAccessible*>* aTargets) :
29 0 : mType(aType)
30 : {
31 0 : mTargets = do_CreateInstance(NS_ARRAY_CONTRACTID);
32 0 : for (uint32_t idx = 0; idx < aTargets->Length(); ++idx) {
33 0 : mTargets->AppendElement(
34 0 : static_cast<nsIAccessible*>(ToXPC(aTargets->ElementAt(idx))),
35 0 : false);
36 : }
37 0 : }
38 :
39 0 : nsAccessibleRelation::~nsAccessibleRelation()
40 : {
41 0 : }
42 :
43 : // nsISupports
44 0 : NS_IMPL_ISUPPORTS(nsAccessibleRelation, nsIAccessibleRelation)
45 :
46 : // nsIAccessibleRelation
47 : NS_IMETHODIMP
48 0 : nsAccessibleRelation::GetRelationType(uint32_t *aType)
49 : {
50 0 : NS_ENSURE_ARG_POINTER(aType);
51 0 : *aType = mType;
52 0 : return NS_OK;
53 : }
54 :
55 : NS_IMETHODIMP
56 0 : nsAccessibleRelation::GetTargetsCount(uint32_t *aCount)
57 : {
58 0 : NS_ENSURE_ARG_POINTER(aCount);
59 0 : *aCount = 0;
60 0 : return mTargets->GetLength(aCount);
61 : }
62 :
63 : NS_IMETHODIMP
64 0 : nsAccessibleRelation::GetTarget(uint32_t aIndex, nsIAccessible **aTarget)
65 : {
66 0 : NS_ENSURE_ARG_POINTER(aTarget);
67 0 : nsresult rv = NS_OK;
68 0 : nsCOMPtr<nsIAccessible> target = do_QueryElementAt(mTargets, aIndex, &rv);
69 0 : target.forget(aTarget);
70 0 : return rv;
71 : }
72 :
73 : NS_IMETHODIMP
74 0 : nsAccessibleRelation::GetTargets(nsIArray **aTargets)
75 : {
76 0 : NS_ENSURE_ARG_POINTER(aTargets);
77 0 : NS_ADDREF(*aTargets = mTargets);
78 0 : return NS_OK;
79 : }
|