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

Side by Side Diff: ui/app_list/app_list_model.cc

Issue 1539583003: Convert Pass()→std::move() in ui/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « ui/app_list/app_list_item_list_unittest.cc ('k') | ui/app_list/folder_image_unittest.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "ui/app_list/app_list_model.h" 5 #include "ui/app_list/app_list_model.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility>
8 9
9 #include "ui/app_list/app_list_folder_item.h" 10 #include "ui/app_list/app_list_folder_item.h"
10 #include "ui/app_list/app_list_item.h" 11 #include "ui/app_list/app_list_item.h"
11 #include "ui/app_list/app_list_model_observer.h" 12 #include "ui/app_list/app_list_model_observer.h"
12 #include "ui/app_list/search_box_model.h" 13 #include "ui/app_list/search_box_model.h"
13 14
14 namespace app_list { 15 namespace app_list {
15 16
16 AppListModel::AppListModel() 17 AppListModel::AppListModel()
17 : top_level_item_list_(new AppListItemList), 18 : top_level_item_list_(new AppListItemList),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 AppListItem* item = top_level_item_list_->FindItem(id); 76 AppListItem* item = top_level_item_list_->FindItem(id);
76 if (item && item->GetItemType() == AppListFolderItem::kItemType) 77 if (item && item->GetItemType() == AppListFolderItem::kItemType)
77 return static_cast<AppListFolderItem*>(item); 78 return static_cast<AppListFolderItem*>(item);
78 DCHECK(!item); 79 DCHECK(!item);
79 return NULL; 80 return NULL;
80 } 81 }
81 82
82 AppListItem* AppListModel::AddItem(scoped_ptr<AppListItem> item) { 83 AppListItem* AppListModel::AddItem(scoped_ptr<AppListItem> item) {
83 DCHECK(!item->IsInFolder()); 84 DCHECK(!item->IsInFolder());
84 DCHECK(!top_level_item_list()->FindItem(item->id())); 85 DCHECK(!top_level_item_list()->FindItem(item->id()));
85 return AddItemToItemListAndNotify(item.Pass()); 86 return AddItemToItemListAndNotify(std::move(item));
86 } 87 }
87 88
88 AppListItem* AppListModel::AddItemToFolder(scoped_ptr<AppListItem> item, 89 AppListItem* AppListModel::AddItemToFolder(scoped_ptr<AppListItem> item,
89 const std::string& folder_id) { 90 const std::string& folder_id) {
90 if (folder_id.empty()) 91 if (folder_id.empty())
91 return AddItem(item.Pass()); 92 return AddItem(std::move(item));
92 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id; 93 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id;
93 CHECK_NE(folder_id, item->folder_id()); 94 CHECK_NE(folder_id, item->folder_id());
94 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType()); 95 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType());
95 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 96 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
96 if (!dest_folder) 97 if (!dest_folder)
97 return NULL; 98 return NULL;
98 DCHECK(!dest_folder->item_list()->FindItem(item->id())) 99 DCHECK(!dest_folder->item_list()->FindItem(item->id()))
99 << "Already in folder: " << dest_folder->id(); 100 << "Already in folder: " << dest_folder->id();
100 return AddItemToFolderItemAndNotify(dest_folder, item.Pass()); 101 return AddItemToFolderItemAndNotify(dest_folder, std::move(item));
101 } 102 }
102 103
103 const std::string AppListModel::MergeItems(const std::string& target_item_id, 104 const std::string AppListModel::MergeItems(const std::string& target_item_id,
104 const std::string& source_item_id) { 105 const std::string& source_item_id) {
105 if (!folders_enabled()) { 106 if (!folders_enabled()) {
106 LOG(ERROR) << "MergeItems called with folders disabled."; 107 LOG(ERROR) << "MergeItems called with folders disabled.";
107 return ""; 108 return "";
108 } 109 }
109 DVLOG(2) << "MergeItems: " << source_item_id << " -> " << target_item_id; 110 DVLOG(2) << "MergeItems: " << source_item_id << " -> " << target_item_id;
110 111
(...skipping 21 matching lines...) Expand all
132 AppListFolderItem* target_folder = 133 AppListFolderItem* target_folder =
133 static_cast<AppListFolderItem*>(target_item); 134 static_cast<AppListFolderItem*>(target_item);
134 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { 135 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) {
135 LOG(WARNING) << "MergeItems called with OEM folder as target"; 136 LOG(WARNING) << "MergeItems called with OEM folder as target";
136 return ""; 137 return "";
137 } 138 }
138 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); 139 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item);
139 source_item_ptr->set_position( 140 source_item_ptr->set_position(
140 target_folder->item_list()->CreatePositionBefore( 141 target_folder->item_list()->CreatePositionBefore(
141 syncer::StringOrdinal())); 142 syncer::StringOrdinal()));
142 AddItemToFolderItemAndNotify(target_folder, source_item_ptr.Pass()); 143 AddItemToFolderItemAndNotify(target_folder, std::move(source_item_ptr));
143 return target_folder->id(); 144 return target_folder->id();
144 } 145 }
145 146
146 // Otherwise remove the source item and target item from their current 147 // Otherwise remove the source item and target item from their current
147 // location, they will become owned by the new folder. 148 // location, they will become owned by the new folder.
148 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); 149 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item);
149 CHECK(source_item_ptr); 150 CHECK(source_item_ptr);
150 // Note: This would fail if |target_item_id == source_item_id|, except we 151 // Note: This would fail if |target_item_id == source_item_id|, except we
151 // checked that they are distinct at the top of this method. 152 // checked that they are distinct at the top of this method.
152 scoped_ptr<AppListItem> target_item_ptr = 153 scoped_ptr<AppListItem> target_item_ptr =
153 top_level_item_list_->RemoveItem(target_item_id); 154 top_level_item_list_->RemoveItem(target_item_id);
154 CHECK(target_item_ptr); 155 CHECK(target_item_ptr);
155 156
156 // Create a new folder in the same location as the target item. 157 // Create a new folder in the same location as the target item.
157 std::string new_folder_id = AppListFolderItem::GenerateId(); 158 std::string new_folder_id = AppListFolderItem::GenerateId();
158 DVLOG(2) << "Creating folder for merge: " << new_folder_id; 159 DVLOG(2) << "Creating folder for merge: " << new_folder_id;
159 scoped_ptr<AppListItem> new_folder_ptr(new AppListFolderItem( 160 scoped_ptr<AppListItem> new_folder_ptr(new AppListFolderItem(
160 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); 161 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL));
161 new_folder_ptr->set_position(target_item_ptr->position()); 162 new_folder_ptr->set_position(target_item_ptr->position());
162 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>( 163 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>(
163 AddItemToItemListAndNotify(new_folder_ptr.Pass())); 164 AddItemToItemListAndNotify(std::move(new_folder_ptr)));
164 165
165 // Add the items to the new folder. 166 // Add the items to the new folder.
166 target_item_ptr->set_position( 167 target_item_ptr->set_position(
167 new_folder->item_list()->CreatePositionBefore( 168 new_folder->item_list()->CreatePositionBefore(
168 syncer::StringOrdinal())); 169 syncer::StringOrdinal()));
169 AddItemToFolderItemAndNotify(new_folder, target_item_ptr.Pass()); 170 AddItemToFolderItemAndNotify(new_folder, std::move(target_item_ptr));
170 source_item_ptr->set_position( 171 source_item_ptr->set_position(
171 new_folder->item_list()->CreatePositionBefore( 172 new_folder->item_list()->CreatePositionBefore(
172 syncer::StringOrdinal())); 173 syncer::StringOrdinal()));
173 AddItemToFolderItemAndNotify(new_folder, source_item_ptr.Pass()); 174 AddItemToFolderItemAndNotify(new_folder, std::move(source_item_ptr));
174 175
175 return new_folder->id(); 176 return new_folder->id();
176 } 177 }
177 178
178 void AppListModel::MoveItemToFolder(AppListItem* item, 179 void AppListModel::MoveItemToFolder(AppListItem* item,
179 const std::string& folder_id) { 180 const std::string& folder_id) {
180 DVLOG(2) << "MoveItemToFolder: " << folder_id 181 DVLOG(2) << "MoveItemToFolder: " << folder_id
181 << " <- " << item->ToDebugString(); 182 << " <- " << item->ToDebugString();
182 if (item->folder_id() == folder_id) 183 if (item->folder_id() == folder_id)
183 return; 184 return;
184 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 185 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
185 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); 186 scoped_ptr<AppListItem> item_ptr = RemoveItem(item);
186 if (dest_folder) { 187 if (dest_folder) {
187 CHECK(!item->IsInFolder()); 188 CHECK(!item->IsInFolder());
188 AddItemToFolderItemAndNotify(dest_folder, item_ptr.Pass()); 189 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr));
189 } else { 190 } else {
190 AddItemToItemListAndNotifyUpdate(item_ptr.Pass()); 191 AddItemToItemListAndNotifyUpdate(std::move(item_ptr));
191 } 192 }
192 } 193 }
193 194
194 bool AppListModel::MoveItemToFolderAt(AppListItem* item, 195 bool AppListModel::MoveItemToFolderAt(AppListItem* item,
195 const std::string& folder_id, 196 const std::string& folder_id,
196 syncer::StringOrdinal position) { 197 syncer::StringOrdinal position) {
197 DVLOG(2) << "MoveItemToFolderAt: " << folder_id 198 DVLOG(2) << "MoveItemToFolderAt: " << folder_id
198 << "[" << position.ToDebugString() << "]" 199 << "[" << position.ToDebugString() << "]"
199 << " <- " << item->ToDebugString(); 200 << " <- " << item->ToDebugString();
200 if (item->folder_id() == folder_id) 201 if (item->folder_id() == folder_id)
201 return false; 202 return false;
202 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id()); 203 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id());
203 if (src_folder && 204 if (src_folder &&
204 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { 205 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) {
205 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source"; 206 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source";
206 return false; 207 return false;
207 } 208 }
208 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); 209 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id);
209 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); 210 scoped_ptr<AppListItem> item_ptr = RemoveItem(item);
210 if (dest_folder) { 211 if (dest_folder) {
211 item_ptr->set_position( 212 item_ptr->set_position(
212 dest_folder->item_list()->CreatePositionBefore(position)); 213 dest_folder->item_list()->CreatePositionBefore(position));
213 AddItemToFolderItemAndNotify(dest_folder, item_ptr.Pass()); 214 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr));
214 } else { 215 } else {
215 item_ptr->set_position( 216 item_ptr->set_position(
216 top_level_item_list_->CreatePositionBefore(position)); 217 top_level_item_list_->CreatePositionBefore(position));
217 AddItemToItemListAndNotifyUpdate(item_ptr.Pass()); 218 AddItemToItemListAndNotifyUpdate(std::move(item_ptr));
218 } 219 }
219 return true; 220 return true;
220 } 221 }
221 222
222 void AppListModel::SetItemPosition(AppListItem* item, 223 void AppListModel::SetItemPosition(AppListItem* item,
223 const syncer::StringOrdinal& new_position) { 224 const syncer::StringOrdinal& new_position) {
224 if (!item->IsInFolder()) { 225 if (!item->IsInFolder()) {
225 top_level_item_list_->SetItemPosition(item, new_position); 226 top_level_item_list_->SetItemPosition(item, new_position);
226 // Note: this will trigger OnListItemMoved which will signal observers. 227 // Note: this will trigger OnListItemMoved which will signal observers.
227 // (This is done this way because some View code still moves items within 228 // (This is done this way because some View code still moves items within
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) { 311 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) {
311 AppListItem* item = top_level_item_list_->item_at(i); 312 AppListItem* item = top_level_item_list_->item_at(i);
312 if (item->GetItemType() != AppListFolderItem::kItemType) 313 if (item->GetItemType() != AppListFolderItem::kItemType)
313 continue; 314 continue;
314 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item); 315 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item);
315 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) 316 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM)
316 continue; // Do not remove OEM folders. 317 continue; // Do not remove OEM folders.
317 while (folder->item_list()->item_count()) { 318 while (folder->item_list()->item_count()) {
318 scoped_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0); 319 scoped_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0);
319 child->set_folder_id(""); 320 child->set_folder_id("");
320 AddItemToItemListAndNotifyUpdate(child.Pass()); 321 AddItemToItemListAndNotifyUpdate(std::move(child));
321 } 322 }
322 folder_ids.push_back(folder->id()); 323 folder_ids.push_back(folder->id());
323 } 324 }
324 // Delete folders. 325 // Delete folders.
325 for (size_t i = 0; i < folder_ids.size(); ++i) 326 for (size_t i = 0; i < folder_ids.size(); ++i)
326 DeleteItem(folder_ids[i]); 327 DeleteItem(folder_ids[i]);
327 } 328 }
328 329
329 void AppListModel::SetCustomLauncherPageEnabled(bool enabled) { 330 void AppListModel::SetCustomLauncherPageEnabled(bool enabled) {
330 custom_launcher_page_enabled_ = enabled; 331 custom_launcher_page_enabled_ = enabled;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 if (!folders_enabled()) { 393 if (!folders_enabled()) {
393 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id; 394 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id;
394 return NULL; 395 return NULL;
395 } 396 }
396 397
397 DVLOG(2) << "Creating new folder: " << folder_id; 398 DVLOG(2) << "Creating new folder: " << folder_id;
398 scoped_ptr<AppListFolderItem> new_folder( 399 scoped_ptr<AppListFolderItem> new_folder(
399 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); 400 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL));
400 new_folder->set_position( 401 new_folder->set_position(
401 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal())); 402 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal()));
402 AppListItem* new_folder_item = AddItemToItemListAndNotify(new_folder.Pass()); 403 AppListItem* new_folder_item =
404 AddItemToItemListAndNotify(std::move(new_folder));
403 return static_cast<AppListFolderItem*>(new_folder_item); 405 return static_cast<AppListFolderItem*>(new_folder_item);
404 } 406 }
405 407
406 AppListItem* AppListModel::AddItemToItemListAndNotify( 408 AppListItem* AppListModel::AddItemToItemListAndNotify(
407 scoped_ptr<AppListItem> item_ptr) { 409 scoped_ptr<AppListItem> item_ptr) {
408 DCHECK(!item_ptr->IsInFolder()); 410 DCHECK(!item_ptr->IsInFolder());
409 AppListItem* item = top_level_item_list_->AddItem(item_ptr.Pass()); 411 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr));
410 FOR_EACH_OBSERVER(AppListModelObserver, 412 FOR_EACH_OBSERVER(AppListModelObserver,
411 observers_, 413 observers_,
412 OnAppListItemAdded(item)); 414 OnAppListItemAdded(item));
413 return item; 415 return item;
414 } 416 }
415 417
416 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate( 418 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate(
417 scoped_ptr<AppListItem> item_ptr) { 419 scoped_ptr<AppListItem> item_ptr) {
418 DCHECK(!item_ptr->IsInFolder()); 420 DCHECK(!item_ptr->IsInFolder());
419 AppListItem* item = top_level_item_list_->AddItem(item_ptr.Pass()); 421 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr));
420 FOR_EACH_OBSERVER(AppListModelObserver, 422 FOR_EACH_OBSERVER(AppListModelObserver,
421 observers_, 423 observers_,
422 OnAppListItemUpdated(item)); 424 OnAppListItemUpdated(item));
423 return item; 425 return item;
424 } 426 }
425 427
426 AppListItem* AppListModel::AddItemToFolderItemAndNotify( 428 AppListItem* AppListModel::AddItemToFolderItemAndNotify(
427 AppListFolderItem* folder, 429 AppListFolderItem* folder,
428 scoped_ptr<AppListItem> item_ptr) { 430 scoped_ptr<AppListItem> item_ptr) {
429 CHECK_NE(folder->id(), item_ptr->folder_id()); 431 CHECK_NE(folder->id(), item_ptr->folder_id());
430 AppListItem* item = folder->item_list()->AddItem(item_ptr.Pass()); 432 AppListItem* item = folder->item_list()->AddItem(std::move(item_ptr));
431 item->set_folder_id(folder->id()); 433 item->set_folder_id(folder->id());
432 FOR_EACH_OBSERVER(AppListModelObserver, 434 FOR_EACH_OBSERVER(AppListModelObserver,
433 observers_, 435 observers_,
434 OnAppListItemUpdated(item)); 436 OnAppListItemUpdated(item));
435 return item; 437 return item;
436 } 438 }
437 439
438 scoped_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) { 440 scoped_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) {
439 if (!item->IsInFolder()) 441 if (!item->IsInFolder())
440 return top_level_item_list_->RemoveItem(item->id()); 442 return top_level_item_list_->RemoveItem(item->id());
441 443
442 AppListFolderItem* folder = FindFolderItem(item->folder_id()); 444 AppListFolderItem* folder = FindFolderItem(item->folder_id());
443 return RemoveItemFromFolder(folder, item); 445 return RemoveItemFromFolder(folder, item);
444 } 446 }
445 447
446 scoped_ptr<AppListItem> AppListModel::RemoveItemFromFolder( 448 scoped_ptr<AppListItem> AppListModel::RemoveItemFromFolder(
447 AppListFolderItem* folder, 449 AppListFolderItem* folder,
448 AppListItem* item) { 450 AppListItem* item) {
449 std::string folder_id = folder->id(); 451 std::string folder_id = folder->id();
450 CHECK_EQ(item->folder_id(), folder_id); 452 CHECK_EQ(item->folder_id(), folder_id);
451 scoped_ptr<AppListItem> result = folder->item_list()->RemoveItem(item->id()); 453 scoped_ptr<AppListItem> result = folder->item_list()->RemoveItem(item->id());
452 result->set_folder_id(""); 454 result->set_folder_id("");
453 if (folder->item_list()->item_count() == 0) { 455 if (folder->item_list()->item_count() == 0) {
454 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString(); 456 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString();
455 DeleteItem(folder_id); 457 DeleteItem(folder_id);
456 } 458 }
457 return result.Pass(); 459 return result;
458 } 460 }
459 461
460 } // namespace app_list 462 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/app_list_item_list_unittest.cc ('k') | ui/app_list/folder_image_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698