blob: 6becc49857db74bfd9f7ae3303fc205122b28289 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/app_list/views/apps_container_view.h"
#include "ui/app_list/app_list_constants.h"
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/pagination_model.h"
#include "ui/app_list/views/app_list_folder_view.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/apps_grid_view.h"
namespace app_list {
AppsContainerView::AppsContainerView(AppListMainView* app_list_main_view,
PaginationModel* pagination_model,
AppListModel* model,
content::WebContents* start_page_contents)
: model_(model),
show_state_(SHOW_APPS) {
apps_grid_view_ = new AppsGridView(
app_list_main_view, pagination_model, start_page_contents);
apps_grid_view_->SetLayout(kPreferredIconDimension,
kPreferredCols,
kPreferredRows);
AddChildView(apps_grid_view_);
app_list_folder_view_ = new AppListFolderView(
this,
model,
app_list_main_view,
start_page_contents);
AddChildView(app_list_folder_view_);
apps_grid_view_->SetModel(model_);
apps_grid_view_->SetItemList(model_->item_list());
}
AppsContainerView::~AppsContainerView() {
}
void AppsContainerView::ShowActiveFolder(AppListFolderItem* folder_item) {
app_list_folder_view_->SetAppListFolderItem(folder_item);
SetShowState(SHOW_ACTIVE_FOLDER);
}
void AppsContainerView::ShowApps() {
SetShowState(SHOW_APPS);
}
gfx::Size AppsContainerView::GetPreferredSize() {
const gfx::Size grid_size = apps_grid_view_->GetPreferredSize();
const gfx::Size folder_view_size = app_list_folder_view_->GetPreferredSize();
int width = std::max(grid_size.width(), folder_view_size.width());
int height = std::max(grid_size.height(), folder_view_size.height());
return gfx::Size(width, height);
}
void AppsContainerView::Layout() {
gfx::Rect rect(GetContentsBounds());
if (rect.IsEmpty())
return;
switch(show_state_) {
case SHOW_APPS:
app_list_folder_view_->SetVisible(false);
apps_grid_view_->SetBoundsRect(rect);
apps_grid_view_->SetVisible(true);
break;
case SHOW_ACTIVE_FOLDER:
apps_grid_view_->SetVisible(false);
app_list_folder_view_->SetBoundsRect(rect);
app_list_folder_view_->SetVisible(true);
break;
default:
NOTREACHED();
}
}
void AppsContainerView::SetShowState(ShowState show_state) {
if (show_state_ == show_state)
return;
show_state_ = show_state;
Layout();
}
} // namespace app_list