diff options
author | georgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 20:59:59 +0000 |
---|---|---|
committer | georgey@chromium.org <georgey@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 20:59:59 +0000 |
commit | be82dced35dab699b978c6b9f256f78b3ee99900 (patch) | |
tree | a629ccf652344bede3385c17e2622dd8f079ffbb /chrome/browser/views | |
parent | 7b679d3131ec3c94ef9d8a6a7d89516b43e81a35 (diff) | |
download | chromium_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.cc | 50 | ||||
-rw-r--r-- | chrome/browser/views/autofill_profiles_view_win.h | 6 |
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_; |