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
12using base::ASCIIToUTF16;
13
14namespace views {
15namespace examples {
16
17TabbedPaneExample::TabbedPaneExample() : ExampleBase("Tabbed Pane") {
18}
19
20TabbedPaneExample::~TabbedPaneExample() {
21}
22
23void 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
58void 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
71void TabbedPaneExample::TabSelectedAt(int index) {
72  // Just print the status when selection changes.
73  PrintStatus();
74}
75
76void TabbedPaneExample::PrintStatus() {
77  ExampleBase::PrintStatus("Tab Count:%d, Selected Tab:%d",
78                           tabbed_pane_->GetTabCount(),
79                           tabbed_pane_->selected_tab_index());
80}
81
82void 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