Home | History | Annotate | Download | only in infobars
      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 
     11 TranslateMessageInfoBar::TranslateMessageInfoBar(
     12     TranslateInfoBarDelegate* delegate)
     13     : TranslateInfoBarBase(delegate),
     14       label_(NULL),
     15       button_(NULL) {
     16 }
     17 
     18 TranslateMessageInfoBar::~TranslateMessageInfoBar() {
     19 }
     20 
     21 void 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 
     37 void 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 
     57 void 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 
     65 int TranslateMessageInfoBar::ContentMinimumWidth() const {
     66   return (button_ != NULL) ?
     67       (button_->GetPreferredSize().width() + kButtonInLabelSpacing) : 0;
     68 }
     69