// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_VIEWS_BUBBLE_INFO_BUBBLE_H_
#define UI_VIEWS_BUBBLE_INFO_BUBBLE_H_

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/strings/string16.h"
#include "ui/views/bubble/bubble_dialog_delegate.h"

namespace views {

class InfoBubbleFrame;

// Class to create and manage an information bubble for errors or tooltips.
class InfoBubble : public BubbleDialogDelegateView {
 public:
  InfoBubble(View* anchor, const base::string16& message);
  ~InfoBubble() override;

  // Shows the bubble. |widget_| will be NULL until this is called.
  void Show();

  // Hides and closes the bubble.
  void Hide();

  // BubbleDialogDelegateView:
  NonClientFrameView* CreateNonClientFrameView(Widget* widget) override;
  gfx::Size CalculatePreferredSize() const override;
  void OnWidgetDestroyed(Widget* widget) override;
  void OnWidgetBoundsChanged(Widget* widget,
                             const gfx::Rect& new_bounds) override;
  int GetDialogButtons() const override;

  View* anchor() { return anchor_; }
  const View* anchor() const { return anchor_; }

  void set_preferred_width(int preferred_width) {
    preferred_width_ = preferred_width;
  }

 private:
  // Updates the position of the bubble.
  void UpdatePosition();

  Widget* widget_;          // Weak, may be NULL.
  View* const anchor_;      // Weak.
  InfoBubbleFrame* frame_;  // Weak, owned by widget.

  // The width this bubble prefers to be. Default is 0 (no preference).
  int preferred_width_;

  DISALLOW_COPY_AND_ASSIGN(InfoBubble);
};

}  // namespace views

#endif  // UI_VIEWS_BUBBLE_INFO_BUBBLE_H_
