blob: 5bea3329fa0539377499e31972df44103b74ef70 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Cocoa/Cocoa.h>
#include "base/mac/scoped_nsobject.h"
#include "base/strings/string16.h"
#include "ui/gfx/point.h"
class Browser;
class FindBarBridge;
@class FindBarTextField;
class FindNotificationDetails;
@class FocusTracker;
// A controller for the find bar in the browser window. Manages
// updating the state of the find bar and provides a target for the
// next/previous/close buttons. Certain operations require a pointer
// to the cross-platform FindBarController, so be sure to call
// setFindBarBridge: after creating this controller.
@interface FindBarCocoaController : NSViewController {
@private
IBOutlet NSView* findBarView_;
IBOutlet FindBarTextField* findText_;
IBOutlet NSButton* nextButton_;
IBOutlet NSButton* previousButton_;
IBOutlet NSButton* closeButton_;
// Needed to call methods on FindBarController.
FindBarBridge* findBarBridge_; // weak
Browser* browser_;
base::scoped_nsobject<FocusTracker> focusTracker_;
// The show/hide animation. This is defined to be non-nil if the
// animation is running, and is always nil otherwise. The
// FindBarCocoaController should not be deallocated while an animation is
// running (stopAnimation is currently called before the last tab in a
// window is removed).
base::scoped_nsobject<NSViewAnimation> showHideAnimation_;
// The horizontal-moving animation, to avoid occluding find results. This
// is nil when the animation is not running, and is also stopped by
// stopAnimation.
base::scoped_nsobject<NSViewAnimation> moveAnimation_;
// If YES, do nothing as a result of find pasteboard update notifications.
BOOL suppressPboardUpdateActions_;
// Vertical point of attachment of the FindBar.
CGFloat maxY_;
// Default width of FindBar.
CGFloat defaultWidth_;
};
@property (readonly, nonatomic) NSView* findBarView;
// Initializes a new FindBarCocoaController.
- (id)initWithBrowser:(Browser*)browser;
- (void)setFindBarBridge:(FindBarBridge*)findBar;
- (IBAction)close:(id)sender;
- (IBAction)nextResult:(id)sender;
- (IBAction)previousResult:(id)sender;
// Position the find bar at the given maximum y-coordinate (the min-y of the
// bar -- toolbar + possibly bookmark bar, but not including the infobars) with
// the given maximum width (i.e., the find bar should fit between 0 and
// |maxWidth|).
- (void)positionFindBarViewAtMaxY:(CGFloat)maxY maxWidth:(CGFloat)maxWidth;
// Methods called from FindBarBridge.
- (void)showFindBar:(BOOL)animate;
- (void)hideFindBar:(BOOL)animate;
- (void)stopAnimation;
- (void)setFocusAndSelection;
- (void)restoreSavedFocus;
- (void)setFindText:(NSString*)findText
selectedRange:(const NSRange&)selectedRange;
- (NSString*)findText;
- (NSRange)selectedRange;
- (NSString*)matchCountText;
- (void)updateFindBarForChangedWebContents;
- (void)clearResults:(const FindNotificationDetails&)results;
- (void)updateUIForFindResult:(const FindNotificationDetails&)results
withText:(const string16&)findText;
- (BOOL)isFindBarVisible;
- (BOOL)isFindBarAnimating;
// Returns the FindBar's position in the superview's coordinates, but with
// the Y coordinate growing down.
- (gfx::Point)findBarWindowPosition;
// Returns the width of the FindBar.
- (int)findBarWidth;
@end