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
3// found in the LICENSE file.
4
5#ifndef UI_APP_LIST_COCOA_APPS_GRID_VIEW_ITEM_H_
6#define UI_APP_LIST_COCOA_APPS_GRID_VIEW_ITEM_H_
7
8#import <Cocoa/Cocoa.h>
9
10#include "base/memory/scoped_ptr.h"
11#include "ui/app_list/app_list_export.h"
12#import "ui/base/cocoa/tracking_area.h"
13
14namespace app_list {
15class AppListItem;
16class ItemModelObserverBridge;
17}
18
19// AppsGridViewItem is the controller for an NSButton representing an app item
20// on an NSCollectionView controlled by an AppsGridController.
21APP_LIST_EXPORT
22@interface AppsGridViewItem : NSCollectionViewItem {
23 @private
24  scoped_ptr<app_list::ItemModelObserverBridge> observerBridge_;
25  base::scoped_nsobject<NSProgressIndicator> progressIndicator_;
26
27  // Used to highlight the background on hover.
28  ui::ScopedCrTrackingArea trackingArea_;
29}
30
31@property(readonly, nonatomic) NSProgressIndicator* progressIndicator;
32
33// Designated initializer. |tileSize| is the size of tiles in the grid.
34- (id)initWithSize:(NSSize)tileSize;
35
36// Set the represented model, updating views. Clears if |itemModel| is NULL.
37- (void)setModel:(app_list::AppListItem*)itemModel;
38
39// Model accessor, via the |observerBridge_|.
40- (app_list::AppListItem*)model;
41
42// Return the button portion of the item, showing the icon and title.
43- (NSButton*)button;
44
45// Generate and return a context menu, populated using the represented model.
46- (NSMenu*)contextMenu;
47
48// Take a snapshot of the grid cell with correct layout, then hide the button.
49// If |isRestore| is true, the snapshot includes the label and items hidden for
50// the initial snapshot are restored.
51- (NSBitmapImageRep*)dragRepresentationForRestore:(BOOL)isRestore;
52
53@end
54
55#endif  // UI_APP_LIST_COCOA_APPS_GRID_VIEW_ITEM_H_
56