- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / autofill / autofill_popup_view_views.h
1 // Copyright (c) 2012 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_AUTOFILL_POPUP_VIEW_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_POPUP_VIEW_VIEWS_H_
7
8 #include "chrome/browser/ui/autofill/autofill_popup_view.h"
9 #include "ui/views/widget/widget_delegate.h"
10 #include "ui/views/widget/widget_observer.h"
11
12 class AutofillPopupController;
13
14 namespace content {
15 class WebContents;
16 }
17
18 namespace autofill {
19
20 // Views toolkit implementation for AutofillPopupView.
21 class AutofillPopupViewViews : public AutofillPopupView,
22                                public views::WidgetDelegateView,
23                                public views::WidgetObserver {
24  public:
25   // The observing widget should be the top level widget for the native
26   // view, which we need to listen to for several signals that indicate the
27   // popup should be closed.
28   AutofillPopupViewViews(AutofillPopupController* controller,
29                          views::Widget* observing_widget);
30
31  private:
32   virtual ~AutofillPopupViewViews();
33
34   // AutofillPopupView implementation.
35   virtual void Show() OVERRIDE;
36   virtual void Hide() OVERRIDE;
37   virtual void InvalidateRow(size_t row) OVERRIDE;
38   virtual void UpdateBoundsAndRedrawPopup() OVERRIDE;
39
40   // views:Views implementation.
41   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
42   virtual void OnMouseCaptureLost() OVERRIDE;
43   virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
44   virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
45   virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE;
46   virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
47   virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
48
49   // views::WidgetObserver implementation.
50   virtual void OnWidgetBoundsChanged(views::Widget* widget,
51                                      const gfx::Rect& new_bounds) OVERRIDE;
52
53   // Hide the popup (Since either Hide or ~AutofillPopupViewViews can need to
54   // hide the popup, the actually hiding code must be placed here).
55   void HideInternal();
56
57   // Draw the given autofill entry in |entry_rect|.
58   void DrawAutofillEntry(gfx::Canvas* canvas,
59                          int index,
60                          const gfx::Rect& entry_rect);
61
62   AutofillPopupController* controller_;  // Weak reference.
63
64   // The widget that |this| observes. Weak reference.
65   views::Widget* observing_widget_;
66
67   DISALLOW_COPY_AND_ASSIGN(AutofillPopupViewViews);
68 };
69
70 }  // namespace autofill
71
72 #endif  // CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_POPUP_VIEW_VIEWS_H_