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