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 13namespace gfx { 14class Size; 15} 16 17namespace views { 18 19class 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. 26class 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