• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TabbedPaneExample()17 TabbedPaneExample::TabbedPaneExample() : ExampleBase("Tabbed Pane") {
18 }
19 
~TabbedPaneExample()20 TabbedPaneExample::~TabbedPaneExample() {
21 }
22 
CreateExampleView(View * container)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 
ButtonPressed(Button * sender,const ui::Event & event)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 
TabSelectedAt(int index)71 void TabbedPaneExample::TabSelectedAt(int index) {
72   // Just print the status when selection changes.
73   PrintStatus();
74 }
75 
PrintStatus()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 
AddButton(const std::string & label)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