summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authorgeorgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-05 20:59:59 +0000
committergeorgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-05 20:59:59 +0000
commitbe82dced35dab699b978c6b9f256f78b3ee99900 (patch)
treea629ccf652344bede3385c17e2622dd8f079ffbb /chrome/browser/views
parent7b679d3131ec3c94ef9d8a6a7d89516b43e81a35 (diff)
downloadchromium_src-be82dced35dab699b978c6b9f256f78b3ee99900.zip
chromium_src-be82dced35dab699b978c6b9f256f78b3ee99900.tar.gz
chromium_src-be82dced35dab699b978c6b9f256f78b3ee99900.tar.bz2
Added validation for non-emptiness of the label.
TEST=If any label (in address or credit card) is empty, the save button is disabled. Otherwise it is enabled. BUG=33026 Review URL: http://codereview.chromium.org/575027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38245 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r--chrome/browser/views/autofill_profiles_view_win.cc50
-rw-r--r--chrome/browser/views/autofill_profiles_view_win.h6
2 files changed, 55 insertions, 1 deletions
diff --git a/chrome/browser/views/autofill_profiles_view_win.cc b/chrome/browser/views/autofill_profiles_view_win.cc
index 1a4b303..0784dce 100644
--- a/chrome/browser/views/autofill_profiles_view_win.cc
+++ b/chrome/browser/views/autofill_profiles_view_win.cc
@@ -76,7 +76,8 @@ AutoFillProfilesView::AutoFillProfilesView(
const std::vector<CreditCard*>& credit_cards)
: observer_(observer),
scroll_view_(NULL),
- save_changes_(NULL) {
+ save_changes_(NULL),
+ data_valid_(true) {
profiles_set_.reserve(profiles.size());
for (std::vector<AutoFillProfile*>::const_iterator address_it =
profiles.begin();
@@ -123,6 +124,7 @@ void AutoFillProfilesView::AddClicked(EditableSetType item_type) {
} else {
NOTREACHED();
}
+ ValidateDataAndUpdateButtons();
scroll_view_->RebuildView();
}
@@ -142,6 +144,7 @@ void AutoFillProfilesView::DeleteEditableSet(
} else {
credit_card_set_.erase(field_set_iterator);
}
+ ValidateDataAndUpdateButtons();
scroll_view_->RebuildView();
}
@@ -150,6 +153,25 @@ void AutoFillProfilesView::CollapseStateChanged(
scroll_view_->RebuildView();
}
+void AutoFillProfilesView::ValidateDataAndUpdateButtons() {
+ bool valid = true;
+ for (std::vector<EditableSetInfo>::iterator it = profiles_set_.begin();
+ it != profiles_set_.end() && valid;
+ ++it) {
+ if (it->address.Label().empty())
+ valid = false;
+ }
+ for (std::vector<EditableSetInfo>::iterator it = credit_card_set_.begin();
+ it != credit_card_set_.end() && valid;
+ ++it) {
+ if (it->credit_card.Label().empty())
+ valid = false;
+ }
+ if ((data_valid_ && !valid) || (!data_valid_ && valid)) {
+ data_valid_ = valid;
+ GetDialogClientView()->UpdateDialogButtons();
+ }
+}
/////////////////////////////////////////////////////////////////////////////
// AutoFillProfilesView, views::View implementations
@@ -193,6 +215,21 @@ std::wstring AutoFillProfilesView::GetDialogButtonLabel(
return std::wstring();
}
+bool AutoFillProfilesView::IsDialogButtonEnabled(
+ MessageBoxFlags::DialogButton button) const {
+ switch (button) {
+ case MessageBoxFlags::DIALOGBUTTON_OK:
+ return data_valid();
+ case MessageBoxFlags::DIALOGBUTTON_CANCEL:
+ return true;
+ default:
+ break;
+ }
+ NOTREACHED();
+ return false;
+}
+
+
std::wstring AutoFillProfilesView::GetWindowTitle() const {
return l10n_util::GetString(IDS_AUTOFILL_DIALOG_TITLE);
}
@@ -246,6 +283,7 @@ void AutoFillProfilesView::Init() {
views::GridLayout::USE_PREF, 0, 0);
layout->StartRow(1, single_column_view_set_id);
layout->AddView(scroll_view_);
+ ValidateDataAndUpdateButtons();
}
/////////////////////////////////////////////////////////////////////////////
@@ -429,11 +467,16 @@ void AutoFillProfilesView::EditableSetViewContents::ContentsChanged(
DCHECK(text_fields_[address_fields_[field].text_field]);
if (text_fields_[address_fields_[field].text_field] == sender) {
if (address_fields_[field].text_field == TEXT_LABEL) {
+ bool need_to_revalidate_buttons =
+ editable_fields_set_->address.Label().empty() ||
+ new_contents.empty();
editable_fields_set_->address.set_label(new_contents);
title_label_->SetText(new_contents);
// One of the address labels changed - update combo boxes
billing_model_->LabelChanged();
shipping_model_->LabelChanged();
+ if (need_to_revalidate_buttons)
+ observer_->ValidateDataAndUpdateButtons();
} else {
editable_fields_set_->address.SetInfo(
AutoFillType(address_fields_[field].type), new_contents);
@@ -446,8 +489,13 @@ void AutoFillProfilesView::EditableSetViewContents::ContentsChanged(
DCHECK(text_fields_[credit_card_fields_[field].text_field]);
if (text_fields_[credit_card_fields_[field].text_field] == sender) {
if (credit_card_fields_[field].text_field == TEXT_LABEL) {
+ bool need_to_revalidate_buttons =
+ editable_fields_set_->address.Label().empty() ||
+ new_contents.empty();
editable_fields_set_->credit_card.set_label(new_contents);
title_label_->SetText(new_contents);
+ if (need_to_revalidate_buttons)
+ observer_->ValidateDataAndUpdateButtons();
} else {
editable_fields_set_->credit_card.SetInfo(
AutoFillType(credit_card_fields_[field].type), new_contents);
diff --git a/chrome/browser/views/autofill_profiles_view_win.h b/chrome/browser/views/autofill_profiles_view_win.h
index 3eac54e..6345869 100644
--- a/chrome/browser/views/autofill_profiles_view_win.h
+++ b/chrome/browser/views/autofill_profiles_view_win.h
@@ -73,6 +73,9 @@ class AutoFillProfilesView : public views::View,
// being changed.
void CollapseStateChanged(
std::vector<EditableSetInfo>::iterator field_set_iterator);
+ // Validates data and sets data_valid_, to allow or deny save.
+ void ValidateDataAndUpdateButtons();
+ bool data_valid() const { return data_valid_; }
// views::View methods:
virtual void Layout();
@@ -84,6 +87,8 @@ class AutoFillProfilesView : public views::View,
virtual int GetDialogButtons() const;
virtual std::wstring GetDialogButtonLabel(
MessageBoxFlags::DialogButton button) const;
+ virtual bool IsDialogButtonEnabled(
+ MessageBoxFlags::DialogButton button) const;
virtual bool CanResize() const { return true; }
virtual bool CanMaximize() const { return true; }
virtual bool IsAlwaysOnTop() const { return false; }
@@ -351,6 +356,7 @@ class AutoFillProfilesView : public views::View,
AutoFillDialogObserver* observer_;
std::vector<EditableSetInfo> profiles_set_;
std::vector<EditableSetInfo> credit_card_set_;
+ bool data_valid_;
views::Button* save_changes_;
AutoFillScrollView* scroll_view_;