summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/extensions/browser_action_button.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/cocoa/extensions/browser_action_button.h')
-rw-r--r--chrome/browser/ui/cocoa/extensions/browser_action_button.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.h b/chrome/browser/ui/cocoa/extensions/browser_action_button.h
new file mode 100644
index 0000000..a09ce7f
--- /dev/null
+++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.h
@@ -0,0 +1,98 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
+#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
+#pragma once
+
+#import <Cocoa/Cocoa.h>
+
+#import "base/scoped_nsobject.h"
+#include "base/scoped_ptr.h"
+#import "chrome/browser/ui/cocoa/gradient_button_cell.h"
+
+class Extension;
+class ExtensionAction;
+class ExtensionImageTrackerBridge;
+class Profile;
+
+// Fired when the Browser Action's state has changed. Usually the image needs to
+// be updated.
+extern NSString* const kBrowserActionButtonUpdatedNotification;
+
+// Fired on each drag event while the user is moving the button.
+extern NSString* const kBrowserActionButtonDraggingNotification;
+// Fired when the user drops the button.
+extern NSString* const kBrowserActionButtonDragEndNotification;
+
+@interface BrowserActionButton : NSButton {
+ @private
+ // Bridge to proxy Chrome notifications to the Obj-C class as well as load the
+ // extension's icon.
+ scoped_ptr<ExtensionImageTrackerBridge> imageLoadingBridge_;
+
+ // The default icon of the Button.
+ scoped_nsobject<NSImage> defaultIcon_;
+
+ // The icon specific to the active tab.
+ scoped_nsobject<NSImage> tabSpecificIcon_;
+
+ // Used to move the button and query whether a button is currently animating.
+ scoped_nsobject<NSViewAnimation> moveAnimation_;
+
+ // The extension for this button. Weak.
+ const Extension* extension_;
+
+ // The ID of the active tab.
+ int tabId_;
+
+ // Whether the button is currently being dragged.
+ BOOL isBeingDragged_;
+
+ // Drag events could be intercepted by other buttons, so to make sure that
+ // this is the only button moving if it ends up being dragged. This is set to
+ // YES upon |mouseDown:|.
+ BOOL dragCouldStart_;
+}
+
+- (id)initWithFrame:(NSRect)frame
+ extension:(const Extension*)extension
+ profile:(Profile*)profile
+ tabId:(int)tabId;
+
+- (void)setFrame:(NSRect)frameRect animate:(BOOL)animate;
+
+- (void)setDefaultIcon:(NSImage*)image;
+
+- (void)setTabSpecificIcon:(NSImage*)image;
+
+- (void)updateState;
+
+- (BOOL)isAnimating;
+
+// Returns a pointer to an autoreleased NSImage with the badge, shadow and
+// cell image drawn into it.
+- (NSImage*)compositedImage;
+
+@property(readonly, nonatomic) BOOL isBeingDragged;
+@property(readonly, nonatomic) const Extension* extension;
+@property(readwrite, nonatomic) int tabId;
+
+@end
+
+@interface BrowserActionCell : GradientButtonCell {
+ @private
+ // The current tab ID used when drawing the cell.
+ int tabId_;
+
+ // The action we're drawing the cell for. Weak.
+ ExtensionAction* extensionAction_;
+}
+
+@property(readwrite, nonatomic) int tabId;
+@property(readwrite, nonatomic) ExtensionAction* extensionAction;
+
+@end
+
+#endif // CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_