selected_keyword_view.cc revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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::Font& font, 26 int font_y_offset, 27 SkColor text_color, 28 SkColor parent_background_color, 29 Profile* profile) 30 : IconLabelBubbleView(kBackgroundImages, NULL, IDR_KEYWORD_SEARCH_MAGNIFIER, 31 font, font_y_offset, text_color, 32 parent_background_color, false), 33 profile_(profile) { 34 full_label_.SetFont(font); 35 full_label_.SetVisible(false); 36 partial_label_.SetFont(font); 37 partial_label_.SetVisible(false); 38} 39 40SelectedKeywordView::~SelectedKeywordView() { 41} 42 43gfx::Size SelectedKeywordView::GetPreferredSize() { 44 // Height will be ignored by the LocationBarView. 45 return GetSizeForLabelWidth(full_label_.GetPreferredSize().width()); 46} 47 48gfx::Size SelectedKeywordView::GetMinimumSize() { 49 // Height will be ignored by the LocationBarView. 50 return GetSizeForLabelWidth(partial_label_.GetMinimumSize().width()); 51} 52 53void SelectedKeywordView::Layout() { 54 SetLabel(((width() == GetPreferredSize().width()) ? 55 full_label_ : partial_label_).text()); 56 IconLabelBubbleView::Layout(); 57} 58 59void SelectedKeywordView::SetKeyword(const string16& keyword) { 60 keyword_ = keyword; 61 if (keyword.empty()) 62 return; 63 DCHECK(profile_); 64 TemplateURLService* model = 65 TemplateURLServiceFactory::GetForProfile(profile_); 66 if (!model) 67 return; 68 69 bool is_extension_keyword; 70 const string16 short_name = model->GetKeywordShortName(keyword, 71 &is_extension_keyword); 72 const string16 full_name = is_extension_keyword ? 73 short_name : 74 l10n_util::GetStringFUTF16(IDS_OMNIBOX_KEYWORD_TEXT, short_name); 75 full_label_.SetText(full_name); 76 77 const string16 min_string(location_bar_util::CalculateMinString(short_name)); 78 const 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