1 // Copyright (c) 2013 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.
5 #ifndef UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_
6 #define UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_
8 #import <Cocoa/Cocoa.h>
12 #import "base/mac/scoped_nsobject.h"
13 #include "ui/message_center/message_center_export.h"
15 namespace message_center
{
20 @
class HoverImageButton
;
22 // The base view controller class for notifications. A notification at minimum
23 // has an image, title, body, and close button. This controller can be used as
24 // the content for both a popup bubble and a view in the notification tray.
26 @interface MCNotificationController
: NSViewController
{
28 // The message object. Weak.
29 const message_center::Notification
* notification_
;
31 // A copy of the notification ID.
32 std::string notificationID_
;
34 // Controller of the notifications, where action messages are forwarded. Weak.
35 message_center::MessageCenter
* messageCenter_
;
37 // The button that invokes |-close:|, in the upper-right corner.
38 base::scoped_nsobject
<HoverImageButton
> closeButton_
;
40 // The large icon associated with the notification, on the left side.
41 base::scoped_nsobject
<NSImageView
> icon_
;
43 // The title of the message.
44 base::scoped_nsobject
<NSTextView
> title_
;
46 // Body text of the message. Hidden for list notifications.
47 base::scoped_nsobject
<NSTextView
> message_
;
49 // Context-giving text of the message. Alternate font used to distinguish it.
50 base::scoped_nsobject
<NSTextView
> contextMessage_
;
52 // Container for optional list view that contains multiple items.
53 base::scoped_nsobject
<NSView
> listView_
;
55 // Container for optional progress bar view.
56 base::scoped_nsobject
<NSProgressIndicator
> progressBarView_
;
58 // Container for optional items at the bottom of the notification.
59 base::scoped_nsobject
<NSView
> bottomView_
;
62 // Creates a new controller for a given notification.
63 - (id
)initWithNotification
:(const message_center::Notification
*)notification
64 messageCenter
:(message_center::MessageCenter
*)messageCenter
;
66 // If the model object changes, this method will update the views to reflect
67 // the new model object. Returns the updated frame of the notification.
68 - (NSRect
)updateNotification
:(const message_center::Notification
*)notification
;
70 // Action for clicking on the notification's |closeButton_|.
71 - (void)close
:(id
)sender
;
73 // Accessor for the notification.
74 - (const message_center::Notification
*)notification
;
76 // Gets the notification ID. This string is owned by the NotificationController
77 // rather than the model object, so it's safe to use after the Notification has
79 - (const std::string
&)notificationID
;
81 // Called when the user clicks within the notification view.
82 - (void)notificationClicked
;
86 @interface
MCNotificationController (TestingInterface
)
87 - (NSImageView
*)iconView
;
90 #endif // UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_