• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/memory/scoped_nsobject.h"
8 #include "base/string16.h"
9 #include "ui/gfx/point.h"
10 
11 @class BrowserWindowController;
12 class FindBarBridge;
13 @class FindBarTextField;
14 class 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 
30   // Needed to call methods on FindBarController.
31   FindBarBridge* findBarBridge_;  // weak
32 
33   // Needed to request a layout of the FindBar view.
34   BrowserWindowController* browserWindowController_;  // weak
35 
36   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   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   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 
57 // Initializes a new FindBarCocoaController.
58 - (id)init;
59 
60 - (void)setFindBarBridge:(FindBarBridge*)findBar;
61 - (void)setBrowserWindowController:(BrowserWindowController*)controller;
62 
63 - (IBAction)close:(id)sender;
64 
65 - (IBAction)nextResult:(id)sender;
66 
67 - (IBAction)previousResult:(id)sender;
68 
69 // Position the find bar at the given maximum y-coordinate (the min-y of the
70 // bar -- toolbar + possibly bookmark bar, but not including the infobars) with
71 // the given maximum width (i.e., the find bar should fit between 0 and
72 // |maxWidth|).
73 - (void)positionFindBarViewAtMaxY:(CGFloat)maxY maxWidth:(CGFloat)maxWidth;
74 
75 // Methods called from FindBarBridge.
76 - (void)showFindBar:(BOOL)animate;
77 - (void)hideFindBar:(BOOL)animate;
78 - (void)stopAnimation;
79 - (void)setFocusAndSelection;
80 - (void)restoreSavedFocus;
81 - (void)setFindText:(NSString*)findText;
82 
83 - (void)clearResults:(const FindNotificationDetails&)results;
84 - (void)updateUIForFindResult:(const FindNotificationDetails&)results
85                      withText:(const string16&)findText;
86 - (BOOL)isFindBarVisible;
87 - (BOOL)isFindBarAnimating;
88 
89 // Returns the FindBar's position in the superview's coordinates, but with
90 // the Y coordinate growing down.
91 - (gfx::Point)findBarWindowPosition;
92 
93 @end
94