- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / infobars / translate_message_infobar.cc
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 "ui/views/controls/button/label_button.h"
9 #include "ui/views/controls/label.h"
10
11 TranslateMessageInfoBar::TranslateMessageInfoBar(
12     InfoBarService* owner,
13     TranslateInfoBarDelegate* delegate)
14     : TranslateInfoBarBase(owner, delegate),
15       label_(NULL),
16       button_(NULL) {
17 }
18
19 TranslateMessageInfoBar::~TranslateMessageInfoBar() {
20 }
21
22 void TranslateMessageInfoBar::Layout() {
23   TranslateInfoBarBase::Layout();
24
25   gfx::Size label_size = label_->GetPreferredSize();
26   label_->SetBounds(StartX(), OffsetY(label_size),
27       std::min(label_size.width(),
28                std::max(0, EndX() - StartX() - ContentMinimumWidth())),
29       label_size.height());
30
31   if (button_) {
32     gfx::Size button_size = button_->GetPreferredSize();
33     button_->SetBounds(label_->bounds().right() + kButtonInLabelSpacing,
34         OffsetY(button_size), button_size.width(), button_size.height());
35   }
36 }
37
38 void TranslateMessageInfoBar::ViewHierarchyChanged(
39     const ViewHierarchyChangedDetails& details) {
40   if (details.is_add && (details.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_ = CreateLabelButton(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(details);
55 }
56
57 void TranslateMessageInfoBar::ButtonPressed(views::Button* sender,
58                                             const ui::Event& event) {
59   if (!owner())
60     return;  // We're closing; don't call anything, it might access the owner.
61   if (sender == button_)
62     GetDelegate()->MessageInfoBarButtonPressed();
63   else
64     TranslateInfoBarBase::ButtonPressed(sender, event);
65 }
66
67 int TranslateMessageInfoBar::ContentMinimumWidth() const {
68   return (button_ != NULL) ?
69       (button_->GetPreferredSize().width() + kButtonInLabelSpacing) : 0;
70 }