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