Home | History | Annotate | Download | only in cocoa
      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.
      4 
      5 #ifndef UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_
      6 #define UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_
      7 
      8 #import <Cocoa/Cocoa.h>
      9 
     10 #include <string>
     11 
     12 #import "base/mac/scoped_nsobject.h"
     13 #include "ui/message_center/message_center_export.h"
     14 
     15 namespace message_center {
     16 class MessageCenter;
     17 class Notification;
     18 }
     19 
     20 @class HoverImageButton;
     21 
     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.
     25 MESSAGE_CENTER_EXPORT
     26 @interface MCNotificationController : NSViewController {
     27  @protected
     28   // The message object. Weak.
     29   const message_center::Notification* notification_;
     30 
     31   // A copy of the notification ID.
     32   std::string notificationID_;
     33 
     34   // Controller of the notifications, where action messages are forwarded. Weak.
     35   message_center::MessageCenter* messageCenter_;
     36 
     37   // The button that invokes |-close:|, in the upper-right corner.
     38   base::scoped_nsobject<HoverImageButton> closeButton_;
     39 
     40   // The large icon associated with the notification, on the left side.
     41   base::scoped_nsobject<NSImageView> icon_;
     42 
     43   // The title of the message.
     44   base::scoped_nsobject<NSTextView> title_;
     45 
     46   // Body text of the message. Hidden for list notifications.
     47   base::scoped_nsobject<NSTextView> message_;
     48 
     49   // Context-giving text of the message.  Alternate font used to distinguish it.
     50   base::scoped_nsobject<NSTextView> contextMessage_;
     51 
     52   // Container for optional list view that contains multiple items.
     53   base::scoped_nsobject<NSView> listView_;
     54 
     55   // Container for optional progress bar view.
     56   base::scoped_nsobject<NSProgressIndicator> progressBarView_;
     57 
     58   // Container for optional items at the bottom of the notification.
     59   base::scoped_nsobject<NSView> bottomView_;
     60 }
     61 
     62 // Creates a new controller for a given notification.
     63 - (id)initWithNotification:(const message_center::Notification*)notification
     64     messageCenter:(message_center::MessageCenter*)messageCenter;
     65 
     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;
     69 
     70 // Action for clicking on the notification's |closeButton_|.
     71 - (void)close:(id)sender;
     72 
     73 // Accessor for the notification.
     74 - (const message_center::Notification*)notification;
     75 
     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
     78 // been deleted.
     79 - (const std::string&)notificationID;
     80 
     81 // Called when the user clicks within the notification view.
     82 - (void)notificationClicked;
     83 
     84 @end
     85 
     86 @interface MCNotificationController (TestingInterface)
     87 - (NSImageView*)iconView;
     88 @end
     89 
     90 #endif  // UI_MESSAGE_CENTER_COCOA_NOTIFICATION_CONTROLLER_H_
     91