1// Copyright (c) 2010 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#import <Cocoa/Cocoa.h>
6#include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h"
7
8#include "base/sys_string_conversions.h"
9#import "chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.h"
10
11// static
12bool FindBarBridge::disable_animations_during_testing_ = false;
13
14FindBarBridge::FindBarBridge()
15    : find_bar_controller_(NULL) {
16  cocoa_controller_ = [[FindBarCocoaController alloc] init];
17  [cocoa_controller_ setFindBarBridge:this];
18}
19
20FindBarBridge::~FindBarBridge() {
21  [cocoa_controller_ release];
22}
23
24void FindBarBridge::SetFindBarController(
25    FindBarController* find_bar_controller) {
26  find_bar_controller_ = find_bar_controller;
27}
28
29FindBarController* FindBarBridge::GetFindBarController() const {
30  return find_bar_controller_;
31}
32
33FindBarTesting* FindBarBridge::GetFindBarTesting() {
34  return this;
35}
36
37void FindBarBridge::Show(bool animate) {
38  bool really_animate = animate && !disable_animations_during_testing_;
39  [cocoa_controller_ showFindBar:(really_animate ? YES : NO)];
40}
41
42void FindBarBridge::Hide(bool animate) {
43  bool really_animate = animate && !disable_animations_during_testing_;
44  [cocoa_controller_ hideFindBar:(really_animate ? YES : NO)];
45}
46
47void FindBarBridge::SetFocusAndSelection() {
48  [cocoa_controller_ setFocusAndSelection];
49}
50
51void FindBarBridge::ClearResults(const FindNotificationDetails& results) {
52  [cocoa_controller_ clearResults:results];
53}
54
55void FindBarBridge::SetFindText(const string16& find_text) {
56  [cocoa_controller_ setFindText:base::SysUTF16ToNSString(find_text)];
57}
58
59void FindBarBridge::UpdateUIForFindResult(const FindNotificationDetails& result,
60                                          const string16& find_text) {
61  [cocoa_controller_ updateUIForFindResult:result withText:find_text];
62}
63
64void FindBarBridge::AudibleAlert() {
65  // Beep beep, beep beep, Yeah!
66  NSBeep();
67}
68
69bool FindBarBridge::IsFindBarVisible() {
70  return [cocoa_controller_ isFindBarVisible] ? true : false;
71}
72
73void FindBarBridge::MoveWindowIfNecessary(const gfx::Rect& selection_rect,
74                                          bool no_redraw) {
75  // See FindBarCocoaController moveFindBarToAvoidRect.
76}
77
78void FindBarBridge::StopAnimation() {
79  [cocoa_controller_ stopAnimation];
80}
81
82void FindBarBridge::RestoreSavedFocus() {
83  [cocoa_controller_ restoreSavedFocus];
84}
85
86bool FindBarBridge::GetFindBarWindowInfo(gfx::Point* position,
87                                         bool* fully_visible) {
88  NSWindow* window = [[cocoa_controller_ view] window];
89  bool window_visible = [window isVisible] ? true : false;
90  if (position) {
91    if (window_visible)
92      *position = [cocoa_controller_ findBarWindowPosition];
93    else
94      *position = gfx::Point(0, 0);
95  }
96  if (fully_visible) {
97    *fully_visible = window_visible &&
98        [cocoa_controller_ isFindBarVisible] &&
99        ![cocoa_controller_ isFindBarAnimating];
100  }
101  return window_visible;
102}
103
104string16 FindBarBridge::GetFindText() {
105  // This function is currently only used in Windows and Linux specific browser
106  // tests (testing prepopulate values that Mac's don't rely on), but if we add
107  // more tests that are non-platform specific, we need to flesh out this
108  // function.
109  NOTIMPLEMENTED();
110  return string16();
111}
112
113string16 FindBarBridge::GetFindSelectedText() {
114  // This function is currently only used in Windows and Linux specific browser
115  // tests (testing prepopulate values that Mac's don't rely on), but if we add
116  // more tests that are non-platform specific, we need to flesh out this
117  // function.
118  NOTIMPLEMENTED();
119  return string16();
120}
121
122string16 FindBarBridge::GetMatchCountText() {
123  // This function is currently only used in Windows and Linux specific browser
124  // tests (testing prepopulate values that Mac's don't rely on), but if we add
125  // more tests that are non-platform specific, we need to flesh out this
126  // function.
127  NOTIMPLEMENTED();
128  return string16();
129}
130