172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/location_bar/selected_keyword_view.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/utf_string_conversions.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/search_engines/template_url_model.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/omnibox/location_bar_util.h" 1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSelectedKeywordView::SelectedKeywordView(const int background_images[], 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int contained_image, 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkColor& color, 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile) 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : IconLabelBubbleView(background_images, contained_image, color), 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_(profile) { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_label_.SetVisible(false); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch partial_label_.SetVisible(false); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSelectedKeywordView::~SelectedKeywordView() { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SelectedKeywordView::SetFont(const gfx::Font& font) { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IconLabelBubbleView::SetFont(font); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_label_.SetFont(font); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch partial_label_.SetFont(font); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Size SelectedKeywordView::GetPreferredSize() { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size size(GetNonLabelSize()); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size.Enlarge(full_label_.GetPreferredSize().width(), 0); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return size; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Size SelectedKeywordView::GetMinimumSize() { 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size size(GetNonLabelSize()); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size.Enlarge(partial_label_.GetMinimumSize().width(), 0); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return size; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SelectedKeywordView::Layout() { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetLabel((width() == GetPreferredSize().width()) ? 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_label_.GetText() : partial_label_.GetText()); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IconLabelBubbleView::Layout(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid SelectedKeywordView::SetKeyword(const string16& keyword) { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch keyword_ = keyword; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (keyword.empty()) 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(profile_); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!profile_->GetTemplateURLModel()) 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_extension_keyword; 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16 short_name = profile_->GetTemplateURLModel()-> 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GetKeywordShortName(keyword, &is_extension_keyword); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int message_id = is_extension_keyword ? 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDS_OMNIBOX_EXTENSION_KEYWORD_TEXT : IDS_OMNIBOX_KEYWORD_TEXT; 663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen full_label_.SetText(UTF16ToWide( 673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen l10n_util::GetStringFUTF16(message_id, short_name))); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring min_string( 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen location_bar_util::CalculateMinString(UTF16ToWide(short_name))); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch partial_label_.SetText(min_string.empty() ? 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_label_.GetText() : 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen UTF16ToWide(l10n_util::GetStringFUTF16(message_id, 733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen WideToUTF16(min_string)))); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 75