DXR will be turned off on Tuesday, December 29th. It will redirect to Searchfox.
See the announcement on Discourse.

DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_dom_HTMLMenuItemElement_h
#define mozilla_dom_HTMLMenuItemElement_h

#include "mozilla/Attributes.h"
#include "mozilla/Attributes.h"
#include "nsGenericHTMLElement.h"

namespace mozilla {

class EventChainPreVisitor;
class EventChainPreVisitor;

namespace dom {

class Visitor;


class HTMLMenuItemElement final : public nsGenericHTMLElement {
 public:
  using mozilla::dom::Element::GetText;

  HTMLMenuItemElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
  HTMLMenuItemElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
                      mozilla::dom::FromParser aFromParser);

  NS_IMPL_FROMNODE_HTML_WITH_TAG(HTMLMenuItemElement, menuitem)

  // nsISupports
  NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLMenuItemElement,
                                       nsGenericHTMLElement)
                                       nsGenericHTMLElement)

  void GetEventTargetParent(EventChainPreVisitor& aVisitor) override;
  virtual nsresult PostHandleEvent(EventChainPostVisitor& aVisitor) override;

  virtual nsresult BindToTree(BindContext&, nsINode& aParent) override;
  virtual nsresult BindToTree(BindContext&, nsINode& aParent) override;

  virtual bool ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
                              const nsAString& aValue,
                              nsIPrincipal* aMaybeScriptedPrincipal,
                              nsAttrValue& aResult) override;
                              nsAttrValue& aResult) override;

  virtual void DoneCreatingElement() override;

  virtual nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;


  uint8_t GetType() const { return mType; }

  /**
   * Syntax sugar to make it easier to check for checked and checked dirty
   */
   */
  bool IsChecked() const { return mChecked; }
  bool IsCheckedDirty() const { return mCheckedDirty; }

  void GetText(nsAString& aText);


  // WebIDL

  void GetType(DOMString& aValue);
  void SetType(const nsAString& aType, ErrorResult& aError) {
    SetHTMLAttr(nsGkAtoms::type, aType, aError);
    SetHTMLAttr(nsGkAtoms::type, aType, aError);
  }

  // nsAString needed for HTMLMenuElement
  void GetLabel(nsAString& aValue) {
    if (!GetAttr(kNameSpaceID_None, nsGkAtoms::label, aValue)) {
    if (!GetAttr(kNameSpaceID_None, nsGkAtoms::label, aValue)) {
      GetText(aValue);
    }
  }
  void SetLabel(const nsAString& aLabel, ErrorResult& aError) {
    SetHTMLAttr(nsGkAtoms::label, aLabel, aError);
    SetHTMLAttr(nsGkAtoms::label, aLabel, aError);
  }

  // nsAString needed for HTMLMenuElement
  void GetIcon(nsAString& aValue) {
    GetURIAttr(nsGkAtoms::icon, nullptr, aValue);
    GetURIAttr(nsGkAtoms::icon, nullptr, aValue);
  }
  void SetIcon(const nsAString& aIcon, ErrorResult& aError) {
    SetHTMLAttr(nsGkAtoms::icon, aIcon, aError);
  }
  }

  bool Disabled() const { return GetBoolAttr(nsGkAtoms::disabled); }
  void SetDisabled(bool aDisabled, ErrorResult& aError) {
    SetHTMLBoolAttr(nsGkAtoms::disabled, aDisabled, aError);
  }
  }

  bool Checked() const { return mChecked; }
  void SetChecked(bool aChecked);

  void GetRadiogroup(DOMString& aValue) {
  void GetRadiogroup(DOMString& aValue) {
    GetHTMLAttr(nsGkAtoms::radiogroup, aValue);
  }
  void SetRadiogroup(const nsAString& aRadiogroup, ErrorResult& aError) {
    SetHTMLAttr(nsGkAtoms::radiogroup, aRadiogroup, aError);
  }
  }

  bool DefaultChecked() const { return GetBoolAttr(nsGkAtoms::checked); }
  bool DefaultChecked() const { return GetBoolAttr(nsGkAtoms::checked); }
  void SetDefaultChecked(bool aDefault, ErrorResult& aError) {
    SetHTMLBoolAttr(nsGkAtoms::checked, aDefault, aError);
  }

 protected:
 protected:
  virtual ~HTMLMenuItemElement();

  virtual JSObject* WrapNode(JSContext* aCx,
                             JS::Handle<JSObject*> aGivenProto) override;


 protected:
  virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsAtom* aName,
                                const nsAttrValue* aValue,
                                const nsAttrValue* aOldValue,
                                nsIPrincipal* aSubjectPrincipal,
                                nsIPrincipal* aSubjectPrincipal,
                                bool aNotify) override;

  void WalkRadioGroup(Visitor* aVisitor);

  HTMLMenuItemElement* GetSelectedRadio();
  HTMLMenuItemElement* GetSelectedRadio();

  void AddedToRadioGroup();

  void InitChecked();


  friend class ClearCheckedVisitor;
  friend class SetCheckedDirtyVisitor;

  void ClearChecked() { mChecked = false; }
  void SetCheckedDirty() { mCheckedDirty = true; }
  void SetCheckedDirty() { mCheckedDirty = true; }

 private:
  uint8_t mType : 2;
  bool mParserCreating : 1;
  bool mParserCreating : 1;
  bool mShouldInitChecked : 1;
  bool mCheckedDirty : 1;
  bool mChecked : 1;
};


}  // namespace dom
}  // namespace mozilla

#endif  // mozilla_dom_HTMLMenuItemElement_h