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