// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FOCUS_CYCLER_H_ #define FOCUS_CYCLER_H_ #include <vector> #include "ash/ash_export.h" #include "base/basictypes.h" #include "base/compiler_specific.h" namespace views { class Widget; } // namespace views namespace ash { namespace internal { // This class handles moving focus between a set of widgets and the main browser // window. class ASH_EXPORT FocusCycler { public: enum Direction { FORWARD, BACKWARD }; FocusCycler(); ~FocusCycler(); // Returns the widget the FocusCycler is attempting to activate or NULL if // FocusCycler is not activating any widgets. const views::Widget* widget_activating() const { return widget_activating_; } // Add a widget to the focus cycle. The widget needs to have an // AccessiblePaneView as the content view. void AddWidget(views::Widget* widget); // Move focus to the next widget. void RotateFocus(Direction direction); // Moves focus the specified widget. Returns true if the widget was activated. bool FocusWidget(views::Widget* widget); private: std::vector<views::Widget*> widgets_; // See description above getter. views::Widget* widget_activating_; DISALLOW_COPY_AND_ASSIGN(FocusCycler); }; } // namespace internal } // namespace ash #endif // FOCUS_CYCLER_H_