Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: views/controls/table/table_view.h

Issue 7790009: views: Fix a couple of other trivial TODOs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/controls/table/native_table_wrapper.h ('k') | views/controls/table/table_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_ 5 #ifndef VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
6 #define VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_ 6 #define VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
7 #pragma once 7 #pragma once
8 8
9 #include "build/build_config.h"
10
11 #if defined(OS_WIN)
12 #include <windows.h>
13 typedef struct tagNMLVCUSTOMDRAW NMLVCUSTOMDRAW;
14 #endif // defined(OS_WIN)
15
16 #include <map> 9 #include <map>
17 #include <vector> 10 #include <vector>
18 11
19 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
13 #include "build/build_config.h"
20 #include "third_party/skia/include/core/SkColor.h" 14 #include "third_party/skia/include/core/SkColor.h"
21 #include "ui/base/keycodes/keyboard_codes.h" 15 #include "ui/base/keycodes/keyboard_codes.h"
22 #include "ui/base/models/table_model_observer.h" 16 #include "ui/base/models/table_model_observer.h"
23 #include "views/views_export.h" 17 #include "views/views_export.h"
24 18
25 #if defined(OS_WIN) 19 #if defined(OS_WIN)
20 #include <windows.h>
21
26 // TODO(port): remove the ifdef when native_control.h is ported. 22 // TODO(port): remove the ifdef when native_control.h is ported.
27 #include "views/controls/native_control.h" 23 #include "views/controls/native_control.h"
24
25 typedef struct tagNMLVCUSTOMDRAW NMLVCUSTOMDRAW;
28 #endif // defined(OS_WIN) 26 #endif // defined(OS_WIN)
29 27
30 class SkBitmap; 28 class SkBitmap;
31 29
30 namespace gfx {
31 class Font;
32 }
33
32 namespace ui { 34 namespace ui {
33 struct TableColumn; 35 struct TableColumn;
34 class TableModel; 36 class TableModel;
35 } 37 }
36 using ui::TableColumn;
37 using ui::TableModel;
38 using ui::TableModelObserver; // TODO(beng): remove these.
39
40 namespace gfx {
41 class Font;
42 }
43 38
44 // A TableView is a view that displays multiple rows with any number of columns. 39 // A TableView is a view that displays multiple rows with any number of columns.
45 // TableView is driven by a TableModel. The model returns the contents 40 // TableView is driven by a TableModel. The model returns the contents
46 // to display. TableModel also has an Observer which is used to notify 41 // to display. TableModel also has an Observer which is used to notify
47 // TableView of changes to the model so that the display may be updated 42 // TableView of changes to the model so that the display may be updated
48 // appropriately. 43 // appropriately.
49 // 44 //
50 // TableView itself has an observer that is notified when the selection 45 // TableView itself has an observer that is notified when the selection
51 // changes. 46 // changes.
52 // 47 //
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 int view_index_; 92 int view_index_;
98 93
99 // The index in terms of the model. This is returned from the * operator. This 94 // The index in terms of the model. This is returned from the * operator. This
100 // is cached to avoid dependencies on the view_to_model mapping. 95 // is cached to avoid dependencies on the view_to_model mapping.
101 int model_index_; 96 int model_index_;
102 }; 97 };
103 98
104 #if defined(OS_WIN) 99 #if defined(OS_WIN)
105 // TODO(port): Port TableView. 100 // TODO(port): Port TableView.
106 class VIEWS_EXPORT TableView : public NativeControl, 101 class VIEWS_EXPORT TableView : public NativeControl,
107 public TableModelObserver { 102 public ui::TableModelObserver {
108 public: 103 public:
109 typedef TableSelectionIterator iterator; 104 typedef TableSelectionIterator iterator;
110 105
111 // A helper struct for GetCellColors. Set |color_is_set| to true if color is 106 // A helper struct for GetCellColors. Set |color_is_set| to true if color is
112 // set. See OnCustomDraw for more details on why we need this. 107 // set. See OnCustomDraw for more details on why we need this.
113 struct ItemColor { 108 struct ItemColor {
114 bool color_is_set; 109 bool color_is_set;
115 SkColor color; 110 SkColor color;
116 }; 111 };
117 112
(...skipping 20 matching lines...) Expand all
138 // false, columns are not resized when the table is resized. An extra empty 133 // false, columns are not resized when the table is resized. An extra empty
139 // column at the right fills the remaining space. 134 // column at the right fills the remaining space.
140 // When resizable_columns is true, users can resize columns by dragging the 135 // When resizable_columns is true, users can resize columns by dragging the
141 // separator on the column header. NOTE: Right now this is always true. The 136 // separator on the column header. NOTE: Right now this is always true. The
142 // code to set it false is still in place to be a base for future, better 137 // code to set it false is still in place to be a base for future, better
143 // resizing behavior (see http://b/issue?id=874646 ), but no one uses or 138 // resizing behavior (see http://b/issue?id=874646 ), but no one uses or
144 // tests the case where this flag is false. 139 // tests the case where this flag is false.
145 // Note that setting both resizable_columns and autosize_columns to false is 140 // Note that setting both resizable_columns and autosize_columns to false is
146 // probably not a good idea, as there is no way for the user to increase a 141 // probably not a good idea, as there is no way for the user to increase a
147 // column's size in that case. 142 // column's size in that case.
148 TableView(TableModel* model, const std::vector<TableColumn>& columns, 143 TableView(ui::TableModel* model, const std::vector<ui::TableColumn>& columns,
149 TableTypes table_type, bool single_selection, 144 TableTypes table_type, bool single_selection,
150 bool resizable_columns, bool autosize_columns); 145 bool resizable_columns, bool autosize_columns);
151 virtual ~TableView(); 146 virtual ~TableView();
152 147
153 // Assigns a new model to the table view, detaching the old one if present. 148 // Assigns a new model to the table view, detaching the old one if present.
154 // If |model| is NULL, the table view cannot be used after this call. This 149 // If |model| is NULL, the table view cannot be used after this call. This
155 // should be called in the containing view's destructor to avoid destruction 150 // should be called in the containing view's destructor to avoid destruction
156 // issues when the model needs to be deleted before the table. 151 // issues when the model needs to be deleted before the table.
157 void SetModel(TableModel* model); 152 void SetModel(ui::TableModel* model);
158 TableModel* model() const { return model_; } 153 ui::TableModel* model() const { return model_; }
159 154
160 // Resorts the contents. 155 // Resorts the contents.
161 void SetSortDescriptors(const SortDescriptors& sort_descriptors); 156 void SetSortDescriptors(const SortDescriptors& sort_descriptors);
162 157
163 // Current sort. 158 // Current sort.
164 const SortDescriptors& sort_descriptors() const { return sort_descriptors_; } 159 const SortDescriptors& sort_descriptors() const { return sort_descriptors_; }
165 160
166 // Returns the number of rows in the TableView. 161 // Returns the number of rows in the TableView.
167 int RowCount() const; 162 int RowCount() const;
168 163
(...skipping 21 matching lines...) Expand all
190 bool ItemHasTheFocus(int model_row); 185 bool ItemHasTheFocus(int model_row);
191 186
192 // Returns an iterator over the selection. The iterator proceeds from the 187 // Returns an iterator over the selection. The iterator proceeds from the
193 // last index to the first. 188 // last index to the first.
194 // 189 //
195 // NOTE: the iterator iterates over the visual order (but returns coordinates 190 // NOTE: the iterator iterates over the visual order (but returns coordinates
196 // in terms of the model). 191 // in terms of the model).
197 iterator SelectionBegin(); 192 iterator SelectionBegin();
198 iterator SelectionEnd(); 193 iterator SelectionEnd();
199 194
200 // TableModelObserver methods. 195 // ui::TableModelObserver methods.
201 virtual void OnModelChanged(); 196 virtual void OnModelChanged();
202 virtual void OnItemsChanged(int start, int length); 197 virtual void OnItemsChanged(int start, int length);
203 virtual void OnItemsAdded(int start, int length); 198 virtual void OnItemsAdded(int start, int length);
204 virtual void OnItemsRemoved(int start, int length); 199 virtual void OnItemsRemoved(int start, int length);
205 200
206 void SetObserver(TableViewObserver* observer) { 201 void SetObserver(TableViewObserver* observer) {
207 table_view_observer_ = observer; 202 table_view_observer_ = observer;
208 } 203 }
209 TableViewObserver* observer() const { return table_view_observer_; } 204 TableViewObserver* observer() const { return table_view_observer_; }
210 205
211 // Replaces the set of known columns without changing the current visible 206 // Replaces the set of known columns without changing the current visible
212 // columns. 207 // columns.
213 void SetColumns(const std::vector<TableColumn>& columns); 208 void SetColumns(const std::vector<ui::TableColumn>& columns);
214 void AddColumn(const TableColumn& col); 209 void AddColumn(const ui::TableColumn& col);
215 bool HasColumn(int id); 210 bool HasColumn(int id);
216 211
217 // Sets which columns (by id) are displayed. All transient size and position 212 // Sets which columns (by id) are displayed. All transient size and position
218 // information is lost. 213 // information is lost.
219 void SetVisibleColumns(const std::vector<int>& columns); 214 void SetVisibleColumns(const std::vector<int>& columns);
220 void SetColumnVisibility(int id, bool is_visible); 215 void SetColumnVisibility(int id, bool is_visible);
221 bool IsColumnVisible(int id) const; 216 bool IsColumnVisible(int id) const;
222 217
223 // Resets the size of the columns based on the sizes passed to the 218 // Resets the size of the columns based on the sizes passed to the
224 // constructor. Your normally needn't invoked this, it's done for you the 219 // constructor. Your normally needn't invoked this, it's done for you the
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 // Method invoked by ListView when sorting back to natural state. Returns 362 // Method invoked by ListView when sorting back to natural state. Returns
368 // model_index_1_p - model_index_2_p. 363 // model_index_1_p - model_index_2_p.
369 static int CALLBACK NaturalSortFunc(LPARAM model_index_1_p, 364 static int CALLBACK NaturalSortFunc(LPARAM model_index_1_p,
370 LPARAM model_index_2_p, 365 LPARAM model_index_2_p,
371 LPARAM table_view_param); 366 LPARAM table_view_param);
372 367
373 // Resets the sort image displayed for the specified column. 368 // Resets the sort image displayed for the specified column.
374 void ResetColumnSortImage(int column_id, SortDirection direction); 369 void ResetColumnSortImage(int column_id, SortDirection direction);
375 370
376 // Adds a new column. 371 // Adds a new column.
377 void InsertColumn(const TableColumn& tc, int index); 372 void InsertColumn(const ui::TableColumn& tc, int index);
378 373
379 // Update headers and internal state after columns have changed 374 // Update headers and internal state after columns have changed
380 void OnColumnsChanged(); 375 void OnColumnsChanged();
381 376
382 // Updates the ListView with values from the model. See UpdateListViewCache0 377 // Updates the ListView with values from the model. See UpdateListViewCache0
383 // for a complete description. 378 // for a complete description.
384 // This turns off redrawing, and invokes UpdateListViewCache0 to do the 379 // This turns off redrawing, and invokes UpdateListViewCache0 to do the
385 // actual updating. 380 // actual updating.
386 void UpdateListViewCache(int start, int length, bool add); 381 void UpdateListViewCache(int start, int length, bool add);
387 382
388 // Updates ListView with values from the model. 383 // Updates ListView with values from the model.
389 // If add is true, this adds length items starting at index start. 384 // If add is true, this adds length items starting at index start.
390 // If add is not true, the items are not added, the but the values in the 385 // If add is not true, the items are not added, the but the values in the
391 // range start - [start + length] are updated from the model. 386 // range start - [start + length] are updated from the model.
392 void UpdateListViewCache0(int start, int length, bool add); 387 void UpdateListViewCache0(int start, int length, bool add);
393 388
394 // Returns the index of the selected item before |view_index|, or -1 if 389 // Returns the index of the selected item before |view_index|, or -1 if
395 // |view_index| is the first selected item. 390 // |view_index| is the first selected item.
396 // 391 //
397 // WARNING: this returns coordinates in terms of the view, NOT the model. 392 // WARNING: this returns coordinates in terms of the view, NOT the model.
398 int PreviousSelectedViewIndex(int view_index); 393 int PreviousSelectedViewIndex(int view_index);
399 394
400 // Returns the last selected view index in the table view, or -1 if the table 395 // Returns the last selected view index in the table view, or -1 if the table
401 // is empty, or nothing is selected. 396 // is empty, or nothing is selected.
402 // 397 //
403 // WARNING: this returns coordinates in terms of the view, NOT the model. 398 // WARNING: this returns coordinates in terms of the view, NOT the model.
404 int LastSelectedViewIndex(); 399 int LastSelectedViewIndex();
405 400
406 // The TableColumn visible at position pos. 401 // The TableColumn visible at position pos.
407 const TableColumn& GetColumnAtPosition(int pos); 402 const ui::TableColumn& GetColumnAtPosition(int pos);
408 403
409 // Window procedure of the list view class. We subclass the list view to 404 // Window procedure of the list view class. We subclass the list view to
410 // ignore WM_ERASEBKGND, which gives smoother painting during resizing. 405 // ignore WM_ERASEBKGND, which gives smoother painting during resizing.
411 static LRESULT CALLBACK TableWndProc(HWND window, 406 static LRESULT CALLBACK TableWndProc(HWND window,
412 UINT message, 407 UINT message,
413 WPARAM w_param, 408 WPARAM w_param,
414 LPARAM l_param); 409 LPARAM l_param);
415 410
416 // Window procedure of the header class. We subclass the header of the table 411 // Window procedure of the header class. We subclass the header of the table
417 // to disable resizing of columns. 412 // to disable resizing of columns.
418 static LRESULT CALLBACK TableHeaderWndProc(HWND window, UINT message, 413 static LRESULT CALLBACK TableHeaderWndProc(HWND window, UINT message,
419 WPARAM w_param, LPARAM l_param); 414 WPARAM w_param, LPARAM l_param);
420 415
421 // Updates content_offset_ from the position of the header. 416 // Updates content_offset_ from the position of the header.
422 void UpdateContentOffset(); 417 void UpdateContentOffset();
423 418
424 // Reloads the groups from the model if there is one and it has groups. 419 // Reloads the groups from the model if there is one and it has groups.
425 void UpdateGroups(); 420 void UpdateGroups();
426 421
427 // Returns the bounds of the alt text. 422 // Returns the bounds of the alt text.
428 gfx::Rect GetAltTextBounds(); 423 gfx::Rect GetAltTextBounds();
429 424
430 // Returns the font used for alt text. 425 // Returns the font used for alt text.
431 gfx::Font GetAltTextFont(); 426 gfx::Font GetAltTextFont();
432 427
433 // Overriden in order to update the column sizes, which can only be sized 428 // Overriden in order to update the column sizes, which can only be sized
434 // accurately when the native control is available. 429 // accurately when the native control is available.
435 virtual void VisibilityChanged(View* starting_from, bool is_visible); 430 virtual void VisibilityChanged(View* starting_from, bool is_visible);
436 431
437 TableModel* model_; 432 ui::TableModel* model_;
438 TableTypes table_type_; 433 TableTypes table_type_;
439 TableViewObserver* table_view_observer_; 434 TableViewObserver* table_view_observer_;
440 435
441 // An ordered list of id's into all_columns_ representing current visible 436 // An ordered list of id's into |all_columns_| representing current visible
442 // columns. 437 // columns.
443 std::vector<int> visible_columns_; 438 std::vector<int> visible_columns_;
444 439
445 // Mapping of an int id to a TableColumn representing all possible columns. 440 // Mapping of an int id to a TableColumn representing all possible columns.
446 std::map<int, TableColumn> all_columns_; 441 std::map<int, ui::TableColumn> all_columns_;
447 442
448 // Cached value of columns_.size() 443 // Cached value of columns_.size()
449 int column_count_; 444 int column_count_;
450 445
451 // Selection mode. 446 // Selection mode.
452 bool single_selection_; 447 bool single_selection_;
453 448
454 // If true, any events that would normally be propagated to the observer 449 // If true, any events that would normally be propagated to the observer
455 // are ignored. For example, if this is true and the selection changes in 450 // are ignored. For example, if this is true and the selection changes in
456 // the listview, the observer is not notified. 451 // the listview, the observer is not notified.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 495
501 string16 alt_text_; 496 string16 alt_text_;
502 497
503 DISALLOW_COPY_AND_ASSIGN(TableView); 498 DISALLOW_COPY_AND_ASSIGN(TableView);
504 }; 499 };
505 #endif // defined(OS_WIN) 500 #endif // defined(OS_WIN)
506 501
507 } // namespace views 502 } // namespace views
508 503
509 #endif // VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_ 504 #endif // VIEWS_CONTROLS_TABLE_TABLE_VIEW_H_
OLDNEW
« no previous file with comments | « views/controls/table/native_table_wrapper.h ('k') | views/controls/table/table_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698