Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1191)

Unified Diff: chrome/browser/ui/views/autofill/autofill_dialog_views.cc

Issue 11743036: requestAutocomplete: change comboboxes to dropdown menus (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: isherman review Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/autofill/autofill_dialog_views.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/autofill/autofill_dialog_views.cc
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index b549b25aa2af7aac8c76e133ab415f0d3c9bcc39..5c9bade41701c349b1152310ddfedfd76da4b9f0 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -12,8 +12,11 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/views/border.h"
#include "ui/views/controls/button/checkbox.h"
+#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
+#include "ui/views/controls/menu/menu_model_adapter.h"
+#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/separator.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/layout/box_layout.h"
@@ -79,7 +82,11 @@ AutofillDialogViews::AutofillDialogViews(AutofillDialogController* controller)
: controller_(controller),
did_submit_(false),
window_(NULL),
- contents_(NULL) {
+ contents_(NULL),
+ email_(SECTION_EMAIL),
+ cc_(SECTION_CC),
+ billing_(SECTION_BILLING),
+ shipping_(SECTION_SHIPPING) {
DCHECK(controller);
}
@@ -110,10 +117,8 @@ void AutofillDialogViews::UpdateSection(DialogSection section) {
input->second->SetText(iter->autofilled_value);
}
-}
-int AutofillDialogViews::GetSuggestionSelection(DialogSection section) {
- return GroupForSection(section)->suggested_input->selected_index();
+ UpdateDetailsGroupState(*group);
}
void AutofillDialogViews::GetUserInput(DialogSection section,
@@ -123,13 +128,6 @@ void AutofillDialogViews::GetUserInput(DialogSection section,
it != group->textfields.end(); ++it) {
output->insert(std::make_pair(it->first, it->second->text()));
}
- for (ComboboxMap::iterator it = group->comboboxes.begin();
- it != group->comboboxes.end(); ++it) {
- views::Combobox* combobox = it->second;
- output->insert(std::make_pair(
- it->first,
- combobox->model()->GetItemAt(combobox->selected_index())));
- }
}
bool AutofillDialogViews::UseBillingForShipping() {
@@ -189,15 +187,25 @@ void AutofillDialogViews::ButtonPressed(views::Button* sender,
GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
}
-void AutofillDialogViews::OnSelectedIndexChanged(views::Combobox* combobox) {
+void AutofillDialogViews::OnMenuButtonClicked(views::View* source,
+ const gfx::Point& point) {
DetailsGroup* group =
- combobox == email_.suggested_input ? &email_ :
- combobox == cc_.suggested_input ? &cc_ :
- combobox == billing_.suggested_input ? &billing_ :
- combobox == shipping_.suggested_input ? &shipping_ : NULL;
+ source == email_.suggested_button ? &email_ :
+ source == cc_.suggested_button ? &cc_ :
+ source == billing_.suggested_button ? &billing_ :
+ source == shipping_.suggested_button ? &shipping_ : NULL;
DCHECK(group);
- UpdateDetailsGroupState(*group);
- GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
+ views::MenuModelAdapter adapter(
+ controller_->MenuModelForSection(group->section));
+ menu_runner_.reset(new views::MenuRunner(adapter.CreateMenu()));
+
+ // Ignore the result since we don't need to handle a deleted menu specially.
+ ignore_result(
+ menu_runner_->RunMenuAt(source->GetWidget(),
+ group->suggested_button,
+ gfx::Rect(point, gfx::Size()),
+ views::MenuItemView::TOPRIGHT,
+ 0));
}
void AutofillDialogViews::ContentsChanged(views::Textfield* sender,
@@ -362,18 +370,46 @@ void AutofillDialogViews::CreateBillingSection() {
views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
views::View* inputs_container = new views::View();
- inputs_container->SetLayoutManager(
+ views::GridLayout* layout = new views::GridLayout(inputs_container);
+ inputs_container->SetLayoutManager(layout);
+
+ int kColumnSetId = 0;
+ views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
+ column_set->AddColumn(views::GridLayout::FILL,
+ views::GridLayout::LEADING,
+ 1,
+ views::GridLayout::USE_PREF,
+ 0,
+ 0);
+ column_set->AddColumn(views::GridLayout::CENTER,
+ views::GridLayout::LEADING,
+ 0,
+ views::GridLayout::USE_PREF,
+ 0,
+ 0);
+ layout->StartRow(0, kColumnSetId);
+
+ // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the
+ // dialog toggle which is shown.
+ views::View* info_view = new views::View();
+ info_view->SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
views::View* manual_inputs = InitInputsView(section);
- inputs_container->AddChildView(manual_inputs);
- views::Combobox* combobox =
- new views::Combobox(controller_->ComboboxModelForSection(section));
- combobox->set_listener(this);
- inputs_container->AddChildView(combobox);
+ info_view->AddChildView(manual_inputs);
+ views::Label* suggested_info = new views::Label();
+ suggested_info->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ info_view->AddChildView(suggested_info);
+ layout->AddView(info_view);
+
+ // TODO(estade): Fix the appearance of this button.
+ views::MenuButton* menu_button =
+ new views::MenuButton(NULL, string16(), this, true);
+ layout->AddView(menu_button);
DetailsGroup* group = GroupForSection(section);
- group->suggested_input = combobox;
+ group->suggested_button = menu_button;
group->manual_input = manual_inputs;
+ group->suggested_info = suggested_info;
UpdateDetailsGroupState(*group);
return inputs_container;
}
@@ -444,13 +480,13 @@ views::View* AutofillDialogViews::InitInputsView(DialogSection section) {
}
void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) {
- views::Combobox* combobox = group.suggested_input;
- int suggestion_count = combobox->model()->GetItemCount();
- bool show_combobox = suggestion_count > 1 &&
- combobox->selected_index() != suggestion_count - 1;
-
- combobox->SetVisible(show_combobox);
- group.manual_input->SetVisible(!show_combobox);
+ string16 suggestion_text =
+ controller_->SuggestionTextForSection(group.section);
+ group.manual_input->SetVisible(suggestion_text.empty());
+ group.suggested_info->SetVisible(!suggestion_text.empty());
+ group.suggested_info->SetText(suggestion_text);
+ if (GetWidget())
+ GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
}
AutofillDialogViews::DetailsGroup* AutofillDialogViews::
@@ -470,10 +506,12 @@ AutofillDialogViews::DetailsGroup* AutofillDialogViews::
return NULL;
}
-AutofillDialogViews::DetailsGroup::DetailsGroup()
- : container(NULL),
- suggested_input(NULL),
- manual_input(NULL) {}
+AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section)
+ : section(section),
+ container(NULL),
+ manual_input(NULL),
+ suggested_info(NULL),
+ suggested_button(NULL) {}
AutofillDialogViews::DetailsGroup::~DetailsGroup() {}
« no previous file with comments | « chrome/browser/ui/views/autofill/autofill_dialog_views.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698