Home | History | Annotate | Download | only in layout
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_VIEWS_LAYOUT_BOX_LAYOUT_H_
      6 #define UI_VIEWS_LAYOUT_BOX_LAYOUT_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "ui/gfx/insets.h"
     11 #include "ui/views/layout/layout_manager.h"
     12 
     13 namespace gfx {
     14 class Size;
     15 }
     16 
     17 namespace views {
     18 
     19 class View;
     20 
     21 // A Layout manager that arranges child views vertically or horizontally in a
     22 // side-by-side fashion with spacing around and between the child views. The
     23 // child views are always sized according to their preferred size. If the
     24 // host's bounds provide insufficient space, child views will be clamped.
     25 // Excess space will not be distributed.
     26 class VIEWS_EXPORT BoxLayout : public LayoutManager {
     27  public:
     28   enum Orientation {
     29     kHorizontal,
     30     kVertical,
     31   };
     32 
     33   // Use |inside_border_horizontal_spacing| and
     34   // |inside_border_vertical_spacing| to add additional space between the child
     35   // view area and the host view border. |between_child_spacing| controls the
     36   // space in between child views.
     37   BoxLayout(Orientation orientation,
     38             int inside_border_horizontal_spacing,
     39             int inside_border_vertical_spacing,
     40             int between_child_spacing);
     41   virtual ~BoxLayout();
     42 
     43   void set_spread_blank_space(bool spread) {
     44     spread_blank_space_ = spread;
     45   }
     46 
     47   // Overridden from views::LayoutManager:
     48   virtual void Layout(View* host) OVERRIDE;
     49   virtual gfx::Size GetPreferredSize(View* host) OVERRIDE;
     50   virtual int GetPreferredHeightForWidth(View* host, int width) OVERRIDE;
     51 
     52  private:
     53   // The preferred size for the dialog given the width of the child area.
     54   gfx::Size GetPreferredSizeForChildWidth(View* host, int child_area_width);
     55 
     56   // The amount of space the layout requires in addition to any space for the
     57   // child views.
     58   gfx::Size NonChildSize(View* host);
     59 
     60   const Orientation orientation_;
     61 
     62   // Spacing between child views and host view border.
     63   gfx::Insets inside_border_insets_;
     64 
     65   // Spacing to put in between child views.
     66   const int between_child_spacing_;
     67 
     68   // Whether the available extra space should be distributed among the child
     69   // views.
     70   bool spread_blank_space_;
     71 
     72   DISALLOW_IMPLICIT_CONSTRUCTORS(BoxLayout);
     73 };
     74 
     75 } // namespace views
     76 
     77 #endif  // UI_VIEWS_LAYOUT_BOX_LAYOUT_H_
     78