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_UI_TOUCH_FRAME_TOUCH_BROWSER_FRAME_VIEW_H_
6#define CHROME_BROWSER_UI_TOUCH_FRAME_TOUCH_BROWSER_FRAME_VIEW_H_
7#pragma once
8
9#include "chrome/browser/tabs/tab_strip_model_observer.h"
10#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
11#include "content/common/notification_observer.h"
12#include "content/common/notification_registrar.h"
13#include "ui/base/animation/animation_delegate.h"
14#include "views/focus/focus_manager.h"
15
16class BrowserFrame;
17class BrowserView;
18class KeyboardContainerView;
19class NotificationDetails;
20class NotificationSource;
21
22namespace ui {
23class SlideAnimation;
24}
25
26class TouchBrowserFrameView : public OpaqueBrowserFrameView,
27                              public views::FocusChangeListener,
28                              public TabStripModelObserver,
29                              public ui::AnimationDelegate,
30                              public NotificationObserver {
31 public:
32  enum VirtualKeyboardType {
33    NONE,
34    GENERIC,
35    URL,
36  };
37
38  // Constructs a non-client view for an BrowserFrame.
39  TouchBrowserFrameView(BrowserFrame* frame, BrowserView* browser_view);
40  virtual ~TouchBrowserFrameView();
41
42  // Overridden from OpaqueBrowserFrameView
43  virtual void Layout();
44
45  // views::FocusChangeListener implementation
46  virtual void FocusWillChange(views::View* focused_before,
47                               views::View* focused_now);
48
49 protected:
50  // Overridden from OpaqueBrowserFrameView
51  virtual int GetReservedHeight() const;
52  virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
53
54 private:
55  virtual void InitVirtualKeyboard();
56  virtual void UpdateKeyboardAndLayout(bool should_show_keyboard);
57  virtual VirtualKeyboardType DecideKeyboardStateForView(views::View* view);
58
59  // Overridden from views::View
60  virtual bool HitTest(const gfx::Point& point) const OVERRIDE;
61
62  // Overrridden from TabStripModelObserver.
63  virtual void TabSelectedAt(TabContentsWrapper* old_contents,
64                             TabContentsWrapper* new_contents,
65                             int index,
66                             bool user_gesture);
67
68  // Overridden from NotificationObserver.
69  virtual void Observe(NotificationType type,
70                       const NotificationSource& source,
71                       const NotificationDetails& details);
72
73  // Overridden from ui::AnimationDelegate:
74  virtual void AnimationProgressed(const ui::Animation* animation);
75  virtual void AnimationEnded(const ui::Animation* animation);
76
77  bool keyboard_showing_;
78  bool focus_listener_added_;
79  KeyboardContainerView* keyboard_;
80  NotificationRegistrar registrar_;
81
82  scoped_ptr<ui::SlideAnimation> animation_;
83
84  DISALLOW_COPY_AND_ASSIGN(TouchBrowserFrameView);
85};
86
87#endif  // CHROME_BROWSER_UI_TOUCH_FRAME_TOUCH_BROWSER_FRAME_VIEW_H_
88