17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef UI_APP_LIST_COCOA_APPS_SEARCH_RESULTS_MODEL_BRIDGE_H_
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define UI_APP_LIST_COCOA_APPS_SEARCH_RESULTS_MODEL_BRIDGE_H_
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/mac/scoped_nsobject.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_vector.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/app_list/app_list_model.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/models/list_model_observer.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch@class NSMenu;
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)@class NSTableView;
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace app_list {
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Bridge observing the ListModel representing search results in the app list,
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// and updating the NSTableView where they are displayed.
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class AppsSearchResultsModelBridge : public ui::ListModelObserver {
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public:
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  AppsSearchResultsModelBridge(AppListModel::SearchResults* results_model,
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                               NSTableView* results_table_view);
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual ~AppsSearchResultsModelBridge();
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns the context menu for the item at |index| in the search results
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // model. A menu will be generated if it hasn't been previously requested.
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  NSMenu* MenuForItem(size_t index);
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Lightweight observer to react to icon updates on individual results.
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  class ItemObserver;
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void UpdateItemObservers();
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void ReloadDataForItems(size_t start, size_t count) const;
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Overridden from ui::ListModelObserver:
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ListItemsAdded(size_t start, size_t count) OVERRIDE;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ListItemsRemoved(size_t start, size_t count) OVERRIDE;
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ListItemMoved(size_t index, size_t target_index) OVERRIDE;
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ListItemsChanged(size_t start, size_t count) OVERRIDE;
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  AppListModel::SearchResults* results_;   // Weak. Owned by AppListModel.
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSTableView> table_view_;
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ScopedVector<ItemObserver> item_observers_;
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppsSearchResultsModelBridge);
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace app_list
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // UI_APP_LIST_COCOA_APPS_SEARCH_RESULTS_MODEL_BRIDGE_H_
53