| OLD | NEW |
| (Empty) |
| 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_BASE_MODELS_TABLE_MODEL_H_ | |
| 6 #define UI_BASE_MODELS_TABLE_MODEL_H_ | |
| 7 | |
| 8 #include <vector> | |
| 9 | |
| 10 #include "base/strings/string16.h" | |
| 11 #include "third_party/icu/source/i18n/unicode/coll.h" | |
| 12 #include "ui/base/ui_base_export.h" | |
| 13 | |
| 14 namespace gfx { | |
| 15 class ImageSkia; | |
| 16 } | |
| 17 | |
| 18 namespace ui { | |
| 19 | |
| 20 class TableModelObserver; | |
| 21 | |
| 22 // The model driving the TableView. | |
| 23 class UI_BASE_EXPORT TableModel { | |
| 24 public: | |
| 25 // See HasGroups, get GetGroupID for details as to how this is used. | |
| 26 struct Group { | |
| 27 // The title text for the group. | |
| 28 base::string16 title; | |
| 29 | |
| 30 // Unique id for the group. | |
| 31 int id; | |
| 32 }; | |
| 33 typedef std::vector<Group> Groups; | |
| 34 | |
| 35 // Number of rows in the model. | |
| 36 virtual int RowCount() = 0; | |
| 37 | |
| 38 // Returns the value at a particular location in text. | |
| 39 virtual base::string16 GetText(int row, int column_id) = 0; | |
| 40 | |
| 41 // Returns the small icon (16x16) that should be displayed in the first | |
| 42 // column before the text. This is only used when the TableView was created | |
| 43 // with the ICON_AND_TEXT table type. Returns an isNull() image if there is | |
| 44 // no image. | |
| 45 virtual gfx::ImageSkia GetIcon(int row); | |
| 46 | |
| 47 // Returns the tooltip, if any, to show for a particular row. If there are | |
| 48 // multiple columns in the row, this will only be shown when hovering over | |
| 49 // column zero. | |
| 50 virtual base::string16 GetTooltip(int row); | |
| 51 | |
| 52 // If true, this row should be indented. | |
| 53 virtual bool ShouldIndent(int row); | |
| 54 | |
| 55 // Returns true if the TableView has groups. Groups provide a way to visually | |
| 56 // delineate the rows in a table view. When groups are enabled table view | |
| 57 // shows a visual separator for each group, followed by all the rows in | |
| 58 // the group. | |
| 59 // | |
| 60 // On win2k a visual separator is not rendered for the group headers. | |
| 61 virtual bool HasGroups(); | |
| 62 | |
| 63 // Returns the groups. | |
| 64 // This is only used if HasGroups returns true. | |
| 65 virtual Groups GetGroups(); | |
| 66 | |
| 67 // Returns the group id of the specified row. | |
| 68 // This is only used if HasGroups returns true. | |
| 69 virtual int GetGroupID(int row); | |
| 70 | |
| 71 // Sets the observer for the model. The TableView should NOT take ownership | |
| 72 // of the observer. | |
| 73 virtual void SetObserver(TableModelObserver* observer) = 0; | |
| 74 | |
| 75 // Compares the values in the column with id |column_id| for the two rows. | |
| 76 // Returns a value < 0, == 0 or > 0 as to whether the first value is | |
| 77 // <, == or > the second value. | |
| 78 // | |
| 79 // This implementation does a case insensitive locale specific string | |
| 80 // comparison. | |
| 81 virtual int CompareValues(int row1, int row2, int column_id); | |
| 82 | |
| 83 // Reset the collator. | |
| 84 void ClearCollator(); | |
| 85 | |
| 86 protected: | |
| 87 virtual ~TableModel() {} | |
| 88 | |
| 89 // Returns the collator used by CompareValues. | |
| 90 icu::Collator* GetCollator(); | |
| 91 }; | |
| 92 | |
| 93 // TableColumn specifies the title, alignment and size of a particular column. | |
| 94 struct UI_BASE_EXPORT TableColumn { | |
| 95 enum Alignment { | |
| 96 LEFT, RIGHT, CENTER | |
| 97 }; | |
| 98 | |
| 99 TableColumn(); | |
| 100 TableColumn(int id, Alignment alignment, int width, float percent); | |
| 101 | |
| 102 // A unique identifier for the column. | |
| 103 int id; | |
| 104 | |
| 105 // The title for the column. | |
| 106 base::string16 title; | |
| 107 | |
| 108 // Alignment for the content. | |
| 109 Alignment alignment; | |
| 110 | |
| 111 // The size of a column may be specified in two ways: | |
| 112 // 1. A fixed width. Set the width field to a positive number and the | |
| 113 // column will be given that width, in pixels. | |
| 114 // 2. As a percentage of the available width. If width is -1, and percent is | |
| 115 // > 0, the column is given a width of | |
| 116 // available_width * percent / total_percent. | |
| 117 // 3. If the width == -1 and percent == 0, the column is autosized based on | |
| 118 // the width of the column header text. | |
| 119 // | |
| 120 // Sizing is done in four passes. Fixed width columns are given | |
| 121 // their width, percentages are applied, autosized columns are autosized, | |
| 122 // and finally percentages are applied again taking into account the widths | |
| 123 // of autosized columns. | |
| 124 int width; | |
| 125 float percent; | |
| 126 | |
| 127 // The minimum width required for all items in this column | |
| 128 // (including the header) | |
| 129 // to be visible. | |
| 130 int min_visible_width; | |
| 131 | |
| 132 // Is this column sortable? Default is false | |
| 133 bool sortable; | |
| 134 }; | |
| 135 | |
| 136 } // namespace ui | |
| 137 | |
| 138 #endif // UI_BASE_MODELS_TABLE_MODEL_H_ | |
| OLD | NEW |