Chromium Code Reviews| Index: chrome/browser/ui/views/apps/app_info_dialog/app_info_tab_summary_views.cc |
| diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_tab_summary_views.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_tab_summary_views.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5021a43fe7f8b633d4be4a9d77eb97dc92d242d0 |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_tab_summary_views.cc |
| @@ -0,0 +1,117 @@ |
| +// Copyright 2014 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 "chrome/browser/ui/views/apps/app_info_dialog/app_info_tab_summary_views.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/extensions/image_loader.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/common/extensions/extension_constants.h" |
| +#include "chrome/common/extensions/extension_icon_set.h" |
| +#include "chrome/common/extensions/manifest_handlers/icons_handler.h" |
| +#include "extensions/common/extension.h" |
| +#include "ui/gfx/geometry/size.h" |
| +#include "ui/gfx/image/image.h" |
| +#include "ui/gfx/image/image_skia.h" |
| +#include "ui/views/controls/image_view.h" |
| +#include "ui/views/controls/label.h" |
| +#include "ui/views/layout/grid_layout.h" |
| +#include "ui/views/layout/layout_constants.h" |
| + |
| +// Size of extension icon in top left of dialog. |
| +const int kIconSize = 64; |
| + |
| +AppInfoSummaryTabView::AppInfoSummaryTabView( |
| + gfx::NativeWindow parent_window, |
| + Profile* profile, |
| + const extensions::Extension* app, |
| + const base::Closure& close_callback) |
| + : AppInfoTabView(parent_window, profile, app, close_callback), |
| + app_icon_(NULL), |
| + weak_ptr_factory_(this) { |
|
Matt Giuca
2014/03/04 01:36:57
Maybe I'm mis-remembering, but didn't we decide th
sashab
2014/03/04 04:10:58
I investigated this in that review and decided it
Matt Giuca
2014/03/04 04:51:12
Oh yeah whoops. Sorry I picked up the same issue a
|
| + // Create UI elements |
| + views::Label* app_name_label = |
| + new views::Label(base::UTF8ToUTF16(app_->name())); |
| + app_name_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| + |
| + views::Label* app_description_label = |
| + new views::Label(base::UTF8ToUTF16(app_->description())); |
| + app_description_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| + |
| + views::Label* app_version_label = |
| + new views::Label(base::UTF8ToUTF16(app_->VersionString())); |
| + app_version_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| + |
| + app_icon_ = new views::ImageView(); |
| + app_icon_->SetImageSize(gfx::Size(kIconSize, kIconSize)); |
| + LoadAppImageAsync(); |
| + |
| + // Create the layout |
| + views::GridLayout* layout = views::GridLayout::CreatePanel(this); |
| + SetLayoutManager(layout); |
| + |
| + // Header column set with app icon and information |
| + static const int kHeaderColumnSetId = 0; |
| + views::ColumnSet* header_column_set = |
| + layout->AddColumnSet(kHeaderColumnSetId); |
| + header_column_set->AddColumn(views::GridLayout::FILL, |
| + views::GridLayout::CENTER, |
| + 0, |
| + views::GridLayout::FIXED, |
| + kIconSize, |
| + 0); |
| + header_column_set->AddPaddingColumn(0, |
| + views::kRelatedControlHorizontalSpacing); |
| + header_column_set->AddColumn(views::GridLayout::FILL, |
| + views::GridLayout::CENTER, |
| + 100.0f, |
| + views::GridLayout::FIXED, |
| + 0, |
| + 0); |
| + |
| + // The app icon takes up 3 rows |
| + layout->StartRow(0, kHeaderColumnSetId); |
| + layout->AddView(app_icon_, 1, 3); |
| + |
| + // The app information fills up the right side of the icon |
| + layout->AddView(app_name_label); |
| + |
| + layout->StartRow(0, kHeaderColumnSetId); |
| + layout->SkipColumns(1); |
| + layout->AddView(app_version_label); |
| + |
| + layout->StartRow(0, kHeaderColumnSetId); |
| + layout->SkipColumns(1); |
| + layout->AddView(app_description_label); |
| +} |
| + |
| +AppInfoSummaryTabView::~AppInfoSummaryTabView() {} |
| + |
| +void AppInfoSummaryTabView::LoadAppImageAsync() { |
| + extensions::ExtensionResource image = extensions::IconsInfo::GetIconResource( |
| + app_, |
| + extension_misc::EXTENSION_ICON_LARGE, |
| + ExtensionIconSet::MATCH_BIGGER); |
| + int pixel_size = |
| + static_cast<int>(kIconSize * gfx::ImageSkia::GetMaxSupportedScale()); |
| + extensions::ImageLoader::Get(profile_)->LoadImageAsync( |
| + app_, |
| + image, |
| + gfx::Size(pixel_size, pixel_size), |
| + base::Bind(&AppInfoSummaryTabView::OnAppImageLoaded, AsWeakPtr())); |
| +} |
| + |
| +void AppInfoSummaryTabView::OnAppImageLoaded(const gfx::Image& image) { |
| + const SkBitmap* bitmap; |
| + if (image.IsEmpty()) { |
| + bitmap = &extensions::IconsInfo::GetDefaultAppIcon() |
| + .GetRepresentation(gfx::ImageSkia::GetMaxSupportedScale()) |
| + .sk_bitmap(); |
| + } else { |
| + bitmap = image.ToSkBitmap(); |
| + } |
| + |
| + app_icon_->SetImage(gfx::ImageSkia::CreateFrom1xBitmap(*bitmap)); |
| +} |