info_bubble.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 CHROME_BROWSER_UI_VIEWS_AUTOFILL_INFO_BUBBLE_H_
6#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_INFO_BUBBLE_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/strings/string16.h"
11#include "ui/gfx/insets.h"
12#include "ui/views/bubble/bubble_delegate.h"
13
14namespace autofill {
15
16class InfoBubbleFrame;
17
18// Class to create and manage an information bubble for errors or tooltips.
19class InfoBubble : public views::BubbleDelegateView {
20 public:
21  InfoBubble(views::View* anchor, const base::string16& message);
22  virtual ~InfoBubble();
23
24  // Shows the bubble. |widget_| will be NULL until this is called.
25  void Show();
26
27  // Hides and closes the bubble.
28  void Hide();
29
30  // Updates the position of the bubble.
31  void UpdatePosition();
32
33  // views::BubbleDelegateView:
34  virtual views::NonClientFrameView* CreateNonClientFrameView(
35      views::Widget* widget) OVERRIDE;
36  virtual gfx::Size GetPreferredSize() OVERRIDE;
37  virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE;
38  virtual void OnWidgetBoundsChanged(views::Widget* widget,
39                                     const gfx::Rect& new_bounds) OVERRIDE;
40
41  views::View* anchor() { return anchor_; }
42
43  void set_align_to_anchor_edge(bool align_to_anchor_edge) {
44    align_to_anchor_edge_ = align_to_anchor_edge;
45  }
46
47  void set_preferred_width(int preferred_width) {
48    preferred_width_ = preferred_width;
49  }
50
51  void set_show_above_anchor(bool show_above_anchor) {
52    show_above_anchor_ = show_above_anchor;
53  }
54
55 private:
56  views::Widget* widget_;  // Weak, may be NULL.
57  views::View* const anchor_;  // Weak.
58  InfoBubbleFrame* frame_;  // Weak, owned by widget.
59
60  // Whether the bubble should align its border to the anchor's edge rather than
61  // horizontally centering the arrow on |anchor_|'s midpoint. Default is false.
62  bool align_to_anchor_edge_;
63
64  // The width this bubble prefers to be. Default is 0 (no preference).
65  int preferred_width_;
66
67  // Whether the bubble should be shown above the anchor (default is below).
68  bool show_above_anchor_;
69
70  DISALLOW_COPY_AND_ASSIGN(InfoBubble);
71};
72
73}  // namespace autofill
74
75#endif  // CHROME_BROWSER_UI_VIEWS_AUTOFILL_INFO_BUBBLE_H_
76