blob: c4695af1d047ad8509da84296e7b853ee2a7e898 [file] [log] [blame]
// 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 "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 {
TranslateInfoBarDelegate* delegate = [self delegate];
const base::string16& language =
delegate->language_name_at(delegate->original_language_index());
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