message_bubble.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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_CHROMEOS_LOGIN_MESSAGE_BUBBLE_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_MESSAGE_BUBBLE_H_
7#pragma once
8
9#include "chrome/browser/ui/views/bubble/bubble.h"
10#include "views/controls/button/button.h"
11#include "views/controls/link.h"
12#include "views/view.h"
13#include "views/widget/widget_gtk.h"
14
15class SkBitmap;
16
17namespace views {
18class ImageButton;
19class ImageView;
20class Label;
21}
22
23namespace chromeos {
24
25class MessageBubbleDelegate : public BubbleDelegate {
26 public:
27  // Called when the user clicked on help link.
28  virtual void OnHelpLinkActivated() = 0;
29};
30
31// MessageBubble is used to show error and info messages on OOBE screens.
32class MessageBubble : public Bubble,
33                      public views::ButtonListener,
34                      public views::LinkController {
35 public:
36  // Create and show bubble. position_relative_to must be in screen coordinates.
37  static MessageBubble* Show(views::Widget* parent,
38                             const gfx::Rect& position_relative_to,
39                             BubbleBorder::ArrowLocation arrow_location,
40                             SkBitmap* image,
41                             const std::wstring& text,
42                             const std::wstring& help,
43                             MessageBubbleDelegate* delegate);
44
45  // Create and show bubble which does not grab pointer.  This creates
46  // a TYPE_CHILD WidgetGtk and |position_relative_to| must be in parent's
47  // coordinates.
48  static MessageBubble* ShowNoGrab(views::Widget* parent,
49                                   const gfx::Rect& position_relative_to,
50                                   BubbleBorder::ArrowLocation arrow_location,
51                                   SkBitmap* image,
52                                   const std::wstring& text,
53                                   const std::wstring& help,
54                                   MessageBubbleDelegate* delegate);
55
56  // Overridden from WidgetGtk.
57  virtual void Close() OVERRIDE;
58
59  virtual gboolean OnButtonPress(GtkWidget* widget, GdkEventButton* event) {
60    WidgetGtk::OnButtonPress(widget, event);
61    // Never propagate event to parent.
62    return true;
63  }
64
65 protected:
66  // Overridden from views::ButtonListener:
67  virtual void ButtonPressed(views::Button* sender,
68                             const views::Event& event);
69
70  // Overridden from views::LinkController:
71  virtual void LinkActivated(views::Link* source, int event_flags);
72
73  // Overridden from WidgetGtk.
74  virtual void IsActiveChanged();
75  virtual void SetMouseCapture();
76
77 private:
78  MessageBubble(views::WidgetGtk::Type type,
79                views::Widget* parent,
80                SkBitmap* image,
81                const std::wstring& text,
82                const std::wstring& help,
83                bool grab_enabled,
84                MessageBubbleDelegate* delegate);
85
86  views::Widget* parent_;
87  views::ImageView* icon_;
88  views::Label* text_;
89  views::ImageButton* close_button_;
90  views::Link* help_link_;
91  MessageBubbleDelegate* message_delegate_;
92  bool grab_enabled_;
93
94  DISALLOW_COPY_AND_ASSIGN(MessageBubble);
95};
96
97}  // namespace chromeos
98
99#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_MESSAGE_BUBBLE_H_
100