XULMenuParentElement.h (2724B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=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 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef XULMenuParentElement_h__ 8 #define XULMenuParentElement_h__ 9 10 #include "mozilla/Attributes.h" 11 #include "nsISupports.h" 12 #include "nsXULElement.h" 13 14 namespace mozilla::dom { 15 16 class KeyboardEvent; 17 class XULButtonElement; 18 19 nsXULElement* NS_NewXULMenuParentElement( 20 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); 21 22 class XULMenuParentElement : public nsXULElement { 23 public: 24 NS_DECL_ISUPPORTS_INHERITED 25 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULMenuParentElement, nsXULElement) 26 27 explicit XULMenuParentElement( 28 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); 29 30 bool IsMenuBar() const { return NodeInfo()->Equals(nsGkAtoms::menubar); } 31 bool IsMenu() const { return !IsMenuBar(); } 32 33 bool IsLocked() const { return mLocked; } 34 35 void LockMenuUntilClosed(bool aLock); 36 37 bool IsInMenuList() const { 38 return GetParent() && GetParent()->IsXULElement(nsGkAtoms::menulist); 39 } 40 41 XULButtonElement* FindMenuWithShortcut(KeyboardEvent&) const; 42 XULButtonElement* FindMenuWithShortcut(const nsAString& aString, 43 bool& aDoAction) const; 44 MOZ_CAN_RUN_SCRIPT void HandleEnterKeyPress(WidgetEvent&); 45 46 NS_IMPL_FROMNODE_HELPER(XULMenuParentElement, 47 IsAnyOfXULElements(nsGkAtoms::menupopup, 48 nsGkAtoms::panel, 49 nsGkAtoms::tooltip, 50 nsGkAtoms::menubar)); 51 52 XULButtonElement* GetActiveMenuChild() const { return mActiveItem.get(); } 53 enum class ByKey : bool { No, Yes }; 54 MOZ_CAN_RUN_SCRIPT void SetActiveMenuChild(XULButtonElement*, 55 ByKey = ByKey::No); 56 57 XULButtonElement* GetFirstMenuItem() const; 58 XULButtonElement* GetLastMenuItem() const; 59 60 XULButtonElement* GetNextMenuItemFrom(const XULButtonElement&) const; 61 XULButtonElement* GetPrevMenuItemFrom(const XULButtonElement&) const; 62 63 enum class Wrap : bool { No, Yes }; 64 XULButtonElement* GetNextMenuItem(Wrap = Wrap::Yes) const; 65 XULButtonElement* GetPrevMenuItem(Wrap = Wrap::Yes) const; 66 67 XULButtonElement* GetContainingMenu() const; 68 69 MOZ_CAN_RUN_SCRIPT void SelectFirstItem(); 70 71 protected: 72 RefPtr<XULButtonElement> mActiveItem; 73 bool mLocked = false; 74 75 ~XULMenuParentElement() override; 76 }; 77 78 } // namespace mozilla::dom 79 80 #endif // XULMenuParentElement_h