OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ash/shelf/shelf_model.h" | 5 #include "ash/shelf/shelf_model.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "ash/public/cpp/shelf_item_delegate.h" | 9 #include "ash/public/cpp/shelf_item_delegate.h" |
10 #include "ash/shelf/shelf_model_observer.h" | 10 #include "ash/shelf/shelf_model_observer.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 // need early cleanup. | 99 // need early cleanup. |
100 id_to_item_delegate_map_.clear(); | 100 id_to_item_delegate_map_.clear(); |
101 } | 101 } |
102 | 102 |
103 int ShelfModel::Add(const ShelfItem& item) { | 103 int ShelfModel::Add(const ShelfItem& item) { |
104 return AddAt(items_.size(), item); | 104 return AddAt(items_.size(), item); |
105 } | 105 } |
106 | 106 |
107 int ShelfModel::AddAt(int index, const ShelfItem& item) { | 107 int ShelfModel::AddAt(int index, const ShelfItem& item) { |
108 // Items should have unique non-empty ids to avoid undefined model behavior. | 108 // Items should have unique non-empty ids to avoid undefined model behavior. |
109 DCHECK(!item.id.IsNull()); | 109 DCHECK(!item.id.IsNull()) << " The id is null."; |
110 DCHECK_EQ(ItemIndexByID(item.id), -1); | 110 DCHECK_EQ(ItemIndexByID(item.id), -1) << " The id is not unique: " << item.id; |
111 index = ValidateInsertionIndex(item.type, index); | 111 index = ValidateInsertionIndex(item.type, index); |
112 items_.insert(items_.begin() + index, item); | 112 items_.insert(items_.begin() + index, item); |
113 for (auto& observer : observers_) | 113 for (auto& observer : observers_) |
114 observer.ShelfItemAdded(index); | 114 observer.ShelfItemAdded(index); |
115 return index; | 115 return index; |
116 } | 116 } |
117 | 117 |
118 void ShelfModel::RemoveItemAt(int index) { | 118 void ShelfModel::RemoveItemAt(int index) { |
119 DCHECK(index >= 0 && index < item_count()); | 119 DCHECK(index >= 0 && index < item_count()); |
120 ShelfItem old_item(items_[index]); | 120 ShelfItem old_item(items_[index]); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 items_.begin(); | 203 items_.begin(); |
204 } | 204 } |
205 | 205 |
206 void ShelfModel::SetShelfItemDelegate( | 206 void ShelfModel::SetShelfItemDelegate( |
207 const ShelfID& shelf_id, | 207 const ShelfID& shelf_id, |
208 std::unique_ptr<ShelfItemDelegate> item_delegate) { | 208 std::unique_ptr<ShelfItemDelegate> item_delegate) { |
209 if (item_delegate) | 209 if (item_delegate) |
210 item_delegate->set_shelf_id(shelf_id); | 210 item_delegate->set_shelf_id(shelf_id); |
211 // This assignment replaces any ShelfItemDelegate already registered for |id|. | 211 // This assignment replaces any ShelfItemDelegate already registered for |id|. |
212 id_to_item_delegate_map_[shelf_id] = std::move(item_delegate); | 212 id_to_item_delegate_map_[shelf_id] = std::move(item_delegate); |
| 213 for (auto& observer : observers_) { |
| 214 observer.ShelfItemDelegateChanged(shelf_id, |
| 215 id_to_item_delegate_map_[shelf_id].get()); |
| 216 } |
213 } | 217 } |
214 | 218 |
215 ShelfItemDelegate* ShelfModel::GetShelfItemDelegate(const ShelfID& shelf_id) { | 219 ShelfItemDelegate* ShelfModel::GetShelfItemDelegate(const ShelfID& shelf_id) { |
216 auto it = id_to_item_delegate_map_.find(shelf_id); | 220 auto it = id_to_item_delegate_map_.find(shelf_id); |
217 if (it != id_to_item_delegate_map_.end()) | 221 if (it != id_to_item_delegate_map_.end()) |
218 return it->second.get(); | 222 return it->second.get(); |
219 return nullptr; | 223 return nullptr; |
220 } | 224 } |
221 | 225 |
222 void ShelfModel::AddObserver(ShelfModelObserver* observer) { | 226 void ShelfModel::AddObserver(ShelfModelObserver* observer) { |
(...skipping 16 matching lines...) Expand all Loading... |
239 static_cast<ShelfItems::difference_type>(index)); | 243 static_cast<ShelfItems::difference_type>(index)); |
240 index = std::min(std::upper_bound(items_.begin(), items_.end(), weight_dummy, | 244 index = std::min(std::upper_bound(items_.begin(), items_.end(), weight_dummy, |
241 CompareByWeight) - | 245 CompareByWeight) - |
242 items_.begin(), | 246 items_.begin(), |
243 static_cast<ShelfItems::difference_type>(index)); | 247 static_cast<ShelfItems::difference_type>(index)); |
244 | 248 |
245 return index; | 249 return index; |
246 } | 250 } |
247 | 251 |
248 } // namespace ash | 252 } // namespace ash |
OLD | NEW |