1 // Copyright (c) 2011 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/utf_string_conversions.h" 9 #include "chrome/browser/search_engines/template_url_model.h" 10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/ui/omnibox/location_bar_util.h" 12 #include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" 13 #include "grit/generated_resources.h" 14 #include "ui/base/l10n/l10n_util.h" 15 16 SelectedKeywordView::SelectedKeywordView(const int background_images[], 17 int contained_image, 18 const SkColor& color, 19 Profile* profile) 20 : IconLabelBubbleView(background_images, contained_image, color), 21 profile_(profile) { 22 full_label_.SetVisible(false); 23 partial_label_.SetVisible(false); 24 } 25 26 SelectedKeywordView::~SelectedKeywordView() { 27 } 28 29 void SelectedKeywordView::SetFont(const gfx::Font& font) { 30 IconLabelBubbleView::SetFont(font); 31 full_label_.SetFont(font); 32 partial_label_.SetFont(font); 33 } 34 35 gfx::Size SelectedKeywordView::GetPreferredSize() { 36 gfx::Size size(GetNonLabelSize()); 37 size.Enlarge(full_label_.GetPreferredSize().width(), 0); 38 return size; 39 } 40 41 gfx::Size SelectedKeywordView::GetMinimumSize() { 42 gfx::Size size(GetNonLabelSize()); 43 size.Enlarge(partial_label_.GetMinimumSize().width(), 0); 44 return size; 45 } 46 47 void SelectedKeywordView::Layout() { 48 SetLabel((width() == GetPreferredSize().width()) ? 49 full_label_.GetText() : partial_label_.GetText()); 50 IconLabelBubbleView::Layout(); 51 } 52 53 void SelectedKeywordView::SetKeyword(const string16& keyword) { 54 keyword_ = keyword; 55 if (keyword.empty()) 56 return; 57 DCHECK(profile_); 58 if (!profile_->GetTemplateURLModel()) 59 return; 60 61 bool is_extension_keyword; 62 const string16 short_name = profile_->GetTemplateURLModel()-> 63 GetKeywordShortName(keyword, &is_extension_keyword); 64 int message_id = is_extension_keyword ? 65 IDS_OMNIBOX_EXTENSION_KEYWORD_TEXT : IDS_OMNIBOX_KEYWORD_TEXT; 66 full_label_.SetText(UTF16ToWide( 67 l10n_util::GetStringFUTF16(message_id, short_name))); 68 const std::wstring min_string( 69 location_bar_util::CalculateMinString(UTF16ToWide(short_name))); 70 partial_label_.SetText(min_string.empty() ? 71 full_label_.GetText() : 72 UTF16ToWide(l10n_util::GetStringFUTF16(message_id, 73 WideToUTF16(min_string)))); 74 } 75