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

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

Issue 11785035: Continue work on requestAutocomplete dialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync 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') | no next file » | 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 5c9bade41701c349b1152310ddfedfd76da4b9f0..967645a97c52159a6db7ef7c4025443c45323e63 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -9,10 +9,12 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/ui/autofill/autofill_dialog_controller.h"
#include "chrome/browser/ui/views/constrained_window_views.h"
+#include "grit/theme_resources.h"
#include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/resource/resource_bundle.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/button/image_button.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/menu/menu_model_adapter.h"
@@ -38,13 +40,20 @@ views::Label* CreateDetailsSectionLabel(const string16& text) {
return label;
}
-// Creates a view that packs a label on the left and some related controls
-// on the right.
-views::View* CreateSectionContainer(const string16& label,
- views::View* controls) {
- views::View* container = new views::View();
- views::GridLayout* layout = new views::GridLayout(container);
- container->SetLayoutManager(layout);
+} // namespace
+
+// AutofillDialogViews::SectionContainer ---------------------------------------
+
+AutofillDialogViews::SectionContainer::SectionContainer(
+ const string16& label,
+ views::View* controls,
+ views::Button* proxy_button)
+ : proxy_button_(proxy_button),
+ forward_mouse_events_(false) {
+ set_notify_enter_exit_on_child(true);
+
+ views::GridLayout* layout = new views::GridLayout(this);
+ SetLayoutManager(layout);
const int kColumnSetId = 0;
views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
@@ -67,10 +76,63 @@ views::View* CreateSectionContainer(const string16& label,
layout->StartRow(0, kColumnSetId);
layout->AddView(CreateDetailsSectionLabel(label));
layout->AddView(controls);
- return container;
}
-} // namespace
+AutofillDialogViews::SectionContainer::~SectionContainer() {}
+
+void AutofillDialogViews::SectionContainer::SetForwardMouseEvents(
+ bool forward) {
+ forward_mouse_events_ = forward;
+ if (!forward)
+ set_background(NULL);
+}
+
+void AutofillDialogViews::SectionContainer::OnMouseEntered(
+ const ui::MouseEvent& event) {
+ if (!forward_mouse_events_)
+ return;
+
+ // TODO(estade): use the correct color.
+ set_background(views::Background::CreateSolidBackground(SK_ColorLTGRAY));
+ proxy_button_->OnMouseEntered(ProxyEvent(event));
+ SchedulePaint();
+}
+
+void AutofillDialogViews::SectionContainer::OnMouseExited(
+ const ui::MouseEvent& event) {
+ if (!forward_mouse_events_)
+ return;
+
+ set_background(NULL);
+ proxy_button_->OnMouseExited(ProxyEvent(event));
+ SchedulePaint();
+}
+
+bool AutofillDialogViews::SectionContainer::OnMousePressed(
+ const ui::MouseEvent& event) {
+ if (!forward_mouse_events_)
+ return false;
+
+ return proxy_button_->OnMousePressed(ProxyEvent(event));
+}
+
+void AutofillDialogViews::SectionContainer::OnMouseReleased(
+ const ui::MouseEvent& event) {
+ if (!forward_mouse_events_)
+ return;
+
+ proxy_button_->OnMouseReleased(ProxyEvent(event));
+}
+
+// static
+ui::MouseEvent AutofillDialogViews::SectionContainer::ProxyEvent(
+ const ui::MouseEvent& event) {
+ ui::MouseEvent event_copy = event;
+ event_copy.set_location(gfx::Point());
+ return event_copy;
+}
+
+// AutofillDialogView ----------------------------------------------------------
// static
AutofillDialogView* AutofillDialogView::Create(
@@ -78,6 +140,8 @@ AutofillDialogView* AutofillDialogView::Create(
return new AutofillDialogViews(controller);
}
+// AutofillDialogViews ---------------------------------------------------------
+
AutofillDialogViews::AutofillDialogViews(AutofillDialogController* controller)
: controller_(controller),
did_submit_(false),
@@ -182,30 +246,30 @@ bool AutofillDialogViews::Accept() {
void AutofillDialogViews::ButtonPressed(views::Button* sender,
const ui::Event& event) {
- DCHECK_EQ(sender, use_billing_for_shipping_);
- shipping_.container->SetVisible(!use_billing_for_shipping_->checked());
- GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
-}
-
-void AutofillDialogViews::OnMenuButtonClicked(views::View* source,
- const gfx::Point& point) {
- DetailsGroup* group =
- source == email_.suggested_button ? &email_ :
- source == cc_.suggested_button ? &cc_ :
- source == billing_.suggested_button ? &billing_ :
- source == shipping_.suggested_button ? &shipping_ : NULL;
- DCHECK(group);
- 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));
+ if (sender == use_billing_for_shipping_) {
+ shipping_.container->SetVisible(!use_billing_for_shipping_->checked());
+ GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
+ } else {
+ // TODO(estade): Should the menu be shown on mouse down?
+ DetailsGroup* group =
+ sender == email_.suggested_button ? &email_ :
+ sender == cc_.suggested_button ? &cc_ :
+ sender == billing_.suggested_button ? &billing_ :
+ sender == shipping_.suggested_button ? &shipping_ : NULL;
+ DCHECK(group);
+
+ 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(sender->GetWidget(),
+ NULL,
+ group->suggested_button->GetBoundsInScreen(),
+ views::MenuItemView::TOPRIGHT,
+ 0));
+ }
}
void AutofillDialogViews::ContentsChanged(views::Textfield* sender,
@@ -277,16 +341,6 @@ void AutofillDialogViews::InitChildViews() {
layout->StartRowWithPadding(0, single_column_set,
0, views::kUnrelatedControlVerticalSpacing);
layout->AddView(CreateDetailsContainer());
-
- // Separator.
- layout->StartRowWithPadding(0, single_column_set,
- 0, views::kUnrelatedControlVerticalSpacing);
- layout->AddView(new views::Separator());
-
- // Wallet checkbox.
- layout->StartRowWithPadding(0, single_column_set,
- 0, views::kRelatedControlVerticalSpacing);
- layout->AddView(new views::Checkbox(controller_->WalletOptionText()));
}
views::View* AutofillDialogViews::CreateIntroContainer() {
@@ -335,12 +389,14 @@ void AutofillDialogViews::CreateDetailsSection(DialogSection section) {
// Inputs container (manual inputs + combobox).
views::View* inputs_container = CreateInputsContainer(section);
- // Container (holds label + inputs).
- views::View* container = CreateSectionContainer(
- controller_->LabelForSection(section), inputs_container);
DetailsGroup* group = GroupForSection(section);
- group->container = container;
+ // Container (holds label + inputs).
+ group->container = new SectionContainer(
+ controller_->LabelForSection(section),
+ inputs_container,
+ group->suggested_button);
+ UpdateDetailsGroupState(*group);
}
void AutofillDialogViews::CreateBillingSection() {
@@ -363,9 +419,12 @@ void AutofillDialogViews::CreateBillingSection() {
billing->AddChildView(use_billing_for_shipping_);
// Container (holds label + inputs).
- views::View* container = CreateSectionContainer(
- controller_->LabelForSection(SECTION_BILLING), billing);
- billing_.container = container;
+ billing_.container = new SectionContainer(
+ controller_->LabelForSection(SECTION_BILLING),
+ billing,
+ billing_.suggested_button);
+ UpdateDetailsGroupState(billing_);
+ UpdateDetailsGroupState(cc_);
}
views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
@@ -402,15 +461,18 @@ views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
layout->AddView(info_view);
// TODO(estade): Fix the appearance of this button.
- views::MenuButton* menu_button =
- new views::MenuButton(NULL, string16(), this, true);
+ views::ImageButton* menu_button = new views::ImageButton(this);
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ menu_button->SetImage(views::CustomButton::STATE_NORMAL,
+ rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON));
+ menu_button->SetImage(views::CustomButton::STATE_PRESSED,
+ rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON_P));
layout->AddView(menu_button);
DetailsGroup* group = GroupForSection(section);
group->suggested_button = menu_button;
group->manual_input = manual_inputs;
group->suggested_info = suggested_info;
- UpdateDetailsGroupState(*group);
return inputs_container;
}
@@ -482,9 +544,14 @@ views::View* AutofillDialogViews::InitInputsView(DialogSection section) {
void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) {
string16 suggestion_text =
controller_->SuggestionTextForSection(group.section);
- group.manual_input->SetVisible(suggestion_text.empty());
- group.suggested_info->SetVisible(!suggestion_text.empty());
+ bool show_suggestions = !suggestion_text.empty();
+ group.manual_input->SetVisible(!show_suggestions);
+ group.suggested_info->SetVisible(show_suggestions);
group.suggested_info->SetText(suggestion_text);
+
+ if (group.container)
+ group.container->SetForwardMouseEvents(show_suggestions);
+
if (GetWidget())
GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
}
« no previous file with comments | « chrome/browser/ui/views/autofill/autofill_dialog_views.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698