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