text: /*
   * NineGridLayout
   */
  
  #ifndef DUI_NINEGRIDLAYOUT_H_INCLUDED
  #define DUI_NINEGRIDLAYOUT_H_INCLUDED
  
  #pragma once
  
  namespace DirectUI
  {
  
  // BorderLayout positions
  #define NGLP_TopLeft     0
  #define NGLP_Top         1
  #define NGLP_TopRight    2
  #define NGLP_Left        3
  #define NGLP_Client      4
  #define NGLP_Right       5
  #define NGLP_BottomLeft  6
  #define NGLP_Bottom      7
  #define NGLP_BottomRight 8
  
  ////////////////////////////////////////////////////////
  // NineGridLayout
  
  class NineGridLayout : public Layout
  {
  public:
      static HRESULT Create(int dNumParams, int* pParams, OUT Value** ppValue);  // For parser
      static HRESULT Create(OUT Layout** ppLayout);
  
      // Layout callbacks
      virtual void DoLayout(Element* pec, int dWidth, int dHeight);
      virtual SIZE UpdateDesiredSize(Element* pec, int dConstW, int dConstH, Surface* psrf);
      virtual void OnAdd(Element* pec, Element** ppeAdd, UINT cCount);
      virtual void OnRemove(Element* pec, Element** ppeRemove, UINT cCount);
      virtual void OnLayoutPosChanged(Element* pec, Element* peChanged, int dOldLP, int dNewLP);
      virtual Element* GetAdjacent(Element* pec, Element* peFrom, int iNavDir, NavReference const* pnr, bool bKeyableOnly);
  
      NineGridLayout() { };
      void Initialize();   
      virtual ~NineGridLayout() { };
  
  private:
      enum
      {
      };
  
      enum ESlot
      {
          Margin1  = 0,
          Left     = 1,
          Top      = 1,
          Margin2  = 2,
          Center   = 3,
          Margin3  = 4,
          Right    = 5,
          Bottom   = 5,
          Margin4  = 6,
          NumSlots = 7
      };
  
      enum EDim
      {
          X       = 0,
          Y       = 1,
          NumDims = 2
      };
  
      enum EConst
      {
          NumCells    = 9,
          CellsPerRow = 3
      };
  
  
      Element* _peTiles[NumCells];
      SIZE _sizeDesired;
      int _length[NumDims][NumSlots];
  
      void _UpdateTileList(int iTile, Element* pe);
  };
  
  } // namespace DirectUI
  
  #endif // DUI_NINEGRIDLAYOUT_H_INCLUDED
  