michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 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 "XULColorPickerAccessible.h" michael@0: michael@0: #include "Accessible-inl.h" michael@0: #include "nsAccUtils.h" michael@0: #include "nsCoreUtils.h" michael@0: #include "DocAccessible.h" michael@0: #include "Role.h" michael@0: #include "States.h" michael@0: michael@0: #include "nsIDOMElement.h" michael@0: #include "nsMenuPopupFrame.h" michael@0: michael@0: using namespace mozilla::a11y; michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerTileAccessible michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: michael@0: XULColorPickerTileAccessible:: michael@0: XULColorPickerTileAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: AccessibleWrap(aContent, aDoc) michael@0: { michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerTileAccessible: nsIAccessible michael@0: michael@0: void michael@0: XULColorPickerTileAccessible::Value(nsString& aValue) michael@0: { michael@0: aValue.Truncate(); michael@0: michael@0: mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::color, aValue); michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerTileAccessible: Accessible michael@0: michael@0: role michael@0: XULColorPickerTileAccessible::NativeRole() michael@0: { michael@0: return roles::PUSHBUTTON; michael@0: } michael@0: michael@0: uint64_t michael@0: XULColorPickerTileAccessible::NativeState() michael@0: { michael@0: uint64_t state = AccessibleWrap::NativeState(); michael@0: if (mContent->HasAttr(kNameSpaceID_None, nsGkAtoms::selected)) michael@0: state |= states::SELECTED; michael@0: michael@0: return state; michael@0: } michael@0: michael@0: uint64_t michael@0: XULColorPickerTileAccessible::NativeInteractiveState() const michael@0: { michael@0: return NativelyUnavailable() ? michael@0: states::UNAVAILABLE : states::FOCUSABLE | states::SELECTABLE; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerTileAccessible: Widgets michael@0: michael@0: Accessible* michael@0: XULColorPickerTileAccessible::ContainerWidget() const michael@0: { michael@0: Accessible* parent = Parent(); michael@0: if (parent) { michael@0: Accessible* grandParent = parent->Parent(); michael@0: if (grandParent && grandParent->IsMenuButton()) michael@0: return grandParent; michael@0: } michael@0: return nullptr; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerAccessible michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: michael@0: XULColorPickerAccessible:: michael@0: XULColorPickerAccessible(nsIContent* aContent, DocAccessible* aDoc) : michael@0: XULColorPickerTileAccessible(aContent, aDoc) michael@0: { michael@0: mGenericTypes |= eMenuButton; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerAccessible: Accessible michael@0: michael@0: uint64_t michael@0: XULColorPickerAccessible::NativeState() michael@0: { michael@0: uint64_t state = AccessibleWrap::NativeState(); michael@0: return state | states::HASPOPUP; michael@0: } michael@0: michael@0: role michael@0: XULColorPickerAccessible::NativeRole() michael@0: { michael@0: return roles::BUTTONDROPDOWNGRID; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerAccessible: Widgets michael@0: michael@0: bool michael@0: XULColorPickerAccessible::IsWidget() const michael@0: { michael@0: return true; michael@0: } michael@0: michael@0: bool michael@0: XULColorPickerAccessible::IsActiveWidget() const michael@0: { michael@0: return FocusMgr()->HasDOMFocus(mContent); michael@0: } michael@0: michael@0: bool michael@0: XULColorPickerAccessible::AreItemsOperable() const michael@0: { michael@0: Accessible* menuPopup = mChildren.SafeElementAt(0, nullptr); michael@0: if (menuPopup) { michael@0: nsMenuPopupFrame* menuPopupFrame = do_QueryFrame(menuPopup->GetFrame()); michael@0: return menuPopupFrame && menuPopupFrame->IsOpen(); michael@0: } michael@0: return false; michael@0: } michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // XULColorPickerAccessible: protected Accessible michael@0: michael@0: bool michael@0: XULColorPickerAccessible::IsAcceptableChild(Accessible* aPossibleChild) const michael@0: { michael@0: return roles::ALERT == aPossibleChild->Role(); michael@0: }