1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/app_list/views/contents_switcher_view.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/app_list/views/contents_view.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/resource/resource_bundle.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/button/custom_button.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ui/views/controls/button/image_button.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/layout/box_layout.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace app_list {
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kButtonSpacing = 4;
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kMinimumHeight = 39;
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ContentsSwitcherView::ContentsSwitcherView(ContentsView* contents_view)
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : contents_view_(contents_view) {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  views::BoxLayout* layout = new views::BoxLayout(
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      views::BoxLayout::kHorizontal, 0, 0, kButtonSpacing);
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  layout->set_main_axis_alignment(views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  layout->set_minimum_cross_axis_size(kMinimumHeight);
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SetLayoutManager(layout);
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ContentsSwitcherView::~ContentsSwitcherView() {}
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentsSwitcherView::AddSwitcherButton(int resource_id, int page_index) {
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  views::ImageButton* button = new views::ImageButton(this);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  button->SetMinimumImageSize(gfx::Size(kMinimumHeight, kMinimumHeight));
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            views::ImageButton::ALIGN_MIDDLE);
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  button->SetImage(
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      views::CustomButton::STATE_NORMAL,
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id));
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  button->set_tag(page_index);
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AddChildView(button);
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ContentsSwitcherView::ButtonPressed(views::Button* sender,
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                         const ui::Event& event) {
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  contents_view_->SetActivePage(sender->tag());
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ContentsSwitcherView::TotalPagesChanged() {
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ContentsSwitcherView::SelectedPageChanged(int old_selected,
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                               int new_selected) {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // TODO(mgiuca): Visually indicate which page is now selected.
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ContentsSwitcherView::TransitionStarted() {
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ContentsSwitcherView::TransitionChanged() {
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Change the indicator during a launcher page transition.
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const PaginationModel& pm = contents_view_->pagination_model();
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int old_selected = pm.selected_page();
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int new_selected = pm.transition().target_page;
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (pm.IsRevertingCurrentTransition()) {
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Swap the direction if the transition is reversed.
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    old_selected = pm.transition().target_page;
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    new_selected = pm.selected_page();
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SelectedPageChanged(old_selected, new_selected);
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace app_list
77