// 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 UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_ #define UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_ #include "base/macros.h" #include "ui/app_list/pagination_model_observer.h" #include "ui/views/controls/button/button.h" #include "ui/views/view.h" namespace app_list { class PaginationModel; // PageSwitcher represents its underlying PaginationModel with a button strip. // Each page in the PageinationModel has a button in the strip and when the // button is clicked, the corresponding page becomes selected. class PageSwitcher : public views::View, public views::ButtonListener, public PaginationModelObserver { public: explicit PageSwitcher(PaginationModel* model); ~PageSwitcher() override; // Returns the page index of the page switcher button under the point. If no // page switcher button is under the point, -1 is return. |point| is in // PageSwitcher's coordinates. int GetPageForPoint(const gfx::Point& point) const; // Shows hover for button under the point. |point| is in PageSwitcher's // coordinates. void UpdateUIForDragPoint(const gfx::Point& point); // Overridden from views::View: gfx::Size GetPreferredSize() const override; void Layout() override; private: void CalculateButtonWidthAndSpacing(int contents_width); // Overridden from views::ButtonListener: void ButtonPressed(views::Button* sender, const ui::Event& event) override; // Overridden from PaginationModelObserver: void TotalPagesChanged() override; void SelectedPageChanged(int old_selected, int new_selected) override; void TransitionStarted() override; void TransitionChanged() override; PaginationModel* model_; // Owned by AppsGridView. views::View* buttons_; // Owned by views hierarchy. DISALLOW_COPY_AND_ASSIGN(PageSwitcher); }; } // namespace app_list #endif // UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_