• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TranslateMessageInfoBar(TranslateInfoBarDelegate * delegate)11 TranslateMessageInfoBar::TranslateMessageInfoBar(
12     TranslateInfoBarDelegate* delegate)
13     : TranslateInfoBarBase(delegate),
14       label_(NULL),
15       button_(NULL) {
16 }
17 
~TranslateMessageInfoBar()18 TranslateMessageInfoBar::~TranslateMessageInfoBar() {
19 }
20 
Layout()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 
ViewHierarchyChanged(bool is_add,View * parent,View * child)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 
ButtonPressed(views::Button * sender,const views::Event & event)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 
ContentMinimumWidth() const65 int TranslateMessageInfoBar::ContentMinimumWidth() const {
66   return (button_ != NULL) ?
67       (button_->GetPreferredSize().width() + kButtonInLabelSpacing) : 0;
68 }
69