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() { |
} |