• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
set_spread_blank_space(bool spread)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