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/star_view.h"
6
7#include "base/utf_string_conversions.h"
8#include "chrome/app/chrome_command_ids.h"
9#include "chrome/browser/command_updater.h"
10#include "chrome/browser/ui/view_ids.h"
11#include "chrome/browser/ui/views/browser_dialogs.h"
12#include "grit/generated_resources.h"
13#include "grit/theme_resources.h"
14#include "ui/base/accessibility/accessible_view_state.h"
15#include "ui/base/l10n/l10n_util.h"
16#include "ui/base/resource/resource_bundle.h"
17
18StarView::StarView(CommandUpdater* command_updater)
19    : command_updater_(command_updater) {
20  SetID(VIEW_ID_STAR_BUTTON);
21  SetToggled(false);
22  set_accessibility_focusable(true);
23}
24
25StarView::~StarView() {
26}
27
28void StarView::SetToggled(bool on) {
29  SetTooltipText(UTF16ToWide(l10n_util::GetStringUTF16(
30      on ? IDS_TOOLTIP_STARRED : IDS_TOOLTIP_STAR)));
31  SetImage(ResourceBundle::GetSharedInstance().GetBitmapNamed(
32      on ? IDR_STAR_LIT : IDR_STAR));
33}
34
35void StarView::GetAccessibleState(ui::AccessibleViewState* state) {
36  state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_STAR);
37  state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
38}
39
40bool StarView::GetTooltipText(const gfx::Point& p, std::wstring* tooltip) {
41  // Don't show tooltip to distract user if BookmarkBubbleView is showing.
42  if (browser::IsBookmarkBubbleViewShowing())
43    return false;
44
45  return ImageView::GetTooltipText(p, tooltip);
46}
47
48bool StarView::OnMousePressed(const views::MouseEvent& event) {
49  // We want to show the bubble on mouse release; that is the standard behavior
50  // for buttons.
51  return true;
52}
53
54void StarView::OnMouseReleased(const views::MouseEvent& event) {
55  if (HitTest(event.location()))
56    command_updater_->ExecuteCommand(IDC_BOOKMARK_PAGE);
57}
58
59bool StarView::OnKeyPressed(const views::KeyEvent& event) {
60  if (event.key_code() == ui::VKEY_SPACE ||
61      event.key_code() == ui::VKEY_RETURN) {
62    command_updater_->ExecuteCommand(IDC_BOOKMARK_PAGE);
63    return true;
64  }
65  return false;
66}
67
68void StarView::BubbleClosing(Bubble* bubble, bool closed_by_escape) {
69}
70
71bool StarView::CloseOnEscape() {
72  return true;
73}
74
75bool StarView::FadeInOnShow() {
76  return false;
77}
78