| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2013 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 CHROME_BROWSER_UI_COCOA_AUTOFILL_SIMPLE_GRID_LAYOUT_H_ |
| 6 #define CHROME_BROWSER_UI_COCOA_AUTOFILL_SIMPLE_GRID_LAYOUT_H_ |
| 7 |
| 8 #import <Cocoa/Cocoa.h> |
| 9 |
| 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/memory/scoped_vector.h" |
| 12 |
| 13 class Column; |
| 14 class ColumnSet; |
| 15 class Row; |
| 16 class ViewState; |
| 17 |
| 18 // SimpleGridLayout is a layout manager that positions child views in a grid. |
| 19 // Each row has exactly one ColumnSet, ColumnSets can be shared between rows. |
| 20 // See ui/views/layout/grid_layout.h for more details - this is a very |
| 21 // simplified version of the views class. |
| 22 // This is based on GridLayout in ui/views/layout/grid_layout.h. |
| 23 // TODO(groby): Unify both classes, create cross-platform abstraction. |
| 24 // http://crbug.com/240461 |
| 25 class SimpleGridLayout { |
| 26 public: |
| 27 SimpleGridLayout(NSView* host); |
| 28 ~SimpleGridLayout(); |
| 29 |
| 30 // Creates a new column set with the specified id and returns it. |
| 31 // The id is later used when starting a new row. |
| 32 // Layout takes ownership of the ColumnSet and will delete it when |
| 33 // it is deleted. |
| 34 ColumnSet* AddColumnSet(int id); |
| 35 |
| 36 // Returns the column set for the specified id, or NULL if one doesn't exist. |
| 37 ColumnSet* GetColumnSet(int id); |
| 38 |
| 39 // Adds a padding row. Padding rows typically don't have any views, but are |
| 40 // used to provide vertical white space between views. |
| 41 // |size| specifies the height of the row. |
| 42 void AddPaddingRow(int size); |
| 43 |
| 44 // Starts a new row with the specified column set. |
| 45 void StartRow(float vertical_resize, int column_set_id); |
| 46 |
| 47 // This is a convenience function that starts a new row, |
| 48 // and returns a new ColumnSet associated with it. All rows created by this |
| 49 // will have a height of 0 and resize_percent set to 1.0. |
| 50 ColumnSet* AddRow(); |
| 51 |
| 52 // Advances past columns. Use this when the current column should not |
| 53 // contain any views. |
| 54 void SkipColumns(int col_count); |
| 55 |
| 56 // TODO(groby): This currently *must* be called after a StartRow for the row |
| 57 // the view is in. At some point, I'd like an AddView that just populates |
| 58 // the next available slot, if possible. |
| 59 void AddView(NSView* view); |
| 60 |
| 61 // Layout all contained views according to constraints. |
| 62 void Layout(NSView* superView); |
| 63 |
| 64 void SizeRowsAndColumns(float width); |
| 65 |
| 66 // Advances next_column_ past any padding columns. |
| 67 void SkipPaddingColumns(); |
| 68 |
| 69 // Returns the column set of the last non-padding row. |
| 70 ColumnSet* GetLastValidColumnSet(); |
| 71 |
| 72 // Get the height of a given row. |
| 73 float GetRowHeight(int row); |
| 74 |
| 75 // Y-position for a given row. |
| 76 float GetRowLocation(int row_index) const; |
| 77 |
| 78 // Get the preferred height for the given width. |
| 79 float GetPreferredHeightForWidth(float with); |
| 80 |
| 81 int num_rows() const { return static_cast<int>(rows_.size()); } |
| 82 |
| 83 // These functions are mostly for testing & deviate from Views Layout class. |
| 84 int next_column() { return next_column_; } |
| 85 void AdvanceColumn() { next_column_++; } |
| 86 |
| 87 private: |
| 88 // Adds a new row, updating associated counters and positions. |
| 89 void AddRow(Row* row); |
| 90 |
| 91 // Next column in the current ColumnSet. |
| 92 int next_column_; |
| 93 |
| 94 int current_auto_id_; // Starting value for autogenerated columnset ids. |
| 95 ScopedVector<ViewState> view_states_; |
| 96 ScopedVector<ColumnSet> column_sets_; |
| 97 ScopedVector<Row> rows_; |
| 98 |
| 99 NSView* host_; |
| 100 }; |
| 101 |
| 102 // ColumnSet is used to define a set of columns. |
| 103 // You don't create a ColumnSet directly, instead use the AddRow method |
| 104 // of SimpleGridLayout. |
| 105 class ColumnSet { |
| 106 public: |
| 107 explicit ColumnSet(int id); |
| 108 ~ColumnSet(); |
| 109 |
| 110 void AddPaddingColumn(int fixed_width); |
| 111 void AddColumn(float resize_percent); |
| 112 |
| 113 void CalculateSize(float width); |
| 114 void ResetColumnXCoordinates(); |
| 115 |
| 116 // ID of this ColumnSet. |
| 117 int id() const { return id_; } |
| 118 |
| 119 int num_columns() const { return static_cast<int>(columns_.size()); } |
| 120 |
| 121 // Returns the width of the specified columns. |
| 122 float GetColumnWidth(int column); |
| 123 |
| 124 Column* GetColumn(int column_index) { |
| 125 DCHECK(column_index >=0 && column_index < num_columns()); |
| 126 return columns_[column_index]; |
| 127 } |
| 128 |
| 129 // These functions are mostly for testing & deviate from Views Layout class. |
| 130 float ColumnLocation(int column_index); |
| 131 |
| 132 private: |
| 133 float CalculateRemainingWidth(float width); |
| 134 void DistributeRemainingWidth(float width); |
| 135 |
| 136 ScopedVector<Column> columns_; |
| 137 int id_; |
| 138 }; |
| 139 |
| 140 #endif // CHROME_BROWSER_UI_COCOA_AUTOFILL_SIMPLE_GRID_LAYOUT_H_ |
| OLD | NEW |