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 16 class BrowserFrame; 17 class BrowserView; 18 class KeyboardContainerView; 19 class NotificationDetails; 20 class NotificationSource; 21 22 namespace ui { 23 class SlideAnimation; 24 } 25 26 class 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