• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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