OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/translate/after_translate_infobar_controller.h" | 5 #include "ios/chrome/browser/translate/after_translate_infobar_controller.h" |
6 | 6 |
7 #include "base/mac/scoped_nsobject.h" | |
8 #include "base/strings/sys_string_conversions.h" | 7 #include "base/strings/sys_string_conversions.h" |
9 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
10 #include "components/strings/grit/components_strings.h" | 9 #include "components/strings/grit/components_strings.h" |
11 #include "components/translate/core/browser/translate_infobar_delegate.h" | 10 #include "components/translate/core/browser/translate_infobar_delegate.h" |
12 #include "ios/chrome/browser/translate/translate_infobar_tags.h" | 11 #include "ios/chrome/browser/translate/translate_infobar_tags.h" |
13 #import "ios/chrome/browser/ui/infobars/infobar_view.h" | 12 #import "ios/chrome/browser/ui/infobars/infobar_view.h" |
14 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" | 13 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" |
15 #include "ui/base/l10n/l10n_util.h" | 14 #include "ui/base/l10n/l10n_util.h" |
16 #include "ui/gfx/image/image.h" | 15 #include "ui/gfx/image/image.h" |
17 | 16 |
| 17 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 18 #error "This file requires ARC support." |
| 19 #endif |
| 20 |
18 namespace { | 21 namespace { |
19 enum AlwaysTranslateSwitchState { | 22 enum AlwaysTranslateSwitchState { |
20 ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED, | 23 ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED, |
21 ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED, | 24 ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED, |
22 ALWAYS_TRANSLATE_SWITCH_SET_TO_DISABLED, | 25 ALWAYS_TRANSLATE_SWITCH_SET_TO_DISABLED, |
23 }; | 26 }; |
24 } // namespace | 27 } // namespace |
25 | 28 |
26 @interface AfterTranslateInfoBarController () { | 29 @interface AfterTranslateInfoBarController () { |
27 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak | 30 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak |
28 AlwaysTranslateSwitchState _alwaysTranslateSwitchState; | 31 AlwaysTranslateSwitchState _alwaysTranslateSwitchState; |
29 } | 32 } |
30 | 33 |
31 // Action for any of the user defined buttons. | 34 // Action for any of the user defined buttons. |
32 - (void)infoBarButtonDidPress:(id)sender; | 35 - (void)infoBarButtonDidPress:(id)sender; |
33 | 36 |
34 @end | 37 @end |
35 | 38 |
36 @implementation AfterTranslateInfoBarController | 39 @implementation AfterTranslateInfoBarController |
37 | 40 |
38 #pragma mark - | 41 #pragma mark - |
39 #pragma mark InfoBarControllerProtocol | 42 #pragma mark InfoBarControllerProtocol |
40 | 43 |
41 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate | 44 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate |
42 frame:(CGRect)frame { | 45 frame:(CGRect)frame { |
43 base::scoped_nsobject<InfoBarView> infoBarView; | 46 InfoBarView* infoBarView; |
44 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); | 47 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); |
45 DCHECK(_translateInfoBarDelegate); | 48 DCHECK(_translateInfoBarDelegate); |
46 infoBarView.reset( | 49 infoBarView = |
47 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]); | 50 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]; |
48 // Icon | 51 // Icon |
49 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); | 52 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); |
50 if (!icon.IsEmpty()) | 53 if (!icon.IsEmpty()) |
51 [infoBarView addLeftIcon:icon.ToUIImage()]; | 54 [infoBarView addLeftIcon:icon.ToUIImage()]; |
52 // Main text. | 55 // Main text. |
53 const bool autodeterminedSourceLanguage = | 56 const bool autodeterminedSourceLanguage = |
54 _translateInfoBarDelegate->original_language_code() == | 57 _translateInfoBarDelegate->original_language_code() == |
55 translate::kUnknownLanguageCode; | 58 translate::kUnknownLanguageCode; |
56 bool swappedLanguageButtons; | 59 bool swappedLanguageButtons; |
57 std::vector<base::string16> strings; | 60 std::vector<base::string16> strings; |
58 translate::TranslateInfoBarDelegate::GetAfterTranslateStrings( | 61 translate::TranslateInfoBarDelegate::GetAfterTranslateStrings( |
59 &strings, &swappedLanguageButtons, autodeterminedSourceLanguage); | 62 &strings, &swappedLanguageButtons, autodeterminedSourceLanguage); |
60 DCHECK_EQ(autodeterminedSourceLanguage ? 2U : 3U, strings.size()); | 63 DCHECK_EQ(autodeterminedSourceLanguage ? 2U : 3U, strings.size()); |
61 NSString* label1 = base::SysUTF16ToNSString(strings[0]); | 64 NSString* label1 = base::SysUTF16ToNSString(strings[0]); |
62 NSString* label2 = base::SysUTF16ToNSString(strings[1]); | 65 NSString* label2 = base::SysUTF16ToNSString(strings[1]); |
63 NSString* label3 = autodeterminedSourceLanguage | 66 NSString* label3 = autodeterminedSourceLanguage |
64 ? @"" | 67 ? @"" |
65 : base::SysUTF16ToNSString(strings[2]); | 68 : base::SysUTF16ToNSString(strings[2]); |
66 base::string16 stdOriginal = | 69 base::string16 stdOriginal = |
67 _translateInfoBarDelegate->original_language_name(); | 70 _translateInfoBarDelegate->original_language_name(); |
68 NSString* original = base::SysUTF16ToNSString(stdOriginal); | 71 NSString* original = base::SysUTF16ToNSString(stdOriginal); |
69 NSString* target = base::SysUTF16ToNSString( | 72 NSString* target = base::SysUTF16ToNSString( |
70 _translateInfoBarDelegate->target_language_name()); | 73 _translateInfoBarDelegate->target_language_name()); |
71 base::scoped_nsobject<NSString> label( | 74 NSString* label = |
72 [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original, | 75 [[NSString alloc] initWithFormat:@"%@ %@ %@%@ %@.", label1, original, |
73 label2, label3, target]); | 76 label2, label3, target]; |
74 [infoBarView addLabel:label]; | 77 [infoBarView addLabel:label]; |
75 // Close button. | 78 // Close button. |
76 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::CLOSE | 79 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::CLOSE |
77 target:self | 80 target:self |
78 action:@selector(infoBarButtonDidPress:)]; | 81 action:@selector(infoBarButtonDidPress:)]; |
79 // Other buttons. | 82 // Other buttons. |
80 NSString* buttonRevert = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_REVERT); | 83 NSString* buttonRevert = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_REVERT); |
81 NSString* buttonOptions = l10n_util::GetNSString(IDS_DONE); | 84 NSString* buttonOptions = l10n_util::GetNSString(IDS_DONE); |
82 [infoBarView addButton1:buttonOptions | 85 [infoBarView addButton1:buttonOptions |
83 tag1:TranslateInfoBarIOSTag::AFTER_DONE | 86 tag1:TranslateInfoBarIOSTag::AFTER_DONE |
84 button2:buttonRevert | 87 button2:buttonRevert |
85 tag2:TranslateInfoBarIOSTag::AFTER_REVERT | 88 tag2:TranslateInfoBarIOSTag::AFTER_REVERT |
86 target:self | 89 target:self |
87 action:@selector(infoBarButtonDidPress:)]; | 90 action:@selector(infoBarButtonDidPress:)]; |
88 // Always translate switch. | 91 // Always translate switch. |
89 _alwaysTranslateSwitchState = ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED; | 92 _alwaysTranslateSwitchState = ALWAYS_TRANSLATE_SWITCH_NOT_CHANGED; |
90 if (_translateInfoBarDelegate->ShouldShowAlwaysTranslateShortcut()) { | 93 if (_translateInfoBarDelegate->ShouldShowAlwaysTranslateShortcut()) { |
91 base::string16 alwaysTranslate = l10n_util::GetStringFUTF16( | 94 base::string16 alwaysTranslate = l10n_util::GetStringFUTF16( |
92 IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, stdOriginal); | 95 IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, stdOriginal); |
93 const BOOL switchValue = _translateInfoBarDelegate->ShouldAlwaysTranslate(); | 96 const BOOL switchValue = _translateInfoBarDelegate->ShouldAlwaysTranslate(); |
94 [infoBarView | 97 [infoBarView |
95 addSwitchWithLabel:base::SysUTF16ToNSString(alwaysTranslate) | 98 addSwitchWithLabel:base::SysUTF16ToNSString(alwaysTranslate) |
96 isOn:switchValue | 99 isOn:switchValue |
97 tag:TranslateInfoBarIOSTag::ALWAYS_TRANSLATE_SWITCH | 100 tag:TranslateInfoBarIOSTag::ALWAYS_TRANSLATE_SWITCH |
98 target:self | 101 target:self |
99 action:@selector(infoBarSwitchDidPress:)]; | 102 action:@selector(infoBarSwitchDidPress:)]; |
100 } | 103 } |
101 return [[infoBarView retain] autorelease]; | 104 return infoBarView; |
102 } | 105 } |
103 | 106 |
104 #pragma mark - Handling of User Events | 107 #pragma mark - Handling of User Events |
105 | 108 |
106 - (void)infoBarButtonDidPress:(id)sender { | 109 - (void)infoBarButtonDidPress:(id)sender { |
107 // This press might have occurred after the user has already pressed a button, | 110 // This press might have occurred after the user has already pressed a button, |
108 // in which case the view has been detached from the delegate and this press | 111 // in which case the view has been detached from the delegate and this press |
109 // should be ignored. | 112 // should be ignored. |
110 if (!self.delegate) { | 113 if (!self.delegate) { |
111 return; | 114 return; |
(...skipping 28 matching lines...) Expand all Loading... |
140 | 143 |
141 const bool alwaysTranslate = | 144 const bool alwaysTranslate = |
142 _alwaysTranslateSwitchState == ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED; | 145 _alwaysTranslateSwitchState == ALWAYS_TRANSLATE_SWITCH_SET_TO_ENABLED; |
143 if (alwaysTranslate == _translateInfoBarDelegate->ShouldAlwaysTranslate()) | 146 if (alwaysTranslate == _translateInfoBarDelegate->ShouldAlwaysTranslate()) |
144 return; | 147 return; |
145 | 148 |
146 _translateInfoBarDelegate->ToggleAlwaysTranslate(); | 149 _translateInfoBarDelegate->ToggleAlwaysTranslate(); |
147 } | 150 } |
148 | 151 |
149 @end | 152 @end |
OLD | NEW |