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/app_list_constants.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/app_list/views/contents_view.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) 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int kPreferredHeight = 32; 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kButtonSpacing = 4; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ContentsSwitcherView::ContentsSwitcherView(ContentsView* contents_view) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : contents_view_(contents_view), buttons_(new views::View) { 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddChildView(buttons_); 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) buttons_->SetLayoutManager(new views::BoxLayout( 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::BoxLayout::kHorizontal, 0, 0, kButtonSpacing)); 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ContentsSwitcherView::~ContentsSwitcherView() {} 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentsSwitcherView::AddSwitcherButton(int resource_id, int page_index) { 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::ImageButton* button = new views::ImageButton(this); 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (resource_id) { 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) button->SetImage( 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) views::CustomButton::STATE_NORMAL, 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id)); 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) button->set_tag(page_index); 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) buttons_->AddChildView(button); 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size ContentsSwitcherView::GetPreferredSize() const { 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gfx::Size(buttons_->GetPreferredSize().width(), kPreferredHeight); 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ContentsSwitcherView::Layout() { 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect rect(GetContentsBounds()); 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Makes |buttons_| horizontally center and vertically fill. 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size buttons_size(buttons_->GetPreferredSize()); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect buttons_bounds(rect.CenterPoint().x() - buttons_size.width() / 2, 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rect.y(), 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) buttons_size.width(), 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rect.height()); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) buttons_->SetBoundsRect(gfx::IntersectRects(rect, buttons_bounds)); 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ContentsSwitcherView::ButtonPressed(views::Button* sender, 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ui::Event& event) { 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view_->SetActivePage(sender->tag()); 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace app_list 65