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
16SelectedKeywordView::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
26SelectedKeywordView::~SelectedKeywordView() {
27}
28
29void SelectedKeywordView::SetFont(const gfx::Font& font) {
30  IconLabelBubbleView::SetFont(font);
31  full_label_.SetFont(font);
32  partial_label_.SetFont(font);
33}
34
35gfx::Size SelectedKeywordView::GetPreferredSize() {
36  gfx::Size size(GetNonLabelSize());
37  size.Enlarge(full_label_.GetPreferredSize().width(), 0);
38  return size;
39}
40
41gfx::Size SelectedKeywordView::GetMinimumSize() {
42  gfx::Size size(GetNonLabelSize());
43  size.Enlarge(partial_label_.GetMinimumSize().width(), 0);
44  return size;
45}
46
47void SelectedKeywordView::Layout() {
48  SetLabel((width() == GetPreferredSize().width()) ?
49      full_label_.GetText() : partial_label_.GetText());
50  IconLabelBubbleView::Layout();
51}
52
53void 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