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 #import "ui/app_list/cocoa/apps_search_results_model_bridge.h" | 5 #import "ui/app_list/cocoa/apps_search_results_model_bridge.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
10 #include "ui/app_list/app_list_model.h" | 10 #include "ui/app_list/app_list_model.h" |
11 #import "ui/app_list/cocoa/apps_search_results_controller.h" | 11 #import "ui/app_list/cocoa/apps_search_results_controller.h" |
12 #include "ui/app_list/search_result.h" | 12 #include "ui/app_list/search_result.h" |
13 #include "ui/app_list/search_result_observer.h" | 13 #include "ui/app_list/search_result_observer.h" |
14 #import "ui/base/cocoa/menu_controller.h" | 14 #import "ui/base/cocoa/menu_controller.h" |
15 | 15 |
16 namespace app_list { | 16 namespace app_list { |
17 | 17 |
18 class AppsSearchResultsModelBridge::ItemObserver : public SearchResultObserver { | 18 class AppsSearchResultsModelBridge::ItemObserver : public SearchResultObserver { |
19 public: | 19 public: |
20 ItemObserver(AppsSearchResultsModelBridge* bridge, size_t index) | 20 ItemObserver(AppsSearchResultsModelBridge* bridge, size_t index) |
21 : bridge_(bridge), row_in_view_(index) { | 21 : bridge_(bridge), row_in_view_(index) { |
22 // Cache the result, because the results array is updated before notifying | 22 // Cache the result, because the results array is updated before notifying |
23 // observers (which happens before deleting the SearchResult). | 23 // observers (which happens before deleting the SearchResult). |
24 result_ = [bridge_->parent_ results]->GetItemAt(index); | 24 result_ = [bridge_->parent_ results]->GetItemAt(index); |
25 result_->AddObserver(this); | 25 result_->AddObserver(this); |
26 } | 26 } |
27 | 27 |
28 virtual ~ItemObserver() { | 28 ~ItemObserver() override { result_->RemoveObserver(this); } |
29 result_->RemoveObserver(this); | |
30 } | |
31 | 29 |
32 NSMenu* GetContextMenu() { | 30 NSMenu* GetContextMenu() { |
33 if (!context_menu_controller_) { | 31 if (!context_menu_controller_) { |
34 ui::MenuModel* menu_model = result_->GetContextMenuModel(); | 32 ui::MenuModel* menu_model = result_->GetContextMenuModel(); |
35 if (!menu_model) | 33 if (!menu_model) |
36 return nil; | 34 return nil; |
37 | 35 |
38 context_menu_controller_.reset( | 36 context_menu_controller_.reset( |
39 [[MenuController alloc] initWithModel:menu_model | 37 [[MenuController alloc] initWithModel:menu_model |
40 useWithPopUpButtonCell:NO]); | 38 useWithPopUpButtonCell:NO]); |
41 } | 39 } |
42 return [context_menu_controller_ menu]; | 40 return [context_menu_controller_ menu]; |
43 } | 41 } |
44 | 42 |
45 // SearchResultObserver overrides: | 43 // SearchResultObserver overrides: |
46 virtual void OnIconChanged() override { | 44 void OnIconChanged() override { |
47 bridge_->ReloadDataForItems(row_in_view_, 1); | 45 bridge_->ReloadDataForItems(row_in_view_, 1); |
48 } | 46 } |
49 virtual void OnActionsChanged() override {} | 47 void OnActionsChanged() override {} |
50 virtual void OnIsInstallingChanged() override {} | 48 void OnIsInstallingChanged() override {} |
51 virtual void OnPercentDownloadedChanged() override {} | 49 void OnPercentDownloadedChanged() override {} |
52 virtual void OnItemInstalled() override {} | 50 void OnItemInstalled() override {} |
53 virtual void OnItemUninstalled() override; | 51 void OnItemUninstalled() override; |
54 | 52 |
55 private: | 53 private: |
56 AppsSearchResultsModelBridge* bridge_; // Weak. Owns us. | 54 AppsSearchResultsModelBridge* bridge_; // Weak. Owns us. |
57 SearchResult* result_; // Weak. Owned by AppListModel::SearchResults. | 55 SearchResult* result_; // Weak. Owned by AppListModel::SearchResults. |
58 size_t row_in_view_; | 56 size_t row_in_view_; |
59 base::scoped_nsobject<MenuController> context_menu_controller_; | 57 base::scoped_nsobject<MenuController> context_menu_controller_; |
60 | 58 |
61 DISALLOW_COPY_AND_ASSIGN(ItemObserver); | 59 DISALLOW_COPY_AND_ASSIGN(ItemObserver); |
62 }; | 60 }; |
63 | 61 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 } | 126 } |
129 | 127 |
130 void AppsSearchResultsModelBridge::ListItemsChanged( | 128 void AppsSearchResultsModelBridge::ListItemsChanged( |
131 size_t start, size_t count) { | 129 size_t start, size_t count) { |
132 item_observers_.clear(); | 130 item_observers_.clear(); |
133 ReloadDataForItems(start, count); | 131 ReloadDataForItems(start, count); |
134 UpdateItemObservers(); | 132 UpdateItemObservers(); |
135 } | 133 } |
136 | 134 |
137 } // namespace app_list | 135 } // namespace app_list |
OLD | NEW |