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/infobar_container_view.h" 6 7 #include "chrome/browser/ui/view_ids.h" 8 #include "chrome/browser/ui/views/infobars/infobar_view.h" 9 #include "grit/generated_resources.h" 10 #include "ui/base/accessibility/accessible_view_state.h" 11 #include "ui/base/l10n/l10n_util.h" 12 13 InfoBarContainerView::InfoBarContainerView(Delegate* delegate) 14 : InfoBarContainer(delegate) { 15 SetID(VIEW_ID_INFO_BAR_CONTAINER); 16 } 17 18 InfoBarContainerView::~InfoBarContainerView() { 19 RemoveAllInfoBarsForDestruction(); 20 } 21 22 gfx::Size InfoBarContainerView::GetPreferredSize() { 23 // We do not have a preferred width (we will expand to fit the available width 24 // of the delegate). 25 int total_height; 26 GetVerticalOverlap(&total_height); 27 return gfx::Size(0, total_height); 28 } 29 30 void InfoBarContainerView::Layout() { 31 int top = GetVerticalOverlap(NULL); 32 33 for (int i = 0; i < child_count(); ++i) { 34 InfoBarView* child = static_cast<InfoBarView*>(GetChildViewAt(i)); 35 top -= child->arrow_height(); 36 int child_height = child->total_height(); 37 child->SetBounds(0, top, width(), child_height); 38 top += child_height; 39 } 40 } 41 42 void InfoBarContainerView::GetAccessibleState(ui::AccessibleViewState* state) { 43 state->role = ui::AccessibilityTypes::ROLE_GROUPING; 44 state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_INFOBAR_CONTAINER); 45 } 46 47 void InfoBarContainerView::PlatformSpecificAddInfoBar(InfoBar* infobar) { 48 AddChildView(static_cast<InfoBarView*>(infobar)); 49 } 50 51 void InfoBarContainerView::PlatformSpecificRemoveInfoBar(InfoBar* infobar) { 52 RemoveChildView(static_cast<InfoBarView*>(infobar)); 53 } 54