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_NOTIFICATIONS_BALLOON_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_COCOA_NOTIFICATIONS_BALLOON_CONTROLLER_H_ 7 #pragma once 8 9 #import <Cocoa/Cocoa.h> 10 11 #import "base/mac/cocoa_protocols.h" 12 #include "base/memory/scoped_nsobject.h" 13 #include "base/memory/scoped_ptr.h" 14 15 class Balloon; 16 @class BalloonContentViewCocoa; 17 @class BalloonShelfViewCocoa; 18 class BalloonViewHost; 19 @class HoverImageButton; 20 @class MenuController; 21 class NotificationOptionsMenuModel; 22 23 // The Balloon controller creates the view elements to display a 24 // notification balloon, resize it if the HTML contents of that 25 // balloon change, and move it when the collection of balloons is 26 // modified. 27 @interface BalloonController : NSWindowController<NSWindowDelegate> { 28 @private 29 // The balloon which represents the contents of this view. Weak pointer 30 // owned by the browser's NotificationUIManager. 31 Balloon* balloon_; 32 33 // The view that contains the contents of the notification 34 IBOutlet BalloonContentViewCocoa* htmlContainer_; 35 36 // The view that contains the controls of the notification 37 IBOutlet BalloonShelfViewCocoa* shelf_; 38 39 // The close button. 40 IBOutlet NSButton* closeButton_; 41 42 // Tracking region for the close button. 43 int closeButtonTrackingTag_; 44 45 // The origin label. 46 IBOutlet NSTextField* originLabel_; 47 48 // The options menu that appears when "options" is pressed. 49 IBOutlet HoverImageButton* optionsButton_; 50 scoped_ptr<NotificationOptionsMenuModel> menuModel_; 51 scoped_nsobject<MenuController> menuController_; 52 53 // The host for the renderer of the HTML contents. 54 scoped_ptr<BalloonViewHost> htmlContents_; 55 56 // Variables to delay close requested by script while showing modal menu. 57 BOOL optionMenuIsActive_; 58 BOOL delayedClose_; 59 } 60 61 // Initialize with a balloon object containing the notification data. 62 - (id)initWithBalloon:(Balloon*)balloon; 63 64 // Callback function for the close button. 65 - (IBAction)closeButtonPressed:(id)sender; 66 67 // Callback function for the options button. 68 - (IBAction)optionsButtonPressed:(id)sender; 69 70 // Callback function for the "revoke" option in the menu. 71 - (IBAction)permissionRevoked:(id)sender; 72 73 // Closes the balloon. Can be called by the bridge or by the close 74 // button handler. 75 - (void)closeBalloon:(bool)byUser; 76 77 // Update the contents of the balloon to match the notification. 78 - (void)updateContents; 79 80 // Repositions the view to match the position and size of the balloon. 81 // Called by the bridge when the size changes. 82 - (void)repositionToBalloon; 83 84 // The current size of the view, possibly subject to an animation completing. 85 - (int)desiredTotalWidth; 86 - (int)desiredTotalHeight; 87 88 // The BalloonHost 89 - (BalloonViewHost*)getHost; 90 @end 91 92 @interface BalloonController (UnitTesting) 93 - (void)initializeHost; 94 @end 95 96 #endif // CHROME_BROWSER_UI_COCOA_NOTIFICATIONS_BALLOON_CONTROLLER_H_ 97