text: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
   *
   * 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/. */
  
  #ifndef nsPopupSetFrame_h__
  #define nsPopupSetFrame_h__
  
  #include "mozilla/Attributes.h"
  #include "nsIAtom.h"
  #include "nsBoxFrame.h"
  
  nsIFrame* NS_NewPopupSetFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
  
  class nsPopupSetFrame : public nsBoxFrame
  {
  public:
    NS_DECL_FRAMEARENA_HELPERS
  
    nsPopupSetFrame(nsIPresShell* aShell, nsStyleContext* aContext):
      nsBoxFrame(aShell, aContext) {}
  
    ~nsPopupSetFrame() {}
    
    NS_IMETHOD Init(nsIContent*      aContent,
                    nsIFrame*        aParent,
                    nsIFrame*        aPrevInFlow) MOZ_OVERRIDE;
    NS_IMETHOD AppendFrames(ChildListID     aListID,
                            nsFrameList&    aFrameList) MOZ_OVERRIDE;
    NS_IMETHOD RemoveFrame(ChildListID     aListID,
                           nsIFrame*       aOldFrame) MOZ_OVERRIDE;
    NS_IMETHOD InsertFrames(ChildListID     aListID,
                            nsIFrame*       aPrevFrame,
                            nsFrameList&    aFrameList) MOZ_OVERRIDE;
    NS_IMETHOD  SetInitialChildList(ChildListID     aListID,
                                    nsFrameList&    aChildList) MOZ_OVERRIDE;
  
    NS_IMETHOD DoLayout(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
  
    // Used to destroy our popup frames.
    virtual void DestroyFrom(nsIFrame* aDestructRoot) MOZ_OVERRIDE;
  
    virtual nsIAtom* GetType() const MOZ_OVERRIDE;
  
  #ifdef DEBUG
    NS_IMETHOD List(FILE* out, int32_t aIndent, uint32_t aFlags = 0) const MOZ_OVERRIDE;
    NS_IMETHOD GetFrameName(nsAString& aResult) const MOZ_OVERRIDE
    {
        return MakeFrameName(NS_LITERAL_STRING("PopupSet"), aResult);
    }
  #endif
  
  protected:
    void AddPopupFrameList(nsFrameList& aPopupFrameList);
    void RemovePopupFrame(nsIFrame* aPopup);
    
    nsFrameList mPopupList;
  };
  
  #endif
  