• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 namespace app_list {
14 
15 class 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.
20 class 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