Commit 52486676 authored by Elaine Chien's avatar Elaine Chien Committed by Commit Bot

Add View Builder support for Combobox and migrate example

Bug: 1130078
Change-Id: I1f1941981229996029488c2d0b001d720f84f259
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2463769Reviewed-by: default avatarRobert Liao <robliao@chromium.org>
Reviewed-by: default avatarEmily Stark <estark@chromium.org>
Commit-Queue: Elaine Chien <elainec@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817616}
parent cf94ccbd
......@@ -273,7 +273,7 @@ void PermissionSelectorRow::InitializeComboboxView(
auto combobox = std::make_unique<internal::PermissionCombobox>(
combobox_model_adapter_.get(), button_enabled, true);
combobox->SetEnabled(button_enabled);
combobox->SetTooltipText(l10n_util::GetStringFUTF16(
combobox->SetTooltipTextAndAccessibleName(l10n_util::GetStringFUTF16(
IDS_PAGE_INFO_SELECTOR_TOOLTIP,
PageInfoUI::PermissionTypeToUIString(permission.type)));
combobox_ = layout->AddView(std::move(combobox));
......
......@@ -318,7 +318,12 @@ void Combobox::SetModel(ui::ComboboxModel* model) {
}
}
void Combobox::SetTooltipText(const base::string16& tooltip_text) {
base::string16 Combobox::GetTooltipTextAndAccessibleName() const {
return arrow_button_->GetTooltipText();
}
void Combobox::SetTooltipTextAndAccessibleName(
const base::string16& tooltip_text) {
arrow_button_->SetTooltipText(tooltip_text);
if (accessible_name_.empty())
accessible_name_ = tooltip_text;
......@@ -716,6 +721,7 @@ ADD_PROPERTY_METADATA(int, SelectedIndex)
ADD_PROPERTY_METADATA(bool, Invalid)
ADD_PROPERTY_METADATA(bool, SizeToLargestLabel)
ADD_PROPERTY_METADATA(base::string16, AccessibleName)
ADD_PROPERTY_METADATA(base::string16, TooltipTextAndAccessibleName)
END_METADATA
} // namespace views
......@@ -16,6 +16,7 @@
#include "ui/base/models/combobox_model_observer.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/prefix_delegate.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/style/typography.h"
namespace gfx {
......@@ -81,8 +82,10 @@ class VIEWS_EXPORT Combobox : public View,
ui::ComboboxModel* model() const { return model_; }
// Set the tooltip text, and the accessible name if it is currently empty.
void SetTooltipText(const base::string16& tooltip_text);
// Gets/Sets the tooltip text, and the accessible name if it is currently
// empty.
base::string16 GetTooltipTextAndAccessibleName() const;
void SetTooltipTextAndAccessibleName(const base::string16& tooltip_text);
// Set the accessible name of the combobox.
void SetAccessibleName(const base::string16& name);
......@@ -223,6 +226,14 @@ class VIEWS_EXPORT Combobox : public View,
DISALLOW_COPY_AND_ASSIGN(Combobox);
};
BEGIN_VIEW_BUILDER(VIEWS_EXPORT, Combobox, View)
VIEW_BUILDER_PROPERTY(int, SelectedIndex)
VIEW_BUILDER_PROPERTY(bool, Invalid)
VIEW_BUILDER_PROPERTY(bool, SizeToLargestLabel)
VIEW_BUILDER_PROPERTY(base::string16, AccessibleName)
VIEW_BUILDER_PROPERTY(base::string16, TooltipTextAndAccessibleName)
END_VIEW_BUILDER(VIEWS_EXPORT, Combobox)
} // namespace views
#endif // UI_VIEWS_CONTROLS_COMBOBOX_COMBOBOX_H_
......@@ -830,13 +830,14 @@ TEST_F(ComboboxTest, MenuModel) {
EXPECT_TRUE(menu_model->IsVisibleAt(0));
}
// Verifies setting the tooltip text will call NotifyAccessibilityEvent.
// Verifies SetTooltipTextAndAccessibleName will call NotifyAccessibilityEvent.
TEST_F(ComboboxTest, SetTooltipTextNotifiesAccessibilityEvent) {
InitCombobox(nullptr);
base::string16 test_tooltip_text = ASCIIToUTF16("Test Tooltip Text");
test::AXEventCounter counter(AXEventManager::Get());
EXPECT_EQ(0, counter.GetCount(ax::mojom::Event::kTextChanged));
combobox_->SetTooltipText(test_tooltip_text);
combobox_->SetTooltipTextAndAccessibleName(test_tooltip_text);
EXPECT_EQ(test_tooltip_text, combobox_->GetTooltipTextAndAccessibleName());
EXPECT_EQ(1, counter.GetCount(ax::mojom::Event::kTextChanged));
EXPECT_EQ(test_tooltip_text, combobox_->GetAccessibleName());
ui::AXNodeData data;
......
......@@ -5,13 +5,15 @@
#include "ui/views/examples/combobox_example.h"
#include <memory>
#include <utility>
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/examples/examples_window.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/box_layout_view.h"
#include "ui/views/layout/fill_layout.h"
namespace views {
namespace examples {
......@@ -41,21 +43,33 @@ ComboboxExample::ComboboxExample() : ExampleBase("Combo Box") {}
ComboboxExample::~ComboboxExample() = default;
void ComboboxExample::CreateExampleView(View* container) {
container->SetLayoutManager(std::make_unique<BoxLayout>(
BoxLayout::Orientation::kVertical, gfx::Insets(10, 0), 5));
container->SetLayoutManager(std::make_unique<FillLayout>());
combobox_ = container->AddChildView(
std::make_unique<Combobox>(std::make_unique<ComboboxModelExample>()));
Combobox* disabled_combobox;
auto view = Builder<BoxLayoutView>()
.SetOrientation(BoxLayout::Orientation::kVertical)
.SetInsideBorderInsets(gfx::Insets(10, 0))
.SetBetweenChildSpacing(5)
.AddChildren({Builder<Combobox>().CopyAddressTo(&combobox_),
Builder<Combobox>()
.CopyAddressTo(&disabled_combobox)
.SetEnabled(false)})
.Build();
combobox_->SetOwnedModel(std::make_unique<ComboboxModelExample>());
combobox_->set_callback(base::BindRepeating(&ComboboxExample::ValueChanged,
base::Unretained(this)));
// The index is set outside of the builder because SetOwnedModel will override
// set indices.
combobox_->SetSelectedIndex(3);
auto* disabled_combobox = container->AddChildView(
std::make_unique<Combobox>(std::make_unique<ComboboxModelExample>()));
disabled_combobox->SetOwnedModel(std::make_unique<ComboboxModelExample>());
disabled_combobox->set_callback(base::BindRepeating(
&ComboboxExample::ValueChanged, base::Unretained(this)));
// The index is set outside of the builder because SetOwnedModel will override
// set indices.
disabled_combobox->SetSelectedIndex(4);
disabled_combobox->SetEnabled(false);
container->AddChildView(std::move(view));
}
void ComboboxExample::ValueChanged() {
......
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