blob: e592d3a2a1a02447659d2b583f1c38dade6c547b [file] [log] [blame]
// Copyright (c) 2011 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/views/infobars/translate_message_infobar.h"
#include "chrome/browser/translate/translate_infobar_delegate.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/label.h"
TranslateMessageInfoBar::TranslateMessageInfoBar(
scoped_ptr<TranslateInfoBarDelegate> delegate)
: TranslateInfoBarBase(delegate.Pass()),
label_(NULL),
button_(NULL) {
}
TranslateMessageInfoBar::~TranslateMessageInfoBar() {
}
void TranslateMessageInfoBar::Layout() {
TranslateInfoBarBase::Layout();
int x = StartX();
const int width =
std::min(label_->width(), std::max(0, EndX() - x - NonLabelWidth()));
label_->SetBounds(x, OffsetY(label_), width, label_->height());
if (!label_->text().empty())
x = label_->bounds().right() + kEndOfLabelSpacing;
if (button_)
button_->SetPosition(gfx::Point(x, OffsetY(button_)));
}
void TranslateMessageInfoBar::ViewHierarchyChanged(
const ViewHierarchyChangedDetails& details) {
if (details.is_add && (details.child == this) && (label_ == NULL)) {
TranslateInfoBarDelegate* delegate = GetDelegate();
label_ = CreateLabel(delegate->GetMessageInfoBarText());
AddChildView(label_);
base::string16 button_text(delegate->GetMessageInfoBarButtonText());
if (!button_text.empty()) {
button_ = CreateLabelButton(this, button_text);
AddChildView(button_);
}
}
// This must happen after adding all other children so InfoBarView can ensure
// the close button is the last child.
TranslateInfoBarBase::ViewHierarchyChanged(details);
}
void TranslateMessageInfoBar::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (!owner())
return; // We're closing; don't call anything, it might access the owner.
if (sender == button_)
GetDelegate()->MessageInfoBarButtonPressed();
else
TranslateInfoBarBase::ButtonPressed(sender, event);
}
int TranslateMessageInfoBar::ContentMinimumWidth() {
return label_->GetMinimumSize().width() + NonLabelWidth();
}
int TranslateMessageInfoBar::NonLabelWidth() const {
if (!button_)
return 0;
return button_->width() + (label_->text().empty() ? 0 : kEndOfLabelSpacing);
}