find_bar_bridge.mm revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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#import <Cocoa/Cocoa.h>
6#include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h"
7
8#include "base/strings/sys_string_conversions.h"
9#import "chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.h"
10#include "ui/gfx/range/range.h"
11
12// static
13bool FindBarBridge::disable_animations_during_testing_ = false;
14
15FindBarBridge::FindBarBridge(Browser* browser)
16    : find_bar_controller_(NULL) {
17  cocoa_controller_ = [[FindBarCocoaController alloc] initWithBrowser:browser];
18  [cocoa_controller_ setFindBarBridge:this];
19}
20
21FindBarBridge::~FindBarBridge() {
22  [cocoa_controller_ release];
23}
24
25void FindBarBridge::SetFindBarController(
26    FindBarController* find_bar_controller) {
27  find_bar_controller_ = find_bar_controller;
28}
29
30FindBarController* FindBarBridge::GetFindBarController() const {
31  return find_bar_controller_;
32}
33
34FindBarTesting* FindBarBridge::GetFindBarTesting() {
35  return this;
36}
37
38void FindBarBridge::Show(bool animate) {
39  bool really_animate = animate && !disable_animations_during_testing_;
40  [cocoa_controller_ showFindBar:(really_animate ? YES : NO)];
41}
42
43void FindBarBridge::Hide(bool animate) {
44  bool really_animate = animate && !disable_animations_during_testing_;
45  [cocoa_controller_ hideFindBar:(really_animate ? YES : NO)];
46}
47
48void FindBarBridge::SetFocusAndSelection() {
49  [cocoa_controller_ setFocusAndSelection];
50}
51
52void FindBarBridge::ClearResults(const FindNotificationDetails& results) {
53  [cocoa_controller_ clearResults:results];
54}
55
56void FindBarBridge::SetFindTextAndSelectedRange(
57    const base::string16& find_text,
58    const gfx::Range& selected_range) {
59  [cocoa_controller_ setFindText:base::SysUTF16ToNSString(find_text)
60                   selectedRange:selected_range.ToNSRange()];
61}
62
63base::string16 FindBarBridge::GetFindText() {
64  return base::SysNSStringToUTF16([cocoa_controller_ findText]);
65}
66
67gfx::Range FindBarBridge::GetSelectedRange() {
68  return gfx::Range([cocoa_controller_ selectedRange]);
69}
70
71void FindBarBridge::UpdateUIForFindResult(const FindNotificationDetails& result,
72                                          const base::string16& find_text) {
73  [cocoa_controller_ updateUIForFindResult:result withText:find_text];
74}
75
76void FindBarBridge::AudibleAlert() {
77  // Beep beep, beep beep, Yeah!
78  NSBeep();
79}
80
81bool FindBarBridge::IsFindBarVisible() {
82  return [cocoa_controller_ isFindBarVisible] ? true : false;
83}
84
85void FindBarBridge::MoveWindowIfNecessary(const gfx::Rect& selection_rect,
86                                          bool no_redraw) {
87  // See FindBarCocoaController moveFindBarToAvoidRect.
88}
89
90void FindBarBridge::StopAnimation() {
91  [cocoa_controller_ stopAnimation];
92}
93
94void FindBarBridge::RestoreSavedFocus() {
95  [cocoa_controller_ restoreSavedFocus];
96}
97
98bool FindBarBridge::HasGlobalFindPasteboard() {
99  return true;
100}
101
102void FindBarBridge::UpdateFindBarForChangedWebContents() {
103  [cocoa_controller_ updateFindBarForChangedWebContents];
104}
105
106bool FindBarBridge::GetFindBarWindowInfo(gfx::Point* position,
107                                         bool* fully_visible) {
108  NSWindow* window = [[cocoa_controller_ view] window];
109  bool window_visible = [window isVisible] ? true : false;
110  if (position) {
111    if (window_visible)
112      *position = [cocoa_controller_ findBarWindowPosition];
113    else
114      *position = gfx::Point(0, 0);
115  }
116  if (fully_visible) {
117    *fully_visible = window_visible &&
118        [cocoa_controller_ isFindBarVisible] &&
119        ![cocoa_controller_ isFindBarAnimating];
120  }
121  return window_visible;
122}
123
124base::string16 FindBarBridge::GetFindSelectedText() {
125  // This function is currently only used in Views.
126  NOTIMPLEMENTED();
127  return base::string16();
128}
129
130base::string16 FindBarBridge::GetMatchCountText() {
131  return base::SysNSStringToUTF16([cocoa_controller_ matchCountText]);
132}
133
134int FindBarBridge::GetWidth() {
135  return [cocoa_controller_ findBarWidth];
136}
137