1 // Copyright (c) 2012 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/combobox_example.h"
6 
7 #include <memory>
8 
9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "ui/gfx/geometry/insets.h"
12 #include "ui/views/controls/combobox/combobox.h"
13 #include "ui/views/examples/examples_window.h"
14 #include "ui/views/layout/box_layout.h"
15 
16 namespace views {
17 namespace examples {
18 
19 namespace {
20 
21 // A combobox model implementation that generates a list of "Item <index>".
22 class ComboboxModelExample : public ui::ComboboxModel {
23  public:
24   ComboboxModelExample() = default;
25   ~ComboboxModelExample() override = default;
26 
27  private:
28   // ui::ComboboxModel:
GetItemCount() const29   int GetItemCount() const override { return 10; }
GetItemAt(int index)30   base::string16 GetItemAt(int index) override {
31     return base::UTF8ToUTF16(base::StringPrintf("%c item", 'A' + index));
32   }
33 
34   DISALLOW_COPY_AND_ASSIGN(ComboboxModelExample);
35 };
36 
37 }  // namespace
38 
ComboboxExample()39 ComboboxExample::ComboboxExample() : ExampleBase("Combo Box") {}
40 
41 ComboboxExample::~ComboboxExample() = default;
42 
CreateExampleView(View * container)43 void ComboboxExample::CreateExampleView(View* container) {
44   combobox_ = new Combobox(std::make_unique<ComboboxModelExample>());
45   combobox_->set_listener(this);
46   combobox_->SetSelectedIndex(3);
47 
48   auto* disabled_combobox =
49       new Combobox(std::make_unique<ComboboxModelExample>());
50   disabled_combobox->set_listener(this);
51   disabled_combobox->SetSelectedIndex(4);
52   disabled_combobox->SetEnabled(false);
53 
54   container->SetLayoutManager(std::make_unique<BoxLayout>(
55       BoxLayout::Orientation::kVertical, gfx::Insets(10, 0), 5));
56   container->AddChildView(combobox_);
57   container->AddChildView(disabled_combobox);
58 }
59 
OnPerformAction(Combobox * combobox)60 void ComboboxExample::OnPerformAction(Combobox* combobox) {
61   DCHECK_EQ(combobox, combobox_);
62   PrintStatus("Selected: %s",
63               base::UTF16ToUTF8(
64                   combobox->model()->GetItemAt(combobox->GetSelectedIndex()))
65                   .c_str());
66 }
67 
68 }  // namespace examples
69 }  // namespace views
70