1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/views/infobars/infobar_container_view.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/view_ids.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/views/infobars/infobar_view.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/generated_resources.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/accessibility/accessible_view_state.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/l10n/l10n_util.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenInfoBarContainerView::InfoBarContainerView(Delegate* delegate)
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : InfoBarContainer(delegate) {
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetID(VIEW_ID_INFO_BAR_CONTAINER);
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenInfoBarContainerView::~InfoBarContainerView() {
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  RemoveAllInfoBarsForDestruction();
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsengfx::Size InfoBarContainerView::GetPreferredSize() {
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // We do not have a preferred width (we will expand to fit the available width
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // of the delegate).
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  int total_height;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GetVerticalOverlap(&total_height);
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return gfx::Size(0, total_height);
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid InfoBarContainerView::Layout() {
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  int top = GetVerticalOverlap(NULL);
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  for (int i = 0; i < child_count(); ++i) {
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    InfoBarView* child = static_cast<InfoBarView*>(GetChildViewAt(i));
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    top -= child->arrow_height();
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int child_height = child->total_height();
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    child->SetBounds(0, top, width(), child_height);
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    top += child_height;
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid InfoBarContainerView::GetAccessibleState(ui::AccessibleViewState* state) {
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  state->role = ui::AccessibilityTypes::ROLE_GROUPING;
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_INFOBAR_CONTAINER);
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid InfoBarContainerView::PlatformSpecificAddInfoBar(InfoBar* infobar) {
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AddChildView(static_cast<InfoBarView*>(infobar));
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid InfoBarContainerView::PlatformSpecificRemoveInfoBar(InfoBar* infobar) {
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  RemoveChildView(static_cast<InfoBarView*>(infobar));
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
54