Home | History | Annotate | Download | only in examples
      1 // Copyright (c) 2011 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/views/examples/tabbed_pane_example.h"
      6 
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "ui/views/controls/button/label_button.h"
      9 #include "ui/views/controls/tabbed_pane/tabbed_pane.h"
     10 #include "ui/views/layout/grid_layout.h"
     11 
     12 using base::ASCIIToUTF16;
     13 
     14 namespace views {
     15 namespace examples {
     16 
     17 TabbedPaneExample::TabbedPaneExample() : ExampleBase("Tabbed Pane") {
     18 }
     19 
     20 TabbedPaneExample::~TabbedPaneExample() {
     21 }
     22 
     23 void TabbedPaneExample::CreateExampleView(View* container) {
     24   tabbed_pane_ = new TabbedPane();
     25   tabbed_pane_->set_listener(this);
     26   add_ = new LabelButton(this, ASCIIToUTF16("Add"));
     27   add_at_ = new LabelButton(this, ASCIIToUTF16("Add At 1"));
     28   select_at_ = new LabelButton(this, ASCIIToUTF16("Select At 1"));
     29 
     30   GridLayout* layout = new GridLayout(container);
     31   container->SetLayoutManager(layout);
     32 
     33   const int tabbed_pane_column = 0;
     34   ColumnSet* column_set = layout->AddColumnSet(tabbed_pane_column);
     35   column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
     36                         1.0f, GridLayout::USE_PREF, 0, 0);
     37   layout->StartRow(1 /* expand */, tabbed_pane_column);
     38   layout->AddView(tabbed_pane_);
     39 
     40   // Create a few tabs with a button first.
     41   AddButton("Tab 1");
     42   AddButton("Tab 2");
     43 
     44   // Add control buttons horizontally.
     45   const int button_column = 1;
     46   column_set = layout->AddColumnSet(button_column);
     47   for (int i = 0; i < 3; i++) {
     48     column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
     49                           1.0f, GridLayout::USE_PREF, 0, 0);
     50   }
     51 
     52   layout->StartRow(0 /* no expand */, button_column);
     53   layout->AddView(add_);
     54   layout->AddView(add_at_);
     55   layout->AddView(select_at_);
     56 }
     57 
     58 void TabbedPaneExample::ButtonPressed(Button* sender, const ui::Event& event) {
     59   if (sender == add_) {
     60     AddButton("Added");
     61   } else if (sender == add_at_) {
     62     const base::string16 label = ASCIIToUTF16("Added at 1");
     63     tabbed_pane_->AddTabAtIndex(1, label, new LabelButton(NULL, label));
     64   } else if (sender == select_at_) {
     65     if (tabbed_pane_->GetTabCount() > 1)
     66       tabbed_pane_->SelectTabAt(1);
     67   }
     68   PrintStatus();
     69 }
     70 
     71 void TabbedPaneExample::TabSelectedAt(int index) {
     72   // Just print the status when selection changes.
     73   PrintStatus();
     74 }
     75 
     76 void TabbedPaneExample::PrintStatus() {
     77   ExampleBase::PrintStatus("Tab Count:%d, Selected Tab:%d",
     78                            tabbed_pane_->GetTabCount(),
     79                            tabbed_pane_->selected_tab_index());
     80 }
     81 
     82 void TabbedPaneExample::AddButton(const std::string& label) {
     83   LabelButton* button = new LabelButton(NULL, ASCIIToUTF16(label));
     84   tabbed_pane_->AddTab(ASCIIToUTF16(label), button);
     85 }
     86 
     87 }  // namespace examples
     88 }  // namespace views
     89