1// Copyright (c) 2012 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 UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_
6#define UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_
7
8#include "base/basictypes.h"
9#include "ui/app_list/pagination_model_observer.h"
10#include "ui/views/controls/button/button.h"
11#include "ui/views/view.h"
12
13namespace app_list {
14
15class PaginationModel;
16
17// PageSwitcher represents its underlying PaginationModel with a button strip.
18// Each page in the PageinationModel has a button in the strip and when the
19// button is clicked, the corresponding page becomes selected.
20class PageSwitcher : public views::View,
21                     public views::ButtonListener,
22                     public PaginationModelObserver {
23 public:
24  explicit PageSwitcher(PaginationModel* model);
25  virtual ~PageSwitcher();
26
27  // Returns the page index of the page switcher button under the point. If no
28  // page switcher button is under the point, -1 is return. |point| is in
29  // PageSwitcher's coordinates.
30  int GetPageForPoint(const gfx::Point& point) const;
31
32  // Shows hover for button under the point. |point| is in PageSwitcher's
33  // coordinates.
34  void UpdateUIForDragPoint(const gfx::Point& point);
35
36  // Overridden from views::View:
37  virtual gfx::Size GetPreferredSize() const OVERRIDE;
38  virtual void Layout() OVERRIDE;
39
40 private:
41  void CalculateButtonWidthAndSpacing(int contents_width);
42
43  // Overridden from views::ButtonListener:
44  virtual void ButtonPressed(views::Button* sender,
45                             const ui::Event& event) OVERRIDE;
46
47  // Overridden from PaginationModelObserver:
48  virtual void TotalPagesChanged() OVERRIDE;
49  virtual void SelectedPageChanged(int old_selected, int new_selected) OVERRIDE;
50  virtual void TransitionStarted() OVERRIDE;
51  virtual void TransitionChanged() OVERRIDE;
52
53  PaginationModel* model_;  // Owned by AppsGridView.
54  views::View* buttons_;  // Owned by views hierarchy.
55
56  DISALLOW_COPY_AND_ASSIGN(PageSwitcher);
57};
58
59}  // namespace app_list
60
61#endif  // UI_APP_LIST_VIEWS_PAGE_SWITCHER_H_
62