Chromium Code Reviews| Index: ui/app_list/views/apps_grid_view.cc |
| diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc |
| index 491883e420fe14bb68c40c65f4d80f009da4b6e4..7b398ae9606eeba3caf12eb952b8e53ea00ea88f 100644 |
| --- a/ui/app_list/views/apps_grid_view.cc |
| +++ b/ui/app_list/views/apps_grid_view.cc |
| @@ -272,10 +272,9 @@ AppsGridView::~AppsGridView() { |
| if (drag_view_) |
| EndDrag(true); |
| - if (model_) { |
| + if (model_) |
| model_->RemoveObserver(this); |
| - model_->apps()->RemoveObserver(this); |
| - } |
| + |
| pagination_model_->RemoveObserver(this); |
| } |
| @@ -291,16 +290,12 @@ void AppsGridView::SetLayout(int icon_size, int cols, int rows_per_page) { |
| } |
| void AppsGridView::SetModel(AppListModel* model) { |
| - if (model_) { |
| + if (model_) |
| model_->RemoveObserver(this); |
| - model_->apps()->RemoveObserver(this); |
| - } |
| model_ = model; |
| - if (model_) { |
| + if (model_) |
| model_->AddObserver(this); |
| - model_->apps()->AddObserver(this); |
| - } |
| Update(); |
| } |
| @@ -634,8 +629,13 @@ void AppsGridView::Update() { |
| DCHECK(!selected_view_ && !drag_view_); |
| view_model_.Clear(); |
| - if (model_ && model_->apps()->item_count()) |
| - ListItemsAdded(0, model_->apps()->item_count()); |
| + if (model_) { |
| + for (size_t page = 0; page < model_->GetNumAppPages(); ++page) { |
| + const AppListModel::AppItems& apps = model_->GetAppItemsForPage(page); |
| + if (apps.item_count()) |
| + OnListItemsAdded(page, 0, apps.item_count()); |
| + } |
| + } |
| } |
| void AppsGridView::UpdatePaging() { |
| @@ -647,8 +647,12 @@ void AppsGridView::UpdatePaging() { |
| } |
| void AppsGridView::UpdatePulsingBlockViews() { |
| + if (model_->GetNumAppPages() == 0) |
| + return; |
| + |
| + const AppListModel::AppItems& apps = model_->GetAppItemsForPage(0); |
| const int available_slots = |
| - tiles_per_page() - model_->apps()->item_count() % tiles_per_page(); |
| + tiles_per_page() - apps.item_count() % tiles_per_page(); |
| const int desired = model_->status() == AppListModel::STATUS_SYNCING ? |
| available_slots : 0; |
| @@ -669,10 +673,11 @@ void AppsGridView::UpdatePulsingBlockViews() { |
| } |
| } |
| -views::View* AppsGridView::CreateViewForItemAtIndex(size_t index) { |
| - DCHECK_LT(index, model_->apps()->item_count()); |
| - AppListItemView* view = new AppListItemView(this, |
| - model_->apps()->GetItemAt(index)); |
| +views::View* AppsGridView::CreateViewForItemAtIndex(size_t page_idx, |
| + size_t item_idx) { |
| + AppListItemModel* item = model_->GetItemAt(page_idx, item_idx); |
| + CHECK(item); |
| + AppListItemView* view = new AppListItemView(this, item); |
| view->SetIconSize(icon_size_); |
| #if defined(USE_AURA) |
| view->SetPaintToLayer(true); |
| @@ -1100,6 +1105,7 @@ void AppsGridView::OnPageFlipTimer() { |
| void AppsGridView::MoveItemInModel(views::View* item_view, |
| const Index& target) { |
| + Index current = GetIndexOfView(item_view); |
| int current_model_index = view_model_.GetIndexOfView(item_view); |
| DCHECK_GE(current_model_index, 0); |
| @@ -1107,10 +1113,11 @@ void AppsGridView::MoveItemInModel(views::View* item_view, |
| if (target_model_index == current_model_index) |
| return; |
| - model_->apps()->RemoveObserver(this); |
| - model_->apps()->Move(current_model_index, target_model_index); |
| + model_->RemoveObserver(this); |
| + model_->MoveItem(current.page, current.slot, |
| + target.page, target.slot); |
| view_model_.Move(current_model_index, target_model_index); |
| - model_->apps()->AddObserver(this); |
| + model_->AddObserver(this); |
| if (pagination_model_->selected_page() != target.page) |
| pagination_model_->SelectPage(target.page, false); |
| @@ -1169,12 +1176,14 @@ void AppsGridView::LayoutStartPage() { |
| start_page_view_->SetBoundsRect(start_page_bounds); |
| } |
| -void AppsGridView::ListItemsAdded(size_t start, size_t count) { |
| +void AppsGridView::OnListItemsAdded(size_t page_index, |
| + size_t start, size_t count) { |
| EndDrag(true); |
| + size_t offset = page_index * AppListModel::GetNumAppsPerPage(); |
|
xiyuan
2013/10/18 23:04:08
int offset = GetModelIndexFromIndex(Index(page_ind
stevenjb
2013/10/19 01:04:43
Ah, thanks. Will do.
|
| for (size_t i = start; i < start + count; ++i) { |
| - views::View* view = CreateViewForItemAtIndex(i); |
| - view_model_.Add(view, i); |
| + views::View* view = CreateViewForItemAtIndex(page_index, i); |
| + view_model_.Add(view, offset + i); |
| AddChildView(view); |
| } |
| @@ -1184,12 +1193,14 @@ void AppsGridView::ListItemsAdded(size_t start, size_t count) { |
| SchedulePaint(); |
| } |
| -void AppsGridView::ListItemsRemoved(size_t start, size_t count) { |
| +void AppsGridView::OnListItemsRemoved(size_t page_index, |
| + size_t start, size_t count) { |
| EndDrag(true); |
| + size_t index = page_index * AppListModel::GetNumAppsPerPage() + start; |
|
xiyuan
2013/10/18 23:04:08
GetModelIndexFromIndex(Index(page_index, start));
stevenjb
2013/10/19 01:04:43
Ditto
|
| for (size_t i = 0; i < count; ++i) { |
| - views::View* view = view_model_.view_at(start); |
| - view_model_.Remove(start); |
| + views::View* view = view_model_.view_at(index); |
| + view_model_.Remove(index); |
| delete view; |
| } |
| @@ -1199,18 +1210,16 @@ void AppsGridView::ListItemsRemoved(size_t start, size_t count) { |
| SchedulePaint(); |
| } |
| -void AppsGridView::ListItemMoved(size_t index, size_t target_index) { |
| +void AppsGridView::OnListItemMoved(size_t page_index, |
| + size_t index, size_t target_index) { |
| EndDrag(true); |
| - view_model_.Move(index, target_index); |
| + size_t offset = page_index * AppListModel::GetNumAppsPerPage(); |
|
xiyuan
2013/10/18 23:04:08
use GetModelIndexFromIndex
stevenjb
2013/10/19 01:04:43
Ditto
|
| + view_model_.Move(offset + index, offset + target_index); |
| UpdatePaging(); |
| AnimateToIdealBounds(); |
| } |
| -void AppsGridView::ListItemsChanged(size_t start, size_t count) { |
| - NOTREACHED(); |
| -} |
| - |
| void AppsGridView::TotalPagesChanged() { |
| } |