OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ios/chrome/browser/infobars/confirm_infobar_controller.h" | 5 #include "ios/chrome/browser/infobars/confirm_infobar_controller.h" |
6 | 6 |
7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
9 #include "components/infobars/core/confirm_infobar_delegate.h" | 9 #include "components/infobars/core/confirm_infobar_delegate.h" |
10 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 10 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
(...skipping 30 matching lines...) Expand all Loading... |
41 - (void)infoBarButtonDidPress:(id)sender; | 41 - (void)infoBarButtonDidPress:(id)sender; |
42 | 42 |
43 @end | 43 @end |
44 | 44 |
45 @implementation ConfirmInfoBarController { | 45 @implementation ConfirmInfoBarController { |
46 } | 46 } |
47 | 47 |
48 #pragma mark - | 48 #pragma mark - |
49 #pragma mark InfoBarController | 49 #pragma mark InfoBarController |
50 | 50 |
51 - (void)layoutForDelegate:(infobars::InfoBarDelegate*)delegate | 51 - (base::scoped_nsobject<UIView<InfoBarViewProtocol>>) |
52 frame:(CGRect)frame { | 52 viewForDelegate:(infobars::InfoBarDelegate*)delegate |
| 53 frame:(CGRect)frame { |
| 54 base::scoped_nsobject<UIView<InfoBarViewProtocol>> infoBarView; |
53 ConfirmInfoBarDelegate* infoBarModel = delegate->AsConfirmInfoBarDelegate(); | 55 ConfirmInfoBarDelegate* infoBarModel = delegate->AsConfirmInfoBarDelegate(); |
54 DCHECK(!infoBarView_); | 56 infoBarView.reset( |
55 infoBarView_.reset([ios::GetChromeBrowserProvider()->CreateInfoBarView() | 57 ios::GetChromeBrowserProvider()->CreateInfoBarView(frame, self.delegate)); |
56 initWithFrame:frame | |
57 delegate:delegate_]); | |
58 | |
59 // Model data. | 58 // Model data. |
60 NSString* modelMsg = nil; | 59 NSString* modelMsg = nil; |
61 if (infoBarModel->GetMessageText().length()) | 60 if (infoBarModel->GetMessageText().length()) |
62 modelMsg = base::SysUTF16ToNSString(infoBarModel->GetMessageText()); | 61 modelMsg = base::SysUTF16ToNSString(infoBarModel->GetMessageText()); |
63 gfx::Image modelIcon = infoBarModel->GetIcon(); | 62 gfx::Image modelIcon = infoBarModel->GetIcon(); |
64 int buttons = infoBarModel->GetButtons(); | 63 int buttons = infoBarModel->GetButtons(); |
65 NSString* buttonOK = nil; | 64 NSString* buttonOK = nil; |
66 if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) { | 65 if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) { |
67 buttonOK = base::SysUTF16ToNSString( | 66 buttonOK = base::SysUTF16ToNSString( |
68 infoBarModel->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK)); | 67 infoBarModel->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK)); |
69 } | 68 } |
70 NSString* buttonCancel = nil; | 69 NSString* buttonCancel = nil; |
71 if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { | 70 if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { |
72 buttonCancel = base::SysUTF16ToNSString( | 71 buttonCancel = base::SysUTF16ToNSString( |
73 infoBarModel->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL)); | 72 infoBarModel->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL)); |
74 } | 73 } |
75 | 74 |
76 [infoBarView_ addCloseButtonWithTag:ConfirmInfoBarUITags::CLOSE | 75 [infoBarView addCloseButtonWithTag:ConfirmInfoBarUITags::CLOSE |
77 target:self | 76 target:self |
78 action:@selector(infoBarButtonDidPress:)]; | 77 action:@selector(infoBarButtonDidPress:)]; |
79 | 78 |
80 // Optional left icon. | 79 // Optional left icon. |
81 if (!modelIcon.IsEmpty()) | 80 if (!modelIcon.IsEmpty()) |
82 [infoBarView_ addLeftIcon:modelIcon.ToUIImage()]; | 81 [infoBarView addLeftIcon:modelIcon.ToUIImage()]; |
83 | 82 |
84 // Optional message. | 83 // Optional message. |
85 if (modelMsg) | 84 if (modelMsg) |
86 [infoBarView_ addLabel:modelMsg]; | 85 [infoBarView addLabel:modelMsg]; |
87 | 86 |
88 if (buttonOK && buttonCancel) { | 87 if (buttonOK && buttonCancel) { |
89 [infoBarView_ addButton1:buttonOK | 88 [infoBarView addButton1:buttonOK |
90 tag1:ConfirmInfoBarUITags::OK | 89 tag1:ConfirmInfoBarUITags::OK |
91 button2:buttonCancel | 90 button2:buttonCancel |
92 tag2:ConfirmInfoBarUITags::CANCEL | 91 tag2:ConfirmInfoBarUITags::CANCEL |
93 target:self | |
94 action:@selector(infoBarButtonDidPress:)]; | |
95 } else if (buttonOK) { | |
96 [infoBarView_ addButton:buttonOK | |
97 tag:ConfirmInfoBarUITags::OK | |
98 target:self | 92 target:self |
99 action:@selector(infoBarButtonDidPress:)]; | 93 action:@selector(infoBarButtonDidPress:)]; |
| 94 } else if (buttonOK) { |
| 95 [infoBarView addButton:buttonOK |
| 96 tag:ConfirmInfoBarUITags::OK |
| 97 target:self |
| 98 action:@selector(infoBarButtonDidPress:)]; |
100 } else { | 99 } else { |
101 // No buttons, only message. | 100 // No buttons, only message. |
102 DCHECK(modelMsg && !buttonCancel); | 101 DCHECK(modelMsg && !buttonCancel); |
103 } | 102 } |
| 103 return infoBarView; |
104 } | 104 } |
105 | 105 |
106 #pragma mark - Handling of User Events | 106 #pragma mark - Handling of User Events |
107 | 107 |
108 - (void)infoBarButtonDidPress:(id)sender { | 108 - (void)infoBarButtonDidPress:(id)sender { |
109 // This press might have occurred after the user has already pressed a button, | 109 // This press might have occurred after the user has already pressed a button, |
110 // in which case the view has been detached from the delegate and this press | 110 // in which case the view has been detached from the delegate and this press |
111 // should be ignored. | 111 // should be ignored. |
112 if (!delegate_) { | 112 if (!self.delegate) { |
113 return; | 113 return; |
114 } | 114 } |
115 if ([sender isKindOfClass:[UIButton class]]) { | 115 if ([sender isKindOfClass:[UIButton class]]) { |
116 NSUInteger tag = static_cast<UIButton*>(sender).tag; | 116 NSUInteger tag = static_cast<UIButton*>(sender).tag; |
117 if (tag == ConfirmInfoBarUITags::CLOSE) | 117 if (tag == ConfirmInfoBarUITags::CLOSE) |
118 delegate_->InfoBarDidCancel(); | 118 self.delegate->InfoBarDidCancel(); |
119 else | 119 else |
120 delegate_->InfoBarButtonDidPress(UITagToButton(tag)); | 120 self.delegate->InfoBarButtonDidPress(UITagToButton(tag)); |
121 } | 121 } |
122 } | 122 } |
123 | 123 |
124 @end | 124 @end |
OLD | NEW |