15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/selected_keyword_view.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/omnibox/location_bar_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "grit/theme_resources.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/views/painter.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)const int kBackgroundImages[] = IMAGE_GRID(IDR_OMNIBOX_SELECTED_KEYWORD_BUBBLE); 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)SelectedKeywordView::SelectedKeywordView(const gfx::FontList& font_list, 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SkColor text_color, 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SkColor parent_background_color, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : IconLabelBubbleView(kBackgroundImages, NULL, IDR_KEYWORD_SEARCH_MAGNIFIER, 300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) font_list, text_color, parent_background_color, 310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(profile) { 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) full_label_.SetFontList(font_list); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_label_.SetVisible(false); 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) partial_label_.SetFontList(font_list); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partial_label_.SetVisible(false); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SelectedKeywordView::~SelectedKeywordView() { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size SelectedKeywordView::GetPreferredSize() { 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Height will be ignored by the LocationBarView. 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return GetSizeForLabelWidth(full_label_.GetPreferredSize().width()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size SelectedKeywordView::GetMinimumSize() { 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Height will be ignored by the LocationBarView. 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return GetSizeForLabelWidth(partial_label_.GetMinimumSize().width()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SelectedKeywordView::Layout() { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLabel(((width() == GetPreferredSize().width()) ? 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full_label_ : partial_label_).text()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconLabelBubbleView::Layout(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SelectedKeywordView::SetKeyword(const base::string16& keyword) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_ = keyword; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (keyword.empty()) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile_); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* model = 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!model) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_extension_keyword; 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 short_name = 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) model->GetKeywordShortName(keyword, &is_extension_keyword); 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 full_name = is_extension_keyword ? 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) short_name : 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF16(IDS_OMNIBOX_KEYWORD_TEXT, short_name); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) full_label_.SetText(full_name); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 min_string( 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) location_bar_util::CalculateMinString(short_name)); 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 partial_name = is_extension_keyword ? 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) min_string : 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF16(IDS_OMNIBOX_KEYWORD_TEXT, min_string); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) partial_label_.SetText(min_string.empty() ? 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) full_label_.text() : partial_name); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 84