summaryrefslogtreecommitdiffstats
path: root/chromium/ui/app_list/views/search_result_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/app_list/views/search_result_view.cc')
-rw-r--r--chromium/ui/app_list/views/search_result_view.cc356
1 files changed, 0 insertions, 356 deletions
diff --git a/chromium/ui/app_list/views/search_result_view.cc b/chromium/ui/app_list/views/search_result_view.cc
deleted file mode 100644
index 5ba5a2083bd..00000000000
--- a/chromium/ui/app_list/views/search_result_view.cc
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright (c) 2012 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/search_result_view.h"
-
-#include <algorithm>
-
-#include "ui/app_list/app_list_constants.h"
-#include "ui/app_list/search_result.h"
-#include "ui/app_list/views/progress_bar_view.h"
-#include "ui/app_list/views/search_result_actions_view.h"
-#include "ui/app_list/views/search_result_list_view.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/font.h"
-#include "ui/gfx/image/image_skia_operations.h"
-#include "ui/gfx/render_text.h"
-#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/image_view.h"
-#include "ui/views/controls/menu/menu_item_view.h"
-#include "ui/views/controls/menu/menu_runner.h"
-
-namespace app_list {
-
-namespace {
-
-const int kPreferredWidth = 300;
-const int kPreferredHeight = 52;
-const int kIconDimension = 32;
-const int kIconPadding = 14;
-const int kIconViewWidth = kIconDimension + 2 * kIconPadding;
-const int kTextTrailPadding = kIconPadding;
-const int kBorderSize = 1;
-
-// Extra margin at the right of the rightmost action icon.
-const int kActionButtonRightMargin = 8;
-
-// Creates a RenderText of given |text| and |styles|. Caller takes ownership
-// of returned RenderText.
-gfx::RenderText* CreateRenderText(const base::string16& text,
- const SearchResult::Tags& tags) {
- gfx::RenderText* render_text = gfx::RenderText::CreateInstance();
- render_text->SetText(text);
- render_text->SetColor(kResultDefaultTextColor);
-
- for (SearchResult::Tags::const_iterator it = tags.begin();
- it != tags.end();
- ++it) {
- // NONE means default style so do nothing.
- if (it->styles == SearchResult::Tag::NONE)
- continue;
-
- if (it->styles & SearchResult::Tag::MATCH)
- render_text->ApplyStyle(gfx::BOLD, true, it->range);
- if (it->styles & SearchResult::Tag::DIM)
- render_text->ApplyColor(kResultDimmedTextColor, it->range);
- else if (it->styles & SearchResult::Tag::URL)
- render_text->ApplyColor(kResultURLTextColor, it->range);
- }
-
- return render_text;
-}
-
-} // namespace
-
-// static
-const char SearchResultView::kViewClassName[] = "ui/app_list/SearchResultView";
-
-SearchResultView::SearchResultView(SearchResultListView* list_view,
- SearchResultViewDelegate* delegate)
- : views::CustomButton(this),
- result_(NULL),
- list_view_(list_view),
- delegate_(delegate),
- icon_(new views::ImageView),
- actions_view_(new SearchResultActionsView(this)),
- progress_bar_(new ProgressBarView) {
- icon_->set_interactive(false);
-
- AddChildView(icon_);
- AddChildView(actions_view_);
- AddChildView(progress_bar_);
- set_context_menu_controller(this);
-}
-
-SearchResultView::~SearchResultView() {
- ClearResultNoRepaint();
-}
-
-void SearchResultView::SetResult(SearchResult* result) {
- ClearResultNoRepaint();
-
- result_ = result;
- if (result_)
- result_->AddObserver(this);
-
- OnIconChanged();
- OnActionsChanged();
- UpdateTitleText();
- UpdateDetailsText();
- OnIsInstallingChanged();
- SchedulePaint();
-}
-
-void SearchResultView::ClearResultNoRepaint() {
- if (result_)
- result_->RemoveObserver(this);
- result_ = NULL;
-}
-
-void SearchResultView::ClearSelectedAction() {
- actions_view_->SetSelectedAction(-1);
-}
-
-void SearchResultView::UpdateTitleText() {
- if (!result_ || result_->title().empty()) {
- title_text_.reset();
- SetAccessibleName(base::string16());
- } else {
- title_text_.reset(CreateRenderText(result_->title(),
- result_->title_tags()));
- SetAccessibleName(result_->title());
- }
-}
-
-void SearchResultView::UpdateDetailsText() {
- if (!result_ || result_->details().empty()) {
- details_text_.reset();
- } else {
- details_text_.reset(CreateRenderText(result_->details(),
- result_->details_tags()));
- }
-}
-
-const char* SearchResultView::GetClassName() const {
- return kViewClassName;
-}
-
-gfx::Size SearchResultView::GetPreferredSize() {
- return gfx::Size(kPreferredWidth, kPreferredHeight);
-}
-
-void SearchResultView::Layout() {
- gfx::Rect rect(GetContentsBounds());
- if (rect.IsEmpty())
- return;
-
- gfx::Rect icon_bounds(rect);
- icon_bounds.set_width(kIconViewWidth);
- icon_bounds.Inset(kIconPadding, (rect.height() - kIconDimension) / 2);
- icon_bounds.Intersect(rect);
- icon_->SetBoundsRect(icon_bounds);
-
- const int max_actions_width =
- (rect.right() - kActionButtonRightMargin - icon_bounds.right()) / 2;
- int actions_width = std::min(max_actions_width,
- actions_view_->GetPreferredSize().width());
-
- gfx::Rect actions_bounds(rect);
- actions_bounds.set_x(rect.right() - kActionButtonRightMargin - actions_width);
- actions_bounds.set_width(actions_width);
- actions_view_->SetBoundsRect(actions_bounds);
-
- const int progress_width = rect.width() / 5;
- const int progress_height = progress_bar_->GetPreferredSize().height();
- const gfx::Rect progress_bounds(
- rect.right() - kActionButtonRightMargin - progress_width,
- rect.y() + (rect.height() - progress_height) / 2,
- progress_width,
- progress_height);
- progress_bar_->SetBoundsRect(progress_bounds);
-}
-
-bool SearchResultView::OnKeyPressed(const ui::KeyEvent& event) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return false;
-
- switch (event.key_code()) {
- case ui::VKEY_TAB: {
- int new_selected = actions_view_->selected_action()
- + (event.IsShiftDown() ? -1 : 1);
- actions_view_->SetSelectedAction(new_selected);
- return actions_view_->IsValidActionIndex(new_selected);
- }
- case ui::VKEY_RETURN: {
- int selected = actions_view_->selected_action();
- if (actions_view_->IsValidActionIndex(selected)) {
- OnSearchResultActionActivated(selected, event.flags());
- } else {
- delegate_->SearchResultActivated(this, event.flags());
- }
- return true;
- }
- default:
- break;
- }
-
- return false;
-}
-
-void SearchResultView::ChildPreferredSizeChanged(views::View* child) {
- Layout();
-}
-
-void SearchResultView::OnPaint(gfx::Canvas* canvas) {
- gfx::Rect rect(GetContentsBounds());
- if (rect.IsEmpty())
- return;
-
- gfx::Rect content_rect(rect);
- content_rect.set_height(rect.height() - kBorderSize);
-
- const bool selected = list_view_->IsResultViewSelected(this);
- const bool hover = state() == STATE_HOVERED || state() == STATE_PRESSED;
- if (selected)
- canvas->FillRect(content_rect, kSelectedColor);
- else if (hover)
- canvas->FillRect(content_rect, kHighlightedColor);
- else
- canvas->FillRect(content_rect, kContentsBackgroundColor);
-
- gfx::Rect border_bottom = gfx::SubtractRects(rect, content_rect);
- canvas->FillRect(border_bottom, kResultBorderColor);
-
- gfx::Rect text_bounds(rect);
- text_bounds.set_x(kIconViewWidth);
- if (actions_view_->visible()) {
- text_bounds.set_width(
- rect.width() - kIconViewWidth - kTextTrailPadding -
- actions_view_->bounds().width() -
- (actions_view_->has_children() ? kActionButtonRightMargin : 0));
- } else {
- text_bounds.set_width(
- rect.width() - kIconViewWidth - kTextTrailPadding -
- progress_bar_->bounds().width() - kActionButtonRightMargin);
- }
- text_bounds.set_x(GetMirroredXWithWidthInView(text_bounds.x(),
- text_bounds.width()));
-
- if (title_text_ && details_text_) {
- gfx::Size title_size(text_bounds.width(),
- title_text_->GetStringSize().height());
- gfx::Size details_size(text_bounds.width(),
- details_text_->GetStringSize().height());
- int total_height = title_size.height() + + details_size.height();
- int y = text_bounds.y() + (text_bounds.height() - total_height) / 2;
-
- title_text_->SetDisplayRect(gfx::Rect(gfx::Point(text_bounds.x(), y),
- title_size));
- title_text_->Draw(canvas);
-
- y += title_size.height();
- details_text_->SetDisplayRect(gfx::Rect(gfx::Point(text_bounds.x(), y),
- details_size));
- details_text_->Draw(canvas);
- } else if (title_text_) {
- gfx::Size title_size(text_bounds.width(),
- title_text_->GetStringSize().height());
- gfx::Rect centered_title_rect(text_bounds);
- centered_title_rect.ClampToCenteredSize(title_size);
- title_text_->SetDisplayRect(centered_title_rect);
- title_text_->Draw(canvas);
- }
-}
-
-void SearchResultView::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- DCHECK(sender == this);
-
- delegate_->SearchResultActivated(this, event.flags());
-}
-
-void SearchResultView::OnIconChanged() {
- gfx::ImageSkia image(result_ ? result_->icon() : gfx::ImageSkia());
- // Note this might leave the view with an old icon. But it is needed to avoid
- // flash when a SearchResult's icon is loaded asynchronously. In this case, it
- // looks nicer to keep the stale icon for a little while on screen instead of
- // clearing it out. It should work correctly as long as the SearchResult does
- // not forget to SetIcon when it's ready.
- if (image.isNull())
- return;
-
- // Scales down big icons but leave small ones unchanged.
- if (image.width() > kIconDimension || image.height() > kIconDimension) {
- image = gfx::ImageSkiaOperations::CreateResizedImage(
- image,
- skia::ImageOperations::RESIZE_BEST,
- gfx::Size(kIconDimension, kIconDimension));
- } else {
- icon_->ResetImageSize();
- }
-
- // Set the image to an empty image before we reset the image because
- // since we're using the same backing store for our images, sometimes
- // ImageView won't detect that we have a new image set due to the pixel
- // buffer pointers remaining the same despite the image changing.
- icon_->SetImage(gfx::ImageSkia());
- icon_->SetImage(image);
-}
-
-void SearchResultView::OnActionsChanged() {
- actions_view_->SetActions(result_ ? result_->actions()
- : SearchResult::Actions());
-}
-
-void SearchResultView::OnIsInstallingChanged() {
- const bool is_installing = result_ && result_->is_installing();
- actions_view_->SetVisible(!is_installing);
- progress_bar_->SetVisible(is_installing);
-}
-
-void SearchResultView::OnPercentDownloadedChanged() {
- progress_bar_->SetValue(result_ ? result_->percent_downloaded() / 100.0 : 0);
-}
-
-void SearchResultView::OnItemInstalled() {
- delegate_->OnSearchResultInstalled(this);
-}
-
-void SearchResultView::OnItemUninstalled() {
- delegate_->OnSearchResultUninstalled(this);
-}
-
-void SearchResultView::OnSearchResultActionActivated(size_t index,
- int event_flags) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return;
-
- DCHECK_LT(index, result_->actions().size());
-
- delegate_->SearchResultActionActivated(this, index, event_flags);
-}
-
-void SearchResultView::ShowContextMenuForView(views::View* source,
- const gfx::Point& point,
- ui::MenuSourceType source_type) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return;
-
- ui::MenuModel* menu_model = result_->GetContextMenuModel();
- if (!menu_model)
- return;
-
- context_menu_runner_.reset(new views::MenuRunner(menu_model));
- if (context_menu_runner_->RunMenuAt(
- GetWidget(), NULL, gfx::Rect(point, gfx::Size()),
- views::MenuItemView::TOPLEFT, source_type,
- views::MenuRunner::HAS_MNEMONICS) ==
- views::MenuRunner::MENU_DELETED)
- return;
-}
-
-} // namespace app_list