124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Copyright (c) 2013 The Chromium Authors. All rights reserved. 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Use of this source code is governed by a BSD-style license that can be 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// found in the LICENSE file. 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_MAIN_CONTAINER_H_ 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_MAIN_CONTAINER_H_ 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#import <Cocoa/Cocoa.h> 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/mac/scoped_nsobject.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "chrome/browser/ui/autofill/autofill_dialog_types.h" 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#import "chrome/browser/ui/cocoa/autofill/autofill_layout.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class AutofillDetailsContainer; 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class AutofillDialogWindowController; 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class AutofillNotificationContainer; 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class AutofillSectionContainer; 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class AutofillTooltipController; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class GTMWidthBasedTweaker; 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@class HyperlinkTextView; 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace autofill { 23899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton class AutofillDialogViewDelegate; 24899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton} 25899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 26899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// NSViewController for the main portion of the autofill dialog. Contains 27899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// account chooser, details for current payment instruments, OK/Cancel. 28899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Might dynamically add and remove other elements. 29899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@interface AutofillMainContainer : NSViewController<AutofillLayout, 30899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton NSTextViewDelegate> { 31899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton @private 32899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<GTMWidthBasedTweaker> buttonContainer_; 33899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<NSImageView> buttonStripImage_; 34899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<NSButton> saveInChromeCheckbox_; 35899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<AutofillTooltipController> saveInChromeTooltip_; 36899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<AutofillDetailsContainer> detailsContainer_; 37899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<HyperlinkTextView> legalDocumentsView_; 38899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton base::scoped_nsobject<AutofillNotificationContainer> notificationContainer_; 39899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton AutofillDialogWindowController* target_; 40899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 41899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // Weak. Owns the dialog. 42899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton autofill::AutofillDialogViewDelegate* delegate_; 43899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 44899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // Preferred size for legal documents. 45899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton NSSize legalDocumentsSize_; 46899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 47899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton // Dirty marker for preferred size. 48899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton BOOL legalDocumentsSizeDirty_; 49899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton} 50899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 51899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@property(assign, nonatomic) AutofillDialogWindowController* target; 52899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 53899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Designated initializer. 54899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton- (id)initWithDelegate:(autofill::AutofillDialogViewDelegate*)delegate; 55899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 56899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Returns the preferred size for the footer and notifications at the specfied 57899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// |width|. 58899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton- (NSSize)decorationSizeForWidth:(CGFloat)width; 59899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 60899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Sets the anchor point for the notificationView_. 61899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton- (void)setAnchorView:(NSView*)anchorView; 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Returns the view delegate responsible for |section|. 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner- (AutofillSectionContainer*)sectionForId:(autofill::DialogSection)section; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Called when the delegate-maintained suggestions model has changed. 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner- (void)modelChanged; 6824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Get status of "Save in Chrome" checkbox. 70b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton- (BOOL)saveDetailsLocally; 71e40b6424d9e49306392bec4b44060da36414c382Greg Clayton 72236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton// Called when the legal documents text might need to be refreshed. 73b01000fd063629facd45044f137446fb748ee179Greg Clayton- (void)updateLegalDocuments; 74236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton 75236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton// Called when there are changes to the notification area. 76236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton- (void)updateNotificationArea; 77b01000fd063629facd45044f137446fb748ee179Greg Clayton 78236c1c71fab5d56a4dbebaabb969a238f11d142eGreg Clayton// Called when the error bubble needs to be updated. 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner- (void)updateErrorBubble; 80899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 81899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Validates form input data. 82899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton- (BOOL)validate; 83899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 84899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton// Updates status of "save in Chrome" checkbox. 85899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton- (void)updateSaveInChrome; 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Makes the first invalid input first responder. 88e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton- (void)makeFirstInvalidInputFirstResponder; 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Called when the main container becomes visible. Ensures the right input field 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// becomes first responder, and positions the scrollview correctly. This MUST be 92940b103224f3062578c7a7e6e76d8bf4a7956f2aGreg Clayton// called after layout on the main container is complete, since it depends on 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// the size of the contained views to be correct. 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner- (void)scrollInitialEditorIntoViewAndMakeFirstResponder; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@end 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// AutofillMainContainer helper functions, for testing purposes only. 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner@interface AutofillMainContainer (Testing) 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 102899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@property(readonly, nonatomic) NSButton* saveInChromeCheckboxForTesting; 103899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@property(readonly, nonatomic) NSImageView* buttonStripImageForTesting; 104899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@property(readonly, nonatomic) NSImageView* saveInChromeTooltipForTesting; 105899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 106899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton@end 107899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton 108899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton#endif // CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_MAIN_CONTAINER_H_ 109899025fb72c0430e3b02746ca11c9070e9ede951Greg Clayton