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

Unified Diff: ui/app_list/views/apps_grid_view.cc

Issue 27438002: Store AppItems as pages in AppListModel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
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() {
}

Powered by Google App Engine
This is Rietveld 408576698