browser_action_button.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2011 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 CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
6#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
7#pragma once
8
9#import <Cocoa/Cocoa.h>
10
11#import "base/memory/scoped_nsobject.h"
12#include "base/memory/scoped_ptr.h"
13#import "chrome/browser/ui/cocoa/gradient_button_cell.h"
14
15class Extension;
16class ExtensionAction;
17class ExtensionImageTrackerBridge;
18class Profile;
19
20// Fired when the Browser Action's state has changed. Usually the image needs to
21// be updated.
22extern NSString* const kBrowserActionButtonUpdatedNotification;
23
24// Fired on each drag event while the user is moving the button.
25extern NSString* const kBrowserActionButtonDraggingNotification;
26// Fired when the user drops the button.
27extern NSString* const kBrowserActionButtonDragEndNotification;
28
29@interface BrowserActionButton : NSButton {
30 @private
31  // Bridge to proxy Chrome notifications to the Obj-C class as well as load the
32  // extension's icon.
33  scoped_ptr<ExtensionImageTrackerBridge> imageLoadingBridge_;
34
35  // The default icon of the Button.
36  scoped_nsobject<NSImage> defaultIcon_;
37
38  // The icon specific to the active tab.
39  scoped_nsobject<NSImage> tabSpecificIcon_;
40
41  // Used to move the button and query whether a button is currently animating.
42  scoped_nsobject<NSViewAnimation> moveAnimation_;
43
44  // The extension for this button. Weak.
45  const Extension* extension_;
46
47  // The ID of the active tab.
48  int tabId_;
49
50  // Whether the button is currently being dragged.
51  BOOL isBeingDragged_;
52
53  // Drag events could be intercepted by other buttons, so to make sure that
54  // this is the only button moving if it ends up being dragged. This is set to
55  // YES upon |mouseDown:|.
56  BOOL dragCouldStart_;
57}
58
59- (id)initWithFrame:(NSRect)frame
60          extension:(const Extension*)extension
61            profile:(Profile*)profile
62              tabId:(int)tabId;
63
64- (void)setFrame:(NSRect)frameRect animate:(BOOL)animate;
65
66- (void)setDefaultIcon:(NSImage*)image;
67
68- (void)setTabSpecificIcon:(NSImage*)image;
69
70- (void)updateState;
71
72- (BOOL)isAnimating;
73
74// Returns a pointer to an autoreleased NSImage with the badge, shadow and
75// cell image drawn into it.
76- (NSImage*)compositedImage;
77
78@property(readonly, nonatomic) BOOL isBeingDragged;
79@property(readonly, nonatomic) const Extension* extension;
80@property(readwrite, nonatomic) int tabId;
81
82@end
83
84@interface BrowserActionCell : GradientButtonCell {
85 @private
86  // The current tab ID used when drawing the cell.
87  int tabId_;
88
89  // The action we're drawing the cell for. Weak.
90  ExtensionAction* extensionAction_;
91}
92
93@property(readwrite, nonatomic) int tabId;
94@property(readwrite, nonatomic) ExtensionAction* extensionAction;
95
96@end
97
98#endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
99