Index: chrome/browser/ui/views/autofill/autofill_dialog_views.h |
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.h b/chrome/browser/ui/views/autofill/autofill_dialog_views.h |
index a71d67c850372aa4252d6c6254792a08519ab73f..faacbbfdad8dd9b28e3b2983c0aa8b8998e31f32 100644 |
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.h |
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.h |
@@ -7,6 +7,7 @@ |
#include <map> |
+#include "base/memory/scoped_vector.h" |
#include "chrome/browser/ui/autofill/autofill_dialog_controller.h" |
#include "chrome/browser/ui/autofill/autofill_dialog_view.h" |
#include "ui/views/controls/button/button.h" |
@@ -24,6 +25,7 @@ class KeyboardListener; |
} |
namespace gfx { |
+class Font; |
class Image; |
} |
@@ -31,6 +33,7 @@ namespace views { |
class Checkbox; |
class Combobox; |
class FocusManager; |
+class GridLayout; |
class ImageButton; |
class ImageView; |
class Label; |
@@ -76,6 +79,7 @@ class AutofillDialogViews : public AutofillDialogView, |
virtual const content::NavigationController& ShowSignIn() OVERRIDE; |
virtual void HideSignIn() OVERRIDE; |
virtual void UpdateProgressBar(double value) OVERRIDE; |
+ virtual void UpdateFootnote() OVERRIDE; |
// views::DialogDelegate implementation: |
virtual string16 GetWindowTitle() const OVERRIDE; |
@@ -262,13 +266,66 @@ class AutofillDialogViews : public AutofillDialogView, |
public: |
AutocheckoutProgressBar(); |
- private: |
// Overidden from View: |
virtual gfx::Size GetPreferredSize() OVERRIDE; |
+ private: |
DISALLOW_COPY_AND_ASSIGN(AutocheckoutProgressBar); |
}; |
+ class FootnoteView : public views::View { |
+ public: |
+ FootnoteView(); |
+ virtual ~FootnoteView(); |
+ |
+ void AddLabel(views::Label* label, bool is_link); |
+ int IndexOfLink(views::Label* link); // Returns -1 if not found. |
+ |
+ // views::View implementation. |
+ virtual std::string GetClassName() const OVERRIDE; |
+ virtual void Layout() OVERRIDE; |
+ |
+ private: |
+ struct FootnoteLabel { |
+ scoped_ptr<views::Label> label; |
+ bool is_link; |
+ }; |
+ |
+ void StartRow(); |
+ views::View* CurrentRow(); |
+ void ResetLayoutManager(); |
+ void ResetRows(); |
+ |
+ void AppendText(const string16& text_part); |
+ const string16& CurrentText() const; |
+ void ResetText(); |
+ |
+ void AddWidth(size_t width); |
+ size_t CurrentWidth() const; |
+ int ParentWidth(); |
+ void ResetWidth(); |
+ int WidthRemaining(); |
+ |
+ void AddCloneWithWidth(views::Label* label, size_t width); |
+ views::Label* CloneLabel(const string16& text, |
+ const gfx::Font& font, |
+ bool is_link); |
+ void TransferListener(views::Label* from_label, views::Label* to_label); |
+ |
+ void Reset(); |
+ |
+ ScopedVector<FootnoteLabel> footnote_labels_; // owned by us. |
+ std::vector<views::Label*> links_; // weak. |
+ string16 current_text_; |
+ |
+ size_t current_width_; |
+ views::GridLayout* layout_; // weak; owned by view hierarchy. |
+ int previous_parent_width_; |
+ const int single_column_set_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FootnoteView); |
+ }; |
+ |
typedef std::map<DialogSection, DetailsGroup> DetailGroupMap; |
void InitChildViews(); |
@@ -279,11 +336,17 @@ class AutofillDialogViews : public AutofillDialogView, |
// Creates and returns a view that holds the requesting host and intro text. |
views::View* CreateNotificationArea(); |
+ // Creates and returns a view that holds the main controls of this dialog. |
+ views::View* CreateMainContainer(); |
+ |
// Creates and returns a view that holds a sign in page and related controls. |
views::View* CreateSignInContainer(); |
- // Creates and returns a view that holds the main controls of this dialog. |
- views::View* CreateMainContainer(); |
+ // Creates footnote container. |
+ void CreateFootnoteView(); |
+ |
+ // [Re-]populates footnote links based on the controller's link text parts. |
+ void PopulateFootnoteLinks(); |
// Creates a detail section (Shipping, Email, etc.) with the given label, |
// inputs View, and suggestion model. Relevant pointers are stored in |group|. |
@@ -323,6 +386,10 @@ class AutofillDialogViews : public AutofillDialogView, |
// the input. |
void TextfieldEditedOrActivated(views::Textfield* textfield, bool was_edit); |
+ // When something inside of |contents_| could've changed in height, call this |
+ // to ensure |contents_|' preferred size is correct. |
+ void ContentsResized(); |
+ |
// The controller that drives this view. Weak pointer, always non-NULL. |
AutofillDialogController* const controller_; |
@@ -379,6 +446,10 @@ class AutofillDialogViews : public AutofillDialogView, |
// Progress bar for displaying Autocheckout progress. |
AutocheckoutProgressBar* autocheckout_progress_bar_; |
+ // View shown when accepting of a new Terms of Service is required. Lives |
+ // below the Cancel/Submit buttons. |
+ FootnoteView* footnote_view_; |
+ |
// The focus manager for |window_|. |
views::FocusManager* focus_manager_; |