From 985a74404307a299ec8c0c013fe44c992bedfb61 Mon Sep 17 00:00:00 2001 From: finnur Date: Thu, 11 Jun 2015 14:47:32 -0700 Subject: [PATCH] Allow TableColumns to set their default sort order. Make the columns of the Task Manager sort in a sane way. BUG=499482 Review URL: https://codereview.chromium.org/1185433002 Cr-Commit-Position: refs/heads/master@{#334043} --- chrome/browser/ui/views/task_manager_view.cc | 14 ++++++++++++++ ui/base/models/table_model.cc | 6 ++++-- ui/base/models/table_model.h | 8 +++++--- ui/views/controls/table/table_view.cc | 3 ++- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/chrome/browser/ui/views/task_manager_view.cc b/chrome/browser/ui/views/task_manager_view.cc index bdfe4f8d6c52..e8101ec9374f 100644 --- a/chrome/browser/ui/views/task_manager_view.cc +++ b/chrome/browser/ui/views/task_manager_view.cc @@ -277,18 +277,23 @@ void TaskManagerView::Init() { columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_SHARED_MEM_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_CPU_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_NET_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_PROCESS_ID_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; @@ -296,27 +301,34 @@ void TaskManagerView::Init() { columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_GDI_HANDLES_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_USER_HANDLES_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; #endif columns_.push_back(ui::TableColumn( IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn( IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; columns_.push_back(ui::TableColumn( IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN, ui::TableColumn::RIGHT, -1, 0)); @@ -325,11 +337,13 @@ void TaskManagerView::Init() { ui::TableColumn(IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; // TODO(port) http://crbug.com/120488 for non-Linux. #if defined(OS_LINUX) columns_.push_back(ui::TableColumn(IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN, ui::TableColumn::RIGHT, -1, 0)); columns_.back().sortable = true; + columns_.back().initial_sort_is_ascending = false; #endif tab_table_ = new views::TableView( diff --git a/ui/base/models/table_model.cc b/ui/base/models/table_model.cc index 4592bd7d5ba6..b8b18ad0a777 100644 --- a/ui/base/models/table_model.cc +++ b/ui/base/models/table_model.cc @@ -20,7 +20,8 @@ TableColumn::TableColumn() width(-1), percent(), min_visible_width(0), - sortable(false) { + sortable(false), + initial_sort_is_ascending(true) { } TableColumn::TableColumn(int id, Alignment alignment, int width, float percent) @@ -30,7 +31,8 @@ TableColumn::TableColumn(int id, Alignment alignment, int width, float percent) width(width), percent(percent), min_visible_width(0), - sortable(false) { + sortable(false), + initial_sort_is_ascending(true) { } // TableModel ----------------------------------------------------------------- diff --git a/ui/base/models/table_model.h b/ui/base/models/table_model.h index 68cf20283bc5..16e68a94f3a2 100644 --- a/ui/base/models/table_model.h +++ b/ui/base/models/table_model.h @@ -125,12 +125,14 @@ struct UI_BASE_EXPORT TableColumn { float percent; // The minimum width required for all items in this column - // (including the header) - // to be visible. + // (including the header) to be visible. int min_visible_width; - // Is this column sortable? Default is false + // Is this column sortable? Default is false. bool sortable; + + // Determines what sort order to apply initially. Default is true. + bool initial_sort_is_ascending; }; } // namespace ui diff --git a/ui/views/controls/table/table_view.cc b/ui/views/controls/table/table_view.cc index d75ef1a02356..8104a96f190d 100644 --- a/ui/views/controls/table/table_view.cc +++ b/ui/views/controls/table/table_view.cc @@ -235,7 +235,8 @@ void TableView::ToggleSortOrder(int visible_column_index) { if (!sort.empty() && sort[0].column_id == column_id) { sort[0].ascending = !sort[0].ascending; } else { - SortDescriptor descriptor(column_id, true); + SortDescriptor descriptor(column_id, visible_columns_[ + visible_column_index].column.initial_sort_is_ascending); sort.insert(sort.begin(), descriptor); // Only persist two sort descriptors. if (sort.size() > 2) -- 2.11.4.GIT