1// Copyright 2014 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_PASSWORD_GENERATION_POPUP_VIEW_VIEWS_H_
6#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_PASSWORD_GENERATION_POPUP_VIEW_VIEWS_H_
7
8#include "chrome/browser/ui/autofill/password_generation_popup_view.h"
9#include "chrome/browser/ui/views/autofill/autofill_popup_base_view.h"
10#include "ui/gfx/font_list.h"
11#include "ui/views/controls/styled_label_listener.h"
12
13namespace views {
14class StyledLabel;
15class View;
16}
17
18namespace autofill {
19
20class PasswordGenerationPopupController;
21
22class PasswordGenerationPopupViewViews : public AutofillPopupBaseView,
23                                         public PasswordGenerationPopupView,
24                                         public views::StyledLabelListener {
25 public:
26  PasswordGenerationPopupViewViews(
27      PasswordGenerationPopupController* controller,
28      views::Widget* observing_widget);
29
30  // PasswordGenerationPopupView implementation
31  virtual void Show() OVERRIDE;
32  virtual void Hide() OVERRIDE;
33  virtual gfx::Size GetPreferredSizeOfPasswordView() OVERRIDE;
34  virtual void UpdateBoundsAndRedrawPopup() OVERRIDE;
35  virtual void PasswordSelectionUpdated() OVERRIDE;
36  virtual bool IsPointInPasswordBounds(const gfx::Point& point) OVERRIDE;
37
38 private:
39  // Helper class to do layout of the password portion of the popup.
40  class PasswordBox;
41
42  virtual ~PasswordGenerationPopupViewViews();
43
44  // Helper function to create |password_view_|.
45  void CreatePasswordView();
46
47  // views:Views implementation.
48  virtual void Layout() OVERRIDE;
49  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
50
51  // views::StyledLabelListener implementation
52  virtual void StyledLabelLinkClicked(const gfx::Range& range,
53                                      int event_flags) OVERRIDE;
54
55  // Sub views. Used to change bounds when updating. Weak references.
56  PasswordBox* password_view_;
57  views::StyledLabel* help_label_;
58
59  // Fonts to use.
60  gfx::FontList font_list_;
61
62  // Size of the divider between the password and the help text.
63  gfx::Rect divider_bounds_;
64
65  // Controller for this view. Weak reference.
66  PasswordGenerationPopupController* controller_;
67
68  DISALLOW_COPY_AND_ASSIGN(PasswordGenerationPopupViewViews);
69};
70
71}  // namespace autofill
72
73#endif  // CHROME_BROWSER_UI_VIEWS_AUTOFILL_PASSWORD_GENERATION_POPUP_VIEW_VIEWS_H_
74