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 7#include "base/mac/scoped_nsobject.h" 8#include "base/strings/string16.h" 9#include "ui/gfx/point.h" 10 11class Browser; 12class FindBarBridge; 13@class FindBarTextField; 14class FindNotificationDetails; 15@class FocusTracker; 16 17// A controller for the find bar in the browser window. Manages 18// updating the state of the find bar and provides a target for the 19// next/previous/close buttons. Certain operations require a pointer 20// to the cross-platform FindBarController, so be sure to call 21// setFindBarBridge: after creating this controller. 22 23@interface FindBarCocoaController : NSViewController { 24 @private 25 IBOutlet NSView* findBarView_; 26 IBOutlet FindBarTextField* findText_; 27 IBOutlet NSButton* nextButton_; 28 IBOutlet NSButton* previousButton_; 29 IBOutlet NSButton* closeButton_; 30 31 // Needed to call methods on FindBarController. 32 FindBarBridge* findBarBridge_; // weak 33 34 Browser* browser_; 35 36 base::scoped_nsobject<FocusTracker> focusTracker_; 37 38 // The show/hide animation. This is defined to be non-nil if the 39 // animation is running, and is always nil otherwise. The 40 // FindBarCocoaController should not be deallocated while an animation is 41 // running (stopAnimation is currently called before the last tab in a 42 // window is removed). 43 base::scoped_nsobject<NSViewAnimation> showHideAnimation_; 44 45 // The horizontal-moving animation, to avoid occluding find results. This 46 // is nil when the animation is not running, and is also stopped by 47 // stopAnimation. 48 base::scoped_nsobject<NSViewAnimation> moveAnimation_; 49 50 // If YES, do nothing as a result of find pasteboard update notifications. 51 BOOL suppressPboardUpdateActions_; 52 53 // Vertical point of attachment of the FindBar. 54 CGFloat maxY_; 55 56 // Default width of FindBar. 57 CGFloat defaultWidth_; 58}; 59 60@property (readonly, nonatomic) NSView* findBarView; 61 62// Initializes a new FindBarCocoaController. 63- (id)initWithBrowser:(Browser*)browser; 64 65- (void)setFindBarBridge:(FindBarBridge*)findBar; 66 67- (IBAction)close:(id)sender; 68 69- (IBAction)nextResult:(id)sender; 70 71- (IBAction)previousResult:(id)sender; 72 73// Position the find bar at the given maximum y-coordinate (the min-y of the 74// bar -- toolbar + possibly bookmark bar, but not including the infobars) with 75// the given maximum width (i.e., the find bar should fit between 0 and 76// |maxWidth|). 77- (void)positionFindBarViewAtMaxY:(CGFloat)maxY maxWidth:(CGFloat)maxWidth; 78 79// Methods called from FindBarBridge. 80- (void)showFindBar:(BOOL)animate; 81- (void)hideFindBar:(BOOL)animate; 82- (void)stopAnimation; 83- (void)setFocusAndSelection; 84- (void)restoreSavedFocus; 85- (void)setFindText:(NSString*)findText 86 selectedRange:(const NSRange&)selectedRange; 87- (NSString*)findText; 88- (NSRange)selectedRange; 89- (NSString*)matchCountText; 90- (void)updateFindBarForChangedWebContents; 91 92- (void)clearResults:(const FindNotificationDetails&)results; 93- (void)updateUIForFindResult:(const FindNotificationDetails&)results 94 withText:(const base::string16&)findText; 95- (BOOL)isFindBarVisible; 96- (BOOL)isFindBarAnimating; 97 98// Returns the FindBar's position in the superview's coordinates, but with 99// the Y coordinate growing down. 100- (gfx::Point)findBarWindowPosition; 101 102// Returns the width of the FindBar. 103- (int)findBarWidth; 104 105@end 106