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

Unified Diff: chrome/browser/ui/cocoa/autofill/autofill_section_container.mm

Issue 124533003: Add country combobox to change country and rebuild address inputs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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
Index: chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
index d67a1b3b5fca636ad9ba70ce9bae75476568bdc7..351bf74369331f6d16f784e0095185193259b261 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
@@ -104,8 +104,8 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
// Create a button offering input suggestions.
- (MenuButton*)makeSuggestionButton;
-// Create a view with all inputs requested by |delegate_|. Autoreleased.
-- (LayoutView*)makeInputControls;
+// Create a view with all inputs requested by |delegate_| and resets |input_|.
+- (void)makeInputControls;
// Refresh all field icons based on |delegate_| status.
- (void)updateFieldIcons;
@@ -159,27 +159,8 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
}
- (void)loadView {
- // Keep a list of weak pointers to DetailInputs.
- const autofill::DetailInputs& inputs =
- delegate_->RequestedFieldsForSection(section_);
-
- // Reverse the order of all the inputs.
- for (int i = inputs.size() - 1; i >= 0; --i) {
- detailInputs_.push_back(&(inputs[i]));
- }
-
- // Then right the reversal in each row.
- std::vector<const autofill::DetailInput*>::iterator it;
- for (it = detailInputs_.begin(); it < detailInputs_.end(); ++it) {
- std::vector<const autofill::DetailInput*>::iterator start = it;
- while (it != detailInputs_.end() &&
- (*it)->length != autofill::DetailInput::LONG) {
- ++it;
- }
- std::reverse(start, it);
- }
+ [self makeInputControls];
- inputs_.reset([[self makeInputControls] retain]);
base::string16 labelText = delegate_->LabelForSection(section_);
label_.reset(
[[self makeDetailSectionLabel:base::SysUTF16ToNSString(labelText)]
@@ -303,6 +284,14 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
- (void)didEndEditing:(id)sender {
delegate_->FocusMoved();
[validationDelegate_ hideErrorBubble];
+
+ AutofillPopUpButton* popup = base::mac::ObjCCast<AutofillPopUpButton>(sender);
+ if (popup) {
groby-ooo-7-16 2014/01/10 01:56:38 If you must get a separate popup notification, I'd
Dan Beam 2014/01/11 04:16:58 see updated code
+ // Add one to account for the spacer at the top of the list.
+ int index = [popup indexOfSelectedItem] + 1;
+ delegate_->ComboboxItemSelected([self fieldTypeForControl:popup], index);
+ }
+
[self validateFor:autofill::VALIDATE_EDIT];
[self updateEditability];
}
@@ -514,23 +503,28 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
}
- (void)updateAndClobber:(BOOL)shouldClobber {
- const autofill::DetailInputs& updatedInputs =
- delegate_->RequestedFieldsForSection(section_);
+ if (shouldClobber) {
groby-ooo-7-16 2014/01/10 01:56:38 I'd prefer to not rebuild the entire layout whenev
Dan Beam 2014/01/11 04:16:58 we talked about this and will wait until it's noti
+ [self makeInputControls];
groby-ooo-7-16 2014/01/10 01:56:38 Also, you presumably want to request a relayout he
Dan Beam 2014/01/11 04:16:58 Done.
+ } else {
+ const autofill::DetailInputs& updatedInputs =
+ delegate_->RequestedFieldsForSection(section_);
- for (autofill::DetailInputs::const_iterator iter = updatedInputs.begin();
- iter != updatedInputs.end();
- ++iter) {
- NSControl<AutofillInputField>* field = [inputs_ viewWithTag:iter->type];
- DCHECK(field);
+ for (autofill::DetailInputs::const_iterator iter = updatedInputs.begin();
+ iter != updatedInputs.end();
+ ++iter) {
+ NSControl<AutofillInputField>* field = [inputs_ viewWithTag:iter->type];
+ DCHECK(field);
- if (shouldClobber || [field isDefault]) {
- [field setFieldValue:base::SysUTF16ToNSString(iter->initial_value)];
+ if (shouldClobber || [field isDefault]) {
+ [field setFieldValue:base::SysUTF16ToNSString(iter->initial_value)];
+ }
+ if (shouldClobber)
groby-ooo-7-16 2014/01/10 01:56:38 How could shouldClobber ever be true here? You're
Dan Beam 2014/01/11 04:16:58 copy pasta, removed
+ [field setValidityMessage:@""];
}
- if (shouldClobber)
- [field setValidityMessage:@""];
+ [self updateFieldIcons];
}
+
[self updateEditability];
- [self updateFieldIcons];
[self modelChanged];
}
@@ -571,7 +565,29 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
// TODO(estade): we should be using Chrome-style constrained window padding
// values.
-- (LayoutView*)makeInputControls {
+- (void)makeInputControls {
+ detailInputs_.clear();
+
+ // Keep a list of weak pointers to DetailInputs.
+ const autofill::DetailInputs& inputs =
+ delegate_->RequestedFieldsForSection(section_);
+
+ // Reverse the order of all the inputs.
+ for (int i = inputs.size() - 1; i >= 0; --i) {
+ detailInputs_.push_back(&(inputs[i]));
+ }
+
+ // Then right the reversal in each row.
+ std::vector<const autofill::DetailInput*>::iterator it;
+ for (it = detailInputs_.begin(); it < detailInputs_.end(); ++it) {
+ std::vector<const autofill::DetailInput*>::iterator start = it;
+ while (it != detailInputs_.end() &&
+ (*it)->length != autofill::DetailInput::LONG) {
+ ++it;
+ }
+ std::reverse(start, it);
+ }
+
base::scoped_nsobject<LayoutView> view([[LayoutView alloc] init]);
[view setLayoutManager:
scoped_ptr<SimpleGridLayout>(new SimpleGridLayout(view))];
@@ -625,11 +641,11 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
NSString* tooltipText =
base::SysUTF16ToNSString(delegate_->TooltipForField(input.type));
if ([tooltipText length] > 0) {
- DCHECK(!tooltipController_);
- DCHECK(!tooltipField_);
- tooltipController_.reset(
- [[AutofillTooltipController alloc]
- initWithArrowLocation:info_bubble::kTopRight]);
+ if (!tooltipController_) {
+ tooltipController_.reset(
+ [[AutofillTooltipController alloc]
+ initWithArrowLocation:info_bubble::kTopRight]);
+ }
tooltipField_ = field.get();
NSImage* icon =
ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
@@ -659,7 +675,11 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
}
[self updateFieldIcons];
- return view.autorelease();
+
+ if (inputs_)
+ [[self view] replaceSubview:inputs_ with:view];
+
+ inputs_ = view;
}
- (void)updateFieldIcons {
@@ -682,7 +702,6 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
}
- (void)updateEditability {
-
base::scoped_nsobject<NSMutableArray> controls([[NSMutableArray alloc] init]);
[self addInputsToArray:controls];
for (NSControl<AutofillInputField>* control in controls.get()) {
@@ -704,8 +723,14 @@ bool ShouldOverwriteComboboxes(autofill::DialogSection section,
- (void)setFieldValue:(NSString*)text
forType:(autofill::ServerFieldType)type {
NSControl<AutofillInputField>* field = [inputs_ viewWithTag:type];
- if (field)
+ if (field) {
+ AutofillPopUpButton* popup =
groby-ooo-7-16 2014/01/10 01:56:38 Please do that in AutofillPopUp, not here.
Dan Beam 2014/01/11 04:16:58 Done.
+ base::mac::ObjCCast<AutofillPopUpButton>(field);
+ int index = popup ? [popup indexOfSelectedItem] : -1;
[field setFieldValue:text];
+ if (popup && [popup indexOfSelectedItem] != index)
+ [self didEndEditing:field];
+ }
}
- (void)setSuggestionFieldValue:(NSString*)text {

Powered by Google App Engine
This is Rietveld 408576698