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 12 bool FindBarBridge::disable_animations_during_testing_ = false; 13 14 FindBarBridge::FindBarBridge() 15 : find_bar_controller_(NULL) { 16 cocoa_controller_ = [[FindBarCocoaController alloc] init]; 17 [cocoa_controller_ setFindBarBridge:this]; 18 } 19 20 FindBarBridge::~FindBarBridge() { 21 [cocoa_controller_ release]; 22 } 23 24 void FindBarBridge::SetFindBarController( 25 FindBarController* find_bar_controller) { 26 find_bar_controller_ = find_bar_controller; 27 } 28 29 FindBarController* FindBarBridge::GetFindBarController() const { 30 return find_bar_controller_; 31 } 32 33 FindBarTesting* FindBarBridge::GetFindBarTesting() { 34 return this; 35 } 36 37 void FindBarBridge::Show(bool animate) { 38 bool really_animate = animate && !disable_animations_during_testing_; 39 [cocoa_controller_ showFindBar:(really_animate ? YES : NO)]; 40 } 41 42 void FindBarBridge::Hide(bool animate) { 43 bool really_animate = animate && !disable_animations_during_testing_; 44 [cocoa_controller_ hideFindBar:(really_animate ? YES : NO)]; 45 } 46 47 void FindBarBridge::SetFocusAndSelection() { 48 [cocoa_controller_ setFocusAndSelection]; 49 } 50 51 void FindBarBridge::ClearResults(const FindNotificationDetails& results) { 52 [cocoa_controller_ clearResults:results]; 53 } 54 55 void FindBarBridge::SetFindText(const string16& find_text) { 56 [cocoa_controller_ setFindText:base::SysUTF16ToNSString(find_text)]; 57 } 58 59 void FindBarBridge::UpdateUIForFindResult(const FindNotificationDetails& result, 60 const string16& find_text) { 61 [cocoa_controller_ updateUIForFindResult:result withText:find_text]; 62 } 63 64 void FindBarBridge::AudibleAlert() { 65 // Beep beep, beep beep, Yeah! 66 NSBeep(); 67 } 68 69 bool FindBarBridge::IsFindBarVisible() { 70 return [cocoa_controller_ isFindBarVisible] ? true : false; 71 } 72 73 void FindBarBridge::MoveWindowIfNecessary(const gfx::Rect& selection_rect, 74 bool no_redraw) { 75 // See FindBarCocoaController moveFindBarToAvoidRect. 76 } 77 78 void FindBarBridge::StopAnimation() { 79 [cocoa_controller_ stopAnimation]; 80 } 81 82 void FindBarBridge::RestoreSavedFocus() { 83 [cocoa_controller_ restoreSavedFocus]; 84 } 85 86 bool 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 104 string16 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 113 string16 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 122 string16 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