1// Copyright (c) 2011 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/views/infobars/translate_message_infobar.h" 6 7#include "chrome/browser/translate/translate_infobar_delegate.h" 8#include "views/controls/button/text_button.h" 9#include "views/controls/label.h" 10 11TranslateMessageInfoBar::TranslateMessageInfoBar( 12 TranslateInfoBarDelegate* delegate) 13 : TranslateInfoBarBase(delegate), 14 label_(NULL), 15 button_(NULL) { 16} 17 18TranslateMessageInfoBar::~TranslateMessageInfoBar() { 19} 20 21void TranslateMessageInfoBar::Layout() { 22 TranslateInfoBarBase::Layout(); 23 24 gfx::Size label_size = label_->GetPreferredSize(); 25 label_->SetBounds(StartX(), OffsetY(label_size), 26 std::min(label_size.width(), 27 std::max(0, EndX() - StartX() - ContentMinimumWidth())), 28 label_size.height()); 29 30 if (button_) { 31 gfx::Size button_size = button_->GetPreferredSize(); 32 button_->SetBounds(label_->bounds().right() + kButtonInLabelSpacing, 33 OffsetY(button_size), button_size.width(), button_size.height()); 34 } 35} 36 37void TranslateMessageInfoBar::ViewHierarchyChanged(bool is_add, 38 View* parent, 39 View* child) { 40 if (is_add && (child == this) && (label_ == NULL)) { 41 TranslateInfoBarDelegate* delegate = GetDelegate(); 42 label_ = CreateLabel(delegate->GetMessageInfoBarText()); 43 AddChildView(label_); 44 45 string16 button_text(delegate->GetMessageInfoBarButtonText()); 46 if (!button_text.empty()) { 47 button_ = CreateTextButton(this, button_text, false); 48 AddChildView(button_); 49 } 50 } 51 52 // This must happen after adding all other children so InfoBarView can ensure 53 // the close button is the last child. 54 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); 55} 56 57void TranslateMessageInfoBar::ButtonPressed(views::Button* sender, 58 const views::Event& event) { 59 if (sender == button_) 60 GetDelegate()->MessageInfoBarButtonPressed(); 61 else 62 TranslateInfoBarBase::ButtonPressed(sender, event); 63} 64 65int TranslateMessageInfoBar::ContentMinimumWidth() const { 66 return (button_ != NULL) ? 67 (button_->GetPreferredSize().width() + kButtonInLabelSpacing) : 0; 68} 69