15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/scroll_view_example.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/views/background.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/radio_button.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace examples { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ScrollView's content, which draws gradient color on background. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(oshima): add child views as well. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScrollViewExample::ScrollableView : public View { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScrollableView() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetColor(SK_ColorRED, SK_ColorCYAN); 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddChildView(new LabelButton(NULL, ASCIIToUTF16("Button"))); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(new RadioButton(ASCIIToUTF16("Radio Button"), 0)); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Size(width(), height()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetColor(SkColor from, SkColor to) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_background(Background::CreateVerticalGradientBackground(from, to)); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PlaceChildY(int index, int y) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view = child_at(index); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size = view->GetPreferredSize(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->SetBounds(0, y, size.width(), size.height()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PlaceChildY(0, 0); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PlaceChildY(1, height() / 2); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SizeToPreferredSize(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScrollableView); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScrollViewExample::ScrollViewExample() : ExampleBase("Scroll View") { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScrollViewExample::~ScrollViewExample() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScrollViewExample::CreateExampleView(View* container) { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) wide_ = new LabelButton(this, ASCIIToUTF16("Wide")); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tall_ = new LabelButton(this, ASCIIToUTF16("Tall")); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) big_square_ = new LabelButton(this, ASCIIToUTF16("Big Square")); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) small_square_ = new LabelButton(this, ASCIIToUTF16("Small Square")); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scroll_to_ = new LabelButton(this, ASCIIToUTF16("Scroll to")); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_ = new ScrollableView(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scroll_view_ = new ScrollView(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scroll_view_->SetContents(scrollable_); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetBounds(0, 0, 1000, 100); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetColor(SK_ColorYELLOW, SK_ColorCYAN); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = new GridLayout(container); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container->SetLayoutManager(layout); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add scroll view. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* column_set = layout->AddColumnSet(0); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(1, 0); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(scroll_view_); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add control buttons. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set = layout->AddColumnSet(1); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; i++) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 1); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(wide_); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(tall_); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(big_square_); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(small_square_); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(scroll_to_); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScrollViewExample::ButtonPressed(Button* sender, const ui::Event& event) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sender == wide_) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetBounds(0, 0, 1000, 100); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetColor(SK_ColorYELLOW, SK_ColorCYAN); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == tall_) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetBounds(0, 0, 100, 1000); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetColor(SK_ColorRED, SK_ColorCYAN); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == big_square_) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetBounds(0, 0, 1000, 1000); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetColor(SK_ColorRED, SK_ColorGREEN); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == small_square_) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetBounds(0, 0, 100, 100); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scrollable_->SetColor(SK_ColorYELLOW, SK_ColorGREEN); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == scroll_to_) { 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_view_->contents()->ScrollRectToVisible( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(20, 500, 1000, 500)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scroll_view_->Layout(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace examples 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 118