XULListboxAccessible.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /* -*- Mode: C++; tab-width: 4; 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. #ifndef mozilla_a11y_XULListboxAccessible_h__
  6. #define mozilla_a11y_XULListboxAccessible_h__
  7. #include "BaseAccessibles.h"
  8. #include "TableAccessible.h"
  9. #include "TableCellAccessible.h"
  10. #include "xpcAccessibleTable.h"
  11. #include "xpcAccessibleTableCell.h"
  12. #include "XULMenuAccessible.h"
  13. #include "XULSelectControlAccessible.h"
  14. namespace mozilla {
  15. namespace a11y {
  16. /**
  17. * XULColumAccessible are accessible for list and tree columns elements
  18. * (xul:treecols and xul:listcols).
  19. */
  20. class XULColumAccessible : public AccessibleWrap
  21. {
  22. public:
  23. XULColumAccessible(nsIContent* aContent, DocAccessible* aDoc);
  24. // Accessible
  25. virtual a11y::role NativeRole() override;
  26. virtual uint64_t NativeState() override;
  27. };
  28. /**
  29. * XULColumnItemAccessible are accessibles for list and tree column elements
  30. * (xul:listcol and xul:treecol).
  31. */
  32. class XULColumnItemAccessible : public LeafAccessible
  33. {
  34. public:
  35. XULColumnItemAccessible(nsIContent* aContent, DocAccessible* aDoc);
  36. // Accessible
  37. virtual a11y::role NativeRole() override;
  38. virtual uint64_t NativeState() override;
  39. // ActionAccessible
  40. virtual uint8_t ActionCount() override;
  41. virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
  42. virtual bool DoAction(uint8_t aIndex) override;
  43. enum { eAction_Click = 0 };
  44. };
  45. /*
  46. * A class the represents the XUL Listbox widget.
  47. */
  48. class XULListboxAccessible : public XULSelectControlAccessible,
  49. public TableAccessible
  50. {
  51. public:
  52. XULListboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
  53. // TableAccessible
  54. virtual uint32_t ColCount() override;
  55. virtual uint32_t RowCount() override;
  56. virtual Accessible* CellAt(uint32_t aRowIndex, uint32_t aColumnIndex) override;
  57. virtual bool IsColSelected(uint32_t aColIdx) override;
  58. virtual bool IsRowSelected(uint32_t aRowIdx) override;
  59. virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx) override;
  60. virtual uint32_t SelectedCellCount() override;
  61. virtual uint32_t SelectedColCount() override;
  62. virtual uint32_t SelectedRowCount() override;
  63. virtual void SelectedCells(nsTArray<Accessible*>* aCells) override;
  64. virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells) override;
  65. virtual void SelectedColIndices(nsTArray<uint32_t>* aCols) override;
  66. virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows) override;
  67. virtual void SelectRow(uint32_t aRowIdx) override;
  68. virtual void UnselectRow(uint32_t aRowIdx) override;
  69. virtual Accessible* AsAccessible() override { return this; }
  70. // Accessible
  71. virtual void Value(nsString& aValue) override;
  72. virtual TableAccessible* AsTable() override { return this; }
  73. virtual a11y::role NativeRole() override;
  74. virtual uint64_t NativeState() override;
  75. // Widgets
  76. virtual bool IsWidget() const override;
  77. virtual bool IsActiveWidget() const override;
  78. virtual bool AreItemsOperable() const override;
  79. virtual Accessible* ContainerWidget() const override;
  80. protected:
  81. virtual ~XULListboxAccessible() {}
  82. bool IsMulticolumn() { return ColCount() > 1; }
  83. };
  84. /**
  85. * Listitems -- used in listboxes
  86. */
  87. class XULListitemAccessible : public XULMenuitemAccessible
  88. {
  89. public:
  90. enum { eAction_Click = 0 };
  91. NS_DECL_ISUPPORTS_INHERITED
  92. XULListitemAccessible(nsIContent* aContent, DocAccessible* aDoc);
  93. // Accessible
  94. virtual void Description(nsString& aDesc) override;
  95. virtual a11y::role NativeRole() override;
  96. virtual uint64_t NativeState() override;
  97. virtual uint64_t NativeInteractiveState() const override;
  98. // Actions
  99. virtual void ActionNameAt(uint8_t index, nsAString& aName) override;
  100. // Widgets
  101. virtual Accessible* ContainerWidget() const override;
  102. protected:
  103. virtual ~XULListitemAccessible();
  104. // Accessible
  105. virtual ENameValueFlag NativeName(nsString& aName) override;
  106. // XULListitemAccessible
  107. /**
  108. * Return listbox accessible for the listitem.
  109. */
  110. Accessible* GetListAccessible() const;
  111. private:
  112. bool mIsCheckbox;
  113. };
  114. /**
  115. * Class represents xul:listcell.
  116. */
  117. class XULListCellAccessible : public HyperTextAccessibleWrap,
  118. public TableCellAccessible
  119. {
  120. public:
  121. XULListCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
  122. // nsISupports
  123. NS_DECL_ISUPPORTS_INHERITED
  124. // Accessible
  125. virtual TableCellAccessible* AsTableCell() override { return this; }
  126. virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() override;
  127. virtual a11y::role NativeRole() override;
  128. // TableCellAccessible
  129. virtual TableAccessible* Table() const override;
  130. virtual uint32_t ColIdx() const override;
  131. virtual uint32_t RowIdx() const override;
  132. virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) override;
  133. virtual bool Selected() override;
  134. protected:
  135. virtual ~XULListCellAccessible() {}
  136. };
  137. } // namespace a11y
  138. } // namespace mozilla
  139. #endif