Home | History | Annotate | Download | only in ash
      1 // Copyright 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 ASH_POPUP_MESSAGE_H_
      6 #define ASH_POPUP_MESSAGE_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "base/basictypes.h"
     10 #include "base/strings/string16.h"
     11 #include "ui/gfx/rect.h"
     12 #include "ui/views/bubble/bubble_border.h"
     13 
     14 namespace views {
     15 class BubbleDelegateView;
     16 }
     17 
     18 namespace ash {
     19 
     20 // PopupMessage shows a message to the user. Since the user is not able to
     21 // dismiss it, the calling code needs to explictly close and destroy it.
     22 class ASH_EXPORT PopupMessage {
     23  public:
     24   enum IconType {
     25     ICON_WARNING,
     26     ICON_NONE
     27   };
     28 
     29   // Creates a message pointing towards |anchor| with the requested
     30   // |arrow_orientation|. The message contains an optional |caption| which is
     31   // drawn in bold and an optional |message| together with an optional icon of
     32   // shape |message_type|. If a component in |size_override| is not 0 the value
     33   // is the used as output size. If |arrow_offset| is not 0, the number is the
     34   // arrow offset in pixels from the border.
     35   //
     36   // Here is the layout (arrow given as TOP_LEFT):
     37   //                    |--------|
     38   //                    | Anchor |
     39   //                    |--------|
     40   //       |-arrow_offset---^
     41   //       +-------------------------------------------------+
     42   //      -|                                                 |-
     43   //  icon |  [!]  Caption in bold which can be multi line   | caption_label
     44   //      -|                                                 |-
     45   //       |       Message text which can be multi line      | message_label
     46   //       |       as well.                                  |
     47   //       |                                                 |-
     48   //       +-------------------------------------------------+
     49   PopupMessage(const base::string16& caption,
     50                const base::string16& message,
     51                IconType message_type,
     52                views::View* anchor,
     53                views::BubbleBorder::Arrow arrow,
     54                const gfx::Size& size_override,
     55                int arrow_offset);
     56   // If the message was not explicitly closed before, it closes the message
     57   // without animation.
     58   virtual ~PopupMessage();
     59 
     60   // Closes the message with a fade out animation.
     61   void Close();
     62 
     63  private:
     64   class MessageBubble;
     65 
     66   void CancelHidingAnimation();
     67 
     68   MessageBubble* view_;
     69   views::Widget* widget_;
     70 
     71   // Variables of the construction time.
     72   views::View* anchor_;
     73   base::string16 caption_;
     74   base::string16 message_;
     75   IconType message_type_;
     76   views::BubbleBorder::Arrow arrow_orientation_;
     77 
     78   DISALLOW_COPY_AND_ASSIGN(PopupMessage);
     79 };
     80 
     81 }  // namespace ash
     82 
     83 #endif  // ASH_POPUP_MESSAGE_H_
     84