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