- add sources.
[platform/framework/web/crosswalk.git] / src / ui / views / layout / box_layout.h
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_