1// Copyright (c) 2012 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/location_bar/selected_keyword_view.h" 6 7#include "base/logging.h" 8#include "base/strings/utf_string_conversions.h" 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/search_engines/template_url_service.h" 11#include "chrome/browser/search_engines/template_url_service_factory.h" 12#include "chrome/browser/ui/omnibox/location_bar_util.h" 13#include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" 14#include "grit/generated_resources.h" 15#include "grit/theme_resources.h" 16#include "ui/base/l10n/l10n_util.h" 17#include "ui/views/painter.h" 18 19 20namespace { 21const int kBackgroundImages[] = IMAGE_GRID(IDR_OMNIBOX_SELECTED_KEYWORD_BUBBLE); 22} 23 24 25SelectedKeywordView::SelectedKeywordView(const gfx::FontList& font_list, 26 SkColor text_color, 27 SkColor parent_background_color, 28 Profile* profile) 29 : IconLabelBubbleView(kBackgroundImages, NULL, IDR_KEYWORD_SEARCH_MAGNIFIER, 30 font_list, text_color, parent_background_color, 31 false), 32 profile_(profile) { 33 full_label_.SetFontList(font_list); 34 full_label_.SetVisible(false); 35 partial_label_.SetFontList(font_list); 36 partial_label_.SetVisible(false); 37} 38 39SelectedKeywordView::~SelectedKeywordView() { 40} 41 42gfx::Size SelectedKeywordView::GetPreferredSize() const { 43 // Height will be ignored by the LocationBarView. 44 return GetSizeForLabelWidth(full_label_.GetPreferredSize().width()); 45} 46 47gfx::Size SelectedKeywordView::GetMinimumSize() const { 48 // Height will be ignored by the LocationBarView. 49 return GetSizeForLabelWidth(partial_label_.GetMinimumSize().width()); 50} 51 52void SelectedKeywordView::Layout() { 53 SetLabel(((width() == GetPreferredSize().width()) ? 54 full_label_ : partial_label_).text()); 55 IconLabelBubbleView::Layout(); 56} 57 58void SelectedKeywordView::SetKeyword(const base::string16& keyword) { 59 keyword_ = keyword; 60 if (keyword.empty()) 61 return; 62 DCHECK(profile_); 63 TemplateURLService* model = 64 TemplateURLServiceFactory::GetForProfile(profile_); 65 if (!model) 66 return; 67 68 bool is_extension_keyword; 69 const base::string16 short_name = 70 model->GetKeywordShortName(keyword, &is_extension_keyword); 71 const base::string16 full_name = is_extension_keyword ? 72 short_name : 73 l10n_util::GetStringFUTF16(IDS_OMNIBOX_KEYWORD_TEXT, short_name); 74 full_label_.SetText(full_name); 75 76 const base::string16 min_string( 77 location_bar_util::CalculateMinString(short_name)); 78 const base::string16 partial_name = is_extension_keyword ? 79 min_string : 80 l10n_util::GetStringFUTF16(IDS_OMNIBOX_KEYWORD_TEXT, min_string); 81 partial_label_.SetText(min_string.empty() ? 82 full_label_.text() : partial_name); 83} 84