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