Home | History | Annotate | Download | only in frame
      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