1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/cocoa/infobars/before_translate_infobar_controller.h"
#include <stddef.h>
#include "base/strings/sys_string_conversions.h"
#import "chrome/browser/ui/cocoa/infobars/infobar_utilities.h"
#include "grit/components_strings.h"
#include "ui/base/l10n/l10n_util.h"
using InfoBarUtilities::MoveControl;
using InfoBarUtilities::VerifyControlOrderAndSpacing;
namespace {
NSButton* CreateNSButtonWithResourceIDAndParameter(
int resourceId, const base::string16& param) {
base::string16 title = l10n_util::GetStringFUTF16(resourceId, param);
NSButton* button = [[NSButton alloc] init];
[button setTitle:base::SysUTF16ToNSString(title)];
[button setBezelStyle:NSTexturedRoundedBezelStyle];
// Round textured buttons have a different font size than the default button.
NSFont* font = [NSFont systemFontOfSize:
[NSFont systemFontSizeForControlSize:NSRegularControlSize]];
[[button cell] setFont:font];
return button;
}
} // namespace
@implementation BeforeTranslateInfobarController
- (void)dealloc {
[neverTranslateButton_ setTarget:nil];
[alwaysTranslateButton_ setTarget:nil];
[super dealloc];
}
- (id)initWithInfoBar:(InfoBarCocoa*)infobar {
if ((self = [super initWithInfoBar:infobar])) {
[self initializeExtraControls];
}
return self;
}
- (void)initializeExtraControls {
translate::TranslateInfoBarDelegate* delegate = [self delegate];
const base::string16& language = delegate->original_language_name();
neverTranslateButton_.reset(
CreateNSButtonWithResourceIDAndParameter(
IDS_TRANSLATE_INFOBAR_NEVER_TRANSLATE, language));
[neverTranslateButton_ setTarget:self];
[neverTranslateButton_ setAction:@selector(neverTranslate:)];
alwaysTranslateButton_.reset(
CreateNSButtonWithResourceIDAndParameter(
IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, language));
[alwaysTranslateButton_ setTarget:self];
[alwaysTranslateButton_ setAction:@selector(alwaysTranslate:)];
}
- (void)layout {
MoveControl(label1_, fromLanguagePopUp_, spaceBetweenControls_ / 2, true);
MoveControl(fromLanguagePopUp_, label2_, spaceBetweenControls_, true);
MoveControl(label2_, cancelButton_, spaceBetweenControls_, true);
MoveControl(cancelButton_, okButton_, spaceBetweenControls_, true);
NSView* lastControl = okButton_;
if (neverTranslateButton_.get()) {
MoveControl(lastControl, neverTranslateButton_.get(),
spaceBetweenControls_, true);
lastControl = neverTranslateButton_.get();
}
if (alwaysTranslateButton_.get()) {
MoveControl(lastControl, alwaysTranslateButton_.get(),
spaceBetweenControls_, true);
}
}
- (void)loadLabelText {
size_t offset = 0;
base::string16 text =
l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE,
base::string16(), &offset);
NSString* string1 = base::SysUTF16ToNSString(text.substr(0, offset));
NSString* string2 = base::SysUTF16ToNSString(text.substr(offset));
[label1_ setStringValue:string1];
[label2_ setStringValue:string2];
[label3_ setStringValue:@""];
}
- (NSArray*)visibleControls {
NSMutableArray* visibleControls = [NSMutableArray arrayWithObjects:
label1_.get(), fromLanguagePopUp_.get(), label2_.get(),
cancelButton_, okButton_, nil];
if ([self delegate]->ShouldShowNeverTranslateShortcut())
[visibleControls addObject:neverTranslateButton_.get()];
if ([self delegate]->ShouldShowAlwaysTranslateShortcut())
[visibleControls addObject:alwaysTranslateButton_.get()];
return visibleControls;
}
// This is called when the "Never Translate [language]" button is pressed.
- (void)neverTranslate:(id)sender {
if (![self isOwned])
return;
[self delegate]->NeverTranslatePageLanguage();
}
// This is called when the "Always Translate [language]" button is pressed.
- (void)alwaysTranslate:(id)sender {
if (![self isOwned])
return;
[self delegate]->AlwaysTranslatePageLanguage();
}
- (bool)verifyLayout {
if ([optionsPopUp_ isHidden])
return false;
return [super verifyLayout];
}
@end
@implementation BeforeTranslateInfobarController (TestingAPI)
- (NSButton*)alwaysTranslateButton {
return alwaysTranslateButton_.get();
}
- (NSButton*)neverTranslateButton {
return neverTranslateButton_.get();
}
@end
|