diff options
Diffstat (limited to 'chrome/browser/views/dropdown_bar_host.h')
-rw-r--r-- | chrome/browser/views/dropdown_bar_host.h | 181 |
1 files changed, 3 insertions, 178 deletions
diff --git a/chrome/browser/views/dropdown_bar_host.h b/chrome/browser/views/dropdown_bar_host.h index 72b9aac..23c9053 100644 --- a/chrome/browser/views/dropdown_bar_host.h +++ b/chrome/browser/views/dropdown_bar_host.h @@ -6,183 +6,8 @@ #define CHROME_BROWSER_VIEWS_DROPDOWN_BAR_HOST_H_ #pragma once -#include "app/animation.h" -#include "base/scoped_ptr.h" -#include "chrome/common/native_web_keyboard_event.h" -#include "gfx/native_widget_types.h" -#include "gfx/rect.h" -#include "views/controls/textfield/textfield.h" -#include "views/focus/focus_manager.h" - -class BrowserView; -class DropdownBarView; -class SlideAnimation; -class TabContents; - -namespace views { -class ExternalFocusTracker; -class View; -class Widget; -} - -//////////////////////////////////////////////////////////////////////////////// -// -// The DropdownBarHost implements the container widget for the UI that -// is shown at the top of browser contents. It uses the appropriate -// implementation from dropdown_bar_host_win.cc or dropdown_bar_host_gtk.cc to -// draw its content and is responsible for showing, hiding, animating, closing, -// and moving the bar if needed, for example if the widget is -// obscuring the selection results in FindBar. -// -//////////////////////////////////////////////////////////////////////////////// -class DropdownBarHost : public views::AcceleratorTarget, - public views::FocusChangeListener, - public AnimationDelegate { - public: - explicit DropdownBarHost(BrowserView* browser_view); - virtual ~DropdownBarHost(); - - // Initializes the dropdown bar host with the give view. - void Init(DropdownBarView* view); - - // Whether we are animating the position of the dropdown widget. - bool IsAnimating() const; - // Returns true if the dropdown bar view is visible, or false otherwise. - bool IsVisible() const; - // Selects text in the entry field and set focus. - void SetFocusAndSelection(); - // Stops the animation. - void StopAnimation(); - - // Shows the dropdown bar. - virtual void Show(bool animate); - // Hides the dropdown bar. - virtual void Hide(bool animate); - - // Returns the rectangle representing where to position the dropdown widget. - virtual gfx::Rect GetDialogPosition(gfx::Rect avoid_overlapping_rect) = 0; - - // Moves the widget to the provided location, moves it to top - // in the z-order (HWND_TOP, not HWND_TOPMOST for windows) and shows - // the widget (if hidden). - virtual void SetDialogPosition(const gfx::Rect& new_pos, bool no_redraw) = 0; - - // Overridden from views::FocusChangeListener: - virtual void FocusWillChange(views::View* focused_before, - views::View* focused_now); - - // Overridden from views::AcceleratorTarget: - virtual bool AcceleratorPressed(const views::Accelerator& accelerator) = 0; - - // AnimationDelegate implementation: - virtual void AnimationProgressed(const Animation* animation); - virtual void AnimationEnded(const Animation* animation); - - // During testing we can disable animations by setting this flag to true, - // so that opening and closing the dropdown bar is shown instantly, instead of - // having to poll it while it animates to open/closed status. - static bool disable_animations_during_testing_; - - // Returns the browser view that the dropdown belongs to. - BrowserView* browser_view() const { return browser_view_; } - - // Registers this class as the handler for when Escape is pressed. Once we - // loose focus we will unregister Escape and (any accelerators the derived - // classes registers by using overrides of RegisterAccelerators). See also: - // SetFocusChangeListener(). - virtual void RegisterAccelerators(); - - // When we loose focus, we unregister all accelerator handlers. See also: - // SetFocusChangeListener(). - virtual void UnregisterAccelerators(); - - protected: - // Returns the dropdown bar view. - DropdownBarView* view() const { return view_; } - - // Returns the focus tracker. - views::ExternalFocusTracker* focus_tracker() const { - return focus_tracker_.get(); - } - - // Resets the focus tracker. - void ResetFocusTracker(); - - // The focus manager we register with to keep track of focus changes. - views::FocusManager* focus_manager() const { return focus_manager_; } - - // Returns the host widget. - views::Widget* host() const { return host_.get(); } - - // Returns the animation offset. - int animation_offset() const { return animation_offset_; } - - // Retrieves the boundary that the dropdown widget has to work with - // within the Chrome frame window. The boundary differs depending on - // the dropdown bar implementation. The default implementation - // returns the boundary of browser_view and the drop down - // can be shown in any client area. - virtual void GetWidgetBounds(gfx::Rect* bounds); - - // The find bar widget needs rounded edges, so we create a polygon - // that corresponds to the background images for this window (and - // make the polygon only contain the pixels that we want to - // draw). The polygon is then given to SetWindowRgn which changes - // the window from being a rectangle in shape, to being a rect with - // curved edges. We also check to see if the region should be - // truncated to prevent from drawing onto Chrome's window border. - void UpdateWindowEdges(const gfx::Rect& new_pos); - - // Creates and returns the native Widget. - views::Widget* CreateHost(); - - // Allows implementation to tweak widget position. - void SetWidgetPositionNative(const gfx::Rect& new_pos, bool no_redraw); - - // Returns a keyboard event suitable for fowarding. - NativeWebKeyboardEvent GetKeyboardEvent( - const TabContents* contents, - const views::Textfield::Keystroke& key_stroke); - - // Returns the animation for the dropdown. - SlideAnimation* animation() { - return animation_.get(); - } - - private: - // The BrowserView that created us. - BrowserView* browser_view_; - - // Our view, which is responsible for drawing the UI. - DropdownBarView* view_; - - // The y position pixel offset of the widget while animating the - // dropdown widget. - int animation_offset_; - - // The animation class to use when opening the Dropdown widget. - scoped_ptr<SlideAnimation> animation_; - - // The focus manager we register with to keep track of focus changes. - views::FocusManager* focus_manager_; - - // True if the accelerator target for Esc key is registered. - bool esc_accel_target_registered_; - - // Tracks and stores the last focused view which is not the DropdownBarView - // or any of its children. Used to restore focus once the DropdownBarView is - // closed. - scoped_ptr<views::ExternalFocusTracker> focus_tracker_; - - // Host is the Widget implementation that is created and maintained by the - // dropdown bar. It contains the DropdownBarView. - scoped_ptr<views::Widget> host_; - - // A flag to manually manage visibility. GTK/X11 is asynchrnous and - // the state of the widget can be out of sync. - bool is_visible_; - - DISALLOW_COPY_AND_ASSIGN(DropdownBarHost); -}; +#include "chrome/browser/ui/views/dropdown_bar_host.h" +// TODO(beng): remove this file once all includes have been updated. #endif // CHROME_BROWSER_VIEWS_DROPDOWN_BAR_HOST_H_ + |