Chromium Code Reviews| Index: chrome/browser/autofill/autofill_dialog_controller_mac.mm |
| diff --git a/chrome/browser/autofill/autofill_dialog_controller_mac.mm b/chrome/browser/autofill/autofill_dialog_controller_mac.mm |
| index 377e1cda7ada808bf8c33e782dbc00aa8c134f86..d0e16ae4cdc81c258a55013aaade9f570f74785e 100644 |
| --- a/chrome/browser/autofill/autofill_dialog_controller_mac.mm |
| +++ b/chrome/browser/autofill/autofill_dialog_controller_mac.mm |
| @@ -191,6 +191,7 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() { |
| @synthesize autoFillEnabled = autoFillEnabled_; |
| @synthesize auxiliaryEnabled = auxiliaryEnabled_; |
| @synthesize itemIsSelected = itemIsSelected_; |
| +@synthesize multipleSelected = multipleSelected_; |
| + (void)showAutoFillDialogWithObserver:(AutoFillDialogObserver*)observer |
| profile:(Profile*)profile |
| @@ -356,43 +357,45 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() { |
| creditCardSheetController.reset(nil); |
| } |
| -// Deletes selected item, either address or credit card depending on the item |
| -// selected. |
| +// Deletes selected items; either addresses, credit cards, or a mixture of the |
| +// two depending on the items selected. |
| - (IBAction)deleteSelection:(id)sender { |
| + NSIndexSet* selectedRows = [tableView_ selectedRowIndexes]; |
| NSInteger selectedRow = [tableView_ selectedRow]; |
| - if ([self isProfileRow:selectedRow]) { |
| - profiles_.erase(profiles_.begin() + [self profileIndexFromRow:selectedRow]); |
| - |
| - // Select the previous row if possible, else current row, else deselect all. |
| - if ([self tableView:tableView_ shouldSelectRow:selectedRow-1]) { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow-1] |
| - byExtendingSelection:NO]; |
| - } else if ([self tableView:tableView_ shouldSelectRow:selectedRow]) { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow] |
| - byExtendingSelection:NO]; |
| - } else { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSet] |
| - byExtendingSelection:NO]; |
| + NSInteger rowCount = [tableView_ numberOfRows]; |
| + |
| + // Loop through from last to first deleting selected items as we go. |
| + for (NSInteger i = rowCount-1; i>=0; --i) { |
|
Nico
2010/07/20 03:18:20
You want:
for (NSUInteger i = [selection last
|
| + if (![selectedRows containsIndex:i]) |
| + continue; |
| + |
| + // We keep track of the "top most" selection in the list so we know where |
| + // to to set new selection below. |
| + if (i < selectedRow) |
| + selectedRow = i; |
| + |
| + if ([self isProfileRow:i]) { |
| + profiles_.erase( |
| + profiles_.begin() + [self profileIndexFromRow:i]); |
| + } else if ([self isCreditCardRow:i]) { |
| + creditCards_.erase( |
| + creditCards_.begin() + [self creditCardIndexFromRow:i]); |
| } |
| - UpdateProfileLabels(&profiles_); |
| - [tableView_ reloadData]; |
| - } else if ([self isCreditCardRow:selectedRow]) { |
| - creditCards_.erase( |
| - creditCards_.begin() + [self creditCardIndexFromRow:selectedRow]); |
| - |
| - // Select the previous row if possible, else current row, else deselect all. |
| - if ([self tableView:tableView_ shouldSelectRow:selectedRow-1]) { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow-1] |
| - byExtendingSelection:NO]; |
| - } else if ([self tableView:tableView_ shouldSelectRow:selectedRow]) { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow] |
| - byExtendingSelection:NO]; |
| - } else { |
| - [tableView_ selectRowIndexes:[NSIndexSet indexSet] |
| - byExtendingSelection:NO]; |
| - } |
| - [tableView_ reloadData]; |
| } |
| + |
| + // Select the previous row if possible, else current row, else deselect all. |
| + if ([self tableView:tableView_ shouldSelectRow:selectedRow-1]) { |
| + [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow-1] |
| + byExtendingSelection:NO]; |
| + } else if ([self tableView:tableView_ shouldSelectRow:selectedRow]) { |
| + [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow] |
| + byExtendingSelection:NO]; |
| + } else { |
| + [tableView_ selectRowIndexes:[NSIndexSet indexSet] byExtendingSelection:NO]; |
| + } |
| + |
| + UpdateProfileLabels(&profiles_); |
| + [tableView_ reloadData]; |
| } |
| // Edits the selected item, either address or credit card depending on the item |
| @@ -542,14 +545,18 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() { |
| return @""; |
| } |
| -// We implement this delegate method to update our |itemIsSelected| property. |
| +// We implement this delegate method to update our |itemIsSelected| and |
| +// |multipleSelected| properties. |
| // The "Edit..." and "Remove" buttons' enabled state depends on having a |
| -// valid selection in the table. |
| +// valid selection in the table. The "Edit..." button depends on having |
| +// exactly one item selected. |
| - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { |
| if ([tableView_ selectedRow] >= 0) |
| [self setItemIsSelected:YES]; |
| else |
| [self setItemIsSelected:NO]; |
| + |
| + [self setMultipleSelected:([[tableView_ selectedRowIndexes] count] > 1UL)]; |
| } |
| - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { |
| @@ -654,6 +661,22 @@ void PersonalDataManagerObserver::OnPersonalDataLoaded() { |
| byExtendingSelection:NO]; |
| } |
| +- (void)addSelectedAddressAtIndex:(size_t)i { |
| + [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex: |
| + [self rowFromProfileIndex:i]] |
| + byExtendingSelection:YES]; |
| +} |
| + |
| +- (void)addSelectedCreditCardAtIndex:(size_t)i { |
| + [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex: |
| + [self rowFromCreditCardIndex:i]] |
| + byExtendingSelection:YES]; |
| +} |
| + |
| +- (BOOL)editButtonEnabled { |
| + return [editButton_ isEnabled]; |
| +} |
| + |
| @end |
| @implementation AutoFillDialogController (PrivateMethods) |