1// Copyright 2014 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#include "ui/app_list/views/contents_switcher_view.h"
6
7#include "ui/app_list/views/contents_view.h"
8#include "ui/base/resource/resource_bundle.h"
9#include "ui/views/controls/button/custom_button.h"
10#include "ui/views/controls/button/image_button.h"
11#include "ui/views/layout/box_layout.h"
12
13namespace app_list {
14
15namespace {
16
17const int kButtonSpacing = 4;
18const int kMinimumHeight = 39;
19
20}  // namespace
21
22ContentsSwitcherView::ContentsSwitcherView(ContentsView* contents_view)
23    : contents_view_(contents_view) {
24  views::BoxLayout* layout = new views::BoxLayout(
25      views::BoxLayout::kHorizontal, 0, 0, kButtonSpacing);
26  layout->set_main_axis_alignment(views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
27  layout->set_minimum_cross_axis_size(kMinimumHeight);
28  SetLayoutManager(layout);
29}
30
31ContentsSwitcherView::~ContentsSwitcherView() {}
32
33void ContentsSwitcherView::AddSwitcherButton(int resource_id, int page_index) {
34  views::ImageButton* button = new views::ImageButton(this);
35  button->SetMinimumImageSize(gfx::Size(kMinimumHeight, kMinimumHeight));
36  button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
37                            views::ImageButton::ALIGN_MIDDLE);
38  button->SetImage(
39      views::CustomButton::STATE_NORMAL,
40      ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id));
41  button->set_tag(page_index);
42
43  AddChildView(button);
44}
45
46void ContentsSwitcherView::ButtonPressed(views::Button* sender,
47                                         const ui::Event& event) {
48  contents_view_->SetActivePage(sender->tag());
49}
50
51void ContentsSwitcherView::TotalPagesChanged() {
52}
53
54void ContentsSwitcherView::SelectedPageChanged(int old_selected,
55                                               int new_selected) {
56  // TODO(mgiuca): Visually indicate which page is now selected.
57}
58
59void ContentsSwitcherView::TransitionStarted() {
60}
61
62void ContentsSwitcherView::TransitionChanged() {
63  // Change the indicator during a launcher page transition.
64  const PaginationModel& pm = contents_view_->pagination_model();
65  int old_selected = pm.selected_page();
66  int new_selected = pm.transition().target_page;
67  if (pm.IsRevertingCurrentTransition()) {
68    // Swap the direction if the transition is reversed.
69    old_selected = pm.transition().target_page;
70    new_selected = pm.selected_page();
71  }
72
73  SelectedPageChanged(old_selected, new_selected);
74}
75
76}  // namespace app_list
77