Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 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 
      8 #import <Cocoa/Cocoa.h>
      9 
     10 #import "base/mac/scoped_nsobject.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #import "chrome/browser/ui/cocoa/image_button_cell.h"
     13 
     14 class Browser;
     15 class ExtensionAction;
     16 @class ExtensionActionContextMenuController;
     17 class ExtensionActionIconFactoryBridge;
     18 
     19 namespace extensions {
     20 class Extension;
     21 }
     22 
     23 // Fired on each drag event while the user is moving the button.
     24 extern NSString* const kBrowserActionButtonDraggingNotification;
     25 // Fired when the user drops the button.
     26 extern NSString* const kBrowserActionButtonDragEndNotification;
     27 
     28 @interface BrowserActionButton : NSButton<NSMenuDelegate> {
     29  @private
     30   // Bridge to proxy Chrome notifications to the Obj-C class as well as load the
     31   // extension's icon.
     32   scoped_ptr<ExtensionActionIconFactoryBridge> iconFactoryBridge_;
     33 
     34   // Used to move the button and query whether a button is currently animating.
     35   base::scoped_nsobject<NSViewAnimation> moveAnimation_;
     36 
     37   // The extension for this button. Weak.
     38   const extensions::Extension* extension_;
     39 
     40   // The ID of the active tab.
     41   int tabId_;
     42 
     43   // Whether the button is currently being dragged.
     44   BOOL isBeingDragged_;
     45 
     46   // Drag events could be intercepted by other buttons, so to make sure that
     47   // this is the only button moving if it ends up being dragged. This is set to
     48   // YES upon |mouseDown:|.
     49   BOOL dragCouldStart_;
     50 
     51   // The point where the mouse down event occurred. Used to prevent a drag from
     52   // starting until it moves at least kMinimumDragDistance.
     53   NSPoint dragStartPoint_;
     54 
     55   base::scoped_nsobject<
     56       ExtensionActionContextMenuController> contextMenuController_;
     57 }
     58 
     59 - (id)initWithFrame:(NSRect)frame
     60           extension:(const extensions::Extension*)extension
     61             browser:(Browser*)browser
     62               tabId:(int)tabId;
     63 
     64 - (void)setFrame:(NSRect)frameRect animate:(BOOL)animate;
     65 
     66 - (void)updateState;
     67 
     68 - (BOOL)isAnimating;
     69 
     70 // Returns a pointer to an autoreleased NSImage with the badge, shadow and
     71 // cell image drawn into it.
     72 - (NSImage*)compositedImage;
     73 
     74 @property(readonly, nonatomic) BOOL isBeingDragged;
     75 @property(readonly, nonatomic) const extensions::Extension* extension;
     76 @property(readwrite, nonatomic) int tabId;
     77 
     78 @end
     79 
     80 @interface BrowserActionCell : ImageButtonCell {
     81  @private
     82   // The current tab ID used when drawing the cell.
     83   int tabId_;
     84 
     85   // The action we're drawing the cell for. Weak.
     86   ExtensionAction* extensionAction_;
     87 }
     88 
     89 @property(readwrite, nonatomic) int tabId;
     90 @property(readwrite, nonatomic) ExtensionAction* extensionAction;
     91 
     92 @end
     93 
     94 #endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTION_BUTTON_H_
     95