Commit 7ad8c036 authored by Robert Liao's avatar Robert Liao Committed by Commit Bot

Split the Combobox Example Model into Three Models

This simplifies lifetime handling for these comboboxes.

BUG=897377

Change-Id: I19e8ed25f8e6b17012669ad7e810d33aa28d8ec8
Reviewed-on: https://chromium-review.googlesource.com/c/1295589Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Robert Liao <robliao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#602174}
parent b97ee43b
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "ui/views/examples/combobox_example.h" #include "ui/views/examples/combobox_example.h"
#include <memory>
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/insets.h"
...@@ -13,44 +15,43 @@ ...@@ -13,44 +15,43 @@
namespace views { namespace views {
namespace examples { namespace examples {
ComboboxModelExample::ComboboxModelExample() { namespace {
}
ComboboxModelExample::~ComboboxModelExample() { // A combobox model implementation that generates a list of "Item <index>".
} class ComboboxModelExample : public ui::ComboboxModel {
public:
ComboboxModelExample() = default;
~ComboboxModelExample() override = default;
int ComboboxModelExample::GetItemCount() const { private:
return 10; // ui::ComboboxModel:
} int GetItemCount() const override { return 10; }
base::string16 GetItemAt(int index) override {
return base::UTF8ToUTF16(base::StringPrintf("%c item", 'A' + index));
}
base::string16 ComboboxModelExample::GetItemAt(int index) { DISALLOW_COPY_AND_ASSIGN(ComboboxModelExample);
return base::UTF8ToUTF16(base::StringPrintf("%c item", 'A' + index)); };
}
} // namespace
ComboboxExample::ComboboxExample() : ExampleBase("Combo Box") { ComboboxExample::ComboboxExample() : ExampleBase("Combo Box") {
} }
ComboboxExample::~ComboboxExample() { ComboboxExample::~ComboboxExample() = default;
// Delete |combobox_| first as it references |combobox_model_|.
delete combobox_;
delete disabled_combobox_;
delete action_combobox_;
combobox_ = nullptr;
disabled_combobox_ = nullptr;
action_combobox_ = nullptr;
}
void ComboboxExample::CreateExampleView(View* container) { void ComboboxExample::CreateExampleView(View* container) {
combobox_ = new Combobox(&combobox_model_); combobox_ = new Combobox(std::make_unique<ComboboxModelExample>());
combobox_->set_listener(this); combobox_->set_listener(this);
combobox_->SetSelectedIndex(3); combobox_->SetSelectedIndex(3);
disabled_combobox_ = new Combobox(&combobox_model_); disabled_combobox_ = new Combobox(std::make_unique<ComboboxModelExample>());
disabled_combobox_->set_listener(this); disabled_combobox_->set_listener(this);
disabled_combobox_->SetSelectedIndex(4); disabled_combobox_->SetSelectedIndex(4);
disabled_combobox_->SetEnabled(false); disabled_combobox_->SetEnabled(false);
action_combobox_ = new Combobox(&combobox_model_, Combobox::STYLE_ACTION); action_combobox_ = new Combobox(std::make_unique<ComboboxModelExample>(),
Combobox::STYLE_ACTION);
action_combobox_->set_listener(this); action_combobox_->set_listener(this);
// Note: STYLE_ACTION comboboxes always have the first item selected by // Note: STYLE_ACTION comboboxes always have the first item selected by
// default. // default.
...@@ -64,11 +65,14 @@ void ComboboxExample::CreateExampleView(View* container) { ...@@ -64,11 +65,14 @@ void ComboboxExample::CreateExampleView(View* container) {
void ComboboxExample::OnPerformAction(Combobox* combobox) { void ComboboxExample::OnPerformAction(Combobox* combobox) {
if (combobox == combobox_) { if (combobox == combobox_) {
PrintStatus("Selected: %s", base::UTF16ToUTF8(combobox_model_.GetItemAt( PrintStatus("Selected: %s",
combobox->selected_index())).c_str()); base::UTF16ToUTF8(
combobox->model()->GetItemAt(combobox->selected_index()))
.c_str());
} else if (combobox == action_combobox_) { } else if (combobox == action_combobox_) {
PrintStatus("Action: %s", base::UTF16ToUTF8(combobox_model_.GetItemAt( PrintStatus("Action: %s", base::UTF16ToUTF8(combobox->model()->GetItemAt(
combobox->selected_index())).c_str()); combobox->selected_index()))
.c_str());
} else { } else {
NOTREACHED() << "Surprising combobox."; NOTREACHED() << "Surprising combobox.";
} }
......
...@@ -13,20 +13,6 @@ ...@@ -13,20 +13,6 @@
namespace views { namespace views {
namespace examples { namespace examples {
// A combobox model implementation that generates a list of "Item <index>".
class VIEWS_EXAMPLES_EXPORT ComboboxModelExample : public ui::ComboboxModel {
public:
ComboboxModelExample();
~ComboboxModelExample() override;
// ui::ComboboxModel:
int GetItemCount() const override;
base::string16 GetItemAt(int index) override;
private:
DISALLOW_COPY_AND_ASSIGN(ComboboxModelExample);
};
class VIEWS_EXAMPLES_EXPORT ComboboxExample : public ExampleBase, class VIEWS_EXAMPLES_EXPORT ComboboxExample : public ExampleBase,
public ComboboxListener { public ComboboxListener {
public: public:
...@@ -40,7 +26,6 @@ class VIEWS_EXAMPLES_EXPORT ComboboxExample : public ExampleBase, ...@@ -40,7 +26,6 @@ class VIEWS_EXAMPLES_EXPORT ComboboxExample : public ExampleBase,
// ComboboxListener: // ComboboxListener:
void OnPerformAction(Combobox* combobox) override; void OnPerformAction(Combobox* combobox) override;
ComboboxModelExample combobox_model_;
Combobox* combobox_ = nullptr; Combobox* combobox_ = nullptr;
Combobox* disabled_combobox_ = nullptr; Combobox* disabled_combobox_ = nullptr;
Combobox* action_combobox_ = nullptr; Combobox* action_combobox_ = nullptr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment