summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/find_bar_cocoa_controller.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/find_bar_cocoa_controller.mm')
-rw-r--r--chrome/browser/cocoa/find_bar_cocoa_controller.mm384
1 files changed, 0 insertions, 384 deletions
diff --git a/chrome/browser/cocoa/find_bar_cocoa_controller.mm b/chrome/browser/cocoa/find_bar_cocoa_controller.mm
deleted file mode 100644
index 2845e3e..0000000
--- a/chrome/browser/cocoa/find_bar_cocoa_controller.mm
+++ /dev/null
@@ -1,384 +0,0 @@
-// Copyright (c) 2009 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_util.h"
-#include "base/sys_string_conversions.h"
-#include "chrome/browser/find_bar_controller.h"
-#include "chrome/browser/cocoa/browser_window_cocoa.h"
-#import "chrome/browser/cocoa/find_bar_cocoa_controller.h"
-#import "chrome/browser/cocoa/find_bar_bridge.h"
-#import "chrome/browser/cocoa/find_bar_text_field.h"
-#import "chrome/browser/cocoa/find_bar_text_field_cell.h"
-#import "chrome/browser/cocoa/find_pasteboard.h"
-#import "chrome/browser/cocoa/focus_tracker.h"
-#import "chrome/browser/cocoa/tab_strip_controller.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h"
-
-namespace {
-const float kFindBarOpenDuration = 0.2;
-const float kFindBarCloseDuration = 0.15;
-}
-
-@interface FindBarCocoaController (PrivateMethods)
-// Returns the appropriate frame for a hidden find bar.
-- (NSRect)hiddenFindBarFrame;
-
-// Sets the frame of |findBarView_|. |duration| is ignored if |animate| is NO.
-- (void)setFindBarFrame:(NSRect)endFrame
- animate:(BOOL)animate
- duration:(float)duration;
-
-// Optionally stops the current search, puts |text| into the find bar, and
-// enables the buttons, but doesn't start a new search for |text|.
-- (void)prepopulateText:(NSString*)text stopSearch:(BOOL)stopSearch;
-@end
-
-@implementation FindBarCocoaController
-
-- (id)init {
- if ((self = [super initWithNibName:@"FindBar"
- bundle:mac_util::MainAppBundle()])) {
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(findPboardUpdated:)
- name:kFindPasteboardChangedNotification
- object:[FindPasteboard sharedInstance]];
- }
- return self;
-}
-
-- (void)dealloc {
- // All animations should be explicitly stopped by the TabContents before a tab
- // is closed.
- DCHECK(!currentAnimation_.get());
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [super dealloc];
-}
-
-- (void)setFindBarBridge:(FindBarBridge*)findBarBridge {
- DCHECK(!findBarBridge_); // should only be called once.
- findBarBridge_ = findBarBridge;
-}
-
-- (void)awakeFromNib {
- [findBarView_ setFrame:[self hiddenFindBarFrame]];
-
- // Stopping the search requires a findbar controller, which isn't valid yet
- // during setup. Furthermore, there is no active search yet anyway.
- [self prepopulateText:[[FindPasteboard sharedInstance] findText]
- stopSearch:NO];
-}
-
-- (IBAction)close:(id)sender {
- if (findBarBridge_)
- findBarBridge_->GetFindBarController()->EndFindSession(
- FindBarController::kKeepSelection);
-}
-
-- (IBAction)previousResult:(id)sender {
- if (findBarBridge_)
- findBarBridge_->GetFindBarController()->tab_contents()->StartFinding(
- base::SysNSStringToUTF16([findText_ stringValue]),
- false, false);
-}
-
-- (IBAction)nextResult:(id)sender {
- if (findBarBridge_)
- findBarBridge_->GetFindBarController()->tab_contents()->StartFinding(
- base::SysNSStringToUTF16([findText_ stringValue]),
- true, false);
-}
-
-- (void)findPboardUpdated:(NSNotification*)notification {
- if (suppressPboardUpdateActions_)
- return;
- [self prepopulateText:[[FindPasteboard sharedInstance] findText]
- stopSearch:YES];
-}
-
-- (void)positionFindBarViewAtMaxY:(CGFloat)maxY maxWidth:(CGFloat)maxWidth {
- static const CGFloat kRightEdgeOffset = 25;
- NSView* containerView = [self view];
- CGFloat containerHeight = NSHeight([containerView frame]);
- CGFloat containerWidth = NSWidth([containerView frame]);
-
- // Adjust where we'll actually place the find bar.
- CGFloat maxX = maxWidth - kRightEdgeOffset;
- DLOG_IF(WARNING, maxX < 0) << "Window too narrow for find bar";
- maxY += 1;
-
- NSRect newFrame = NSMakeRect(maxX - containerWidth, maxY - containerHeight,
- containerWidth, containerHeight);
- [containerView setFrame:newFrame];
-}
-
-// NSControl delegate method.
-- (void)controlTextDidChange:(NSNotification *)aNotification {
- if (!findBarBridge_)
- return;
-
- TabContents* tab_contents =
- findBarBridge_->GetFindBarController()->tab_contents();
- if (!tab_contents)
- return;
-
- NSString* findText = [findText_ stringValue];
- suppressPboardUpdateActions_ = YES;
- [[FindPasteboard sharedInstance] setFindText:findText];
- suppressPboardUpdateActions_ = NO;
-
- if ([findText length] > 0) {
- tab_contents->StartFinding(base::SysNSStringToUTF16(findText), true, false);
- } else {
- // The textbox is empty so we reset.
- tab_contents->StopFinding(FindBarController::kClearSelection);
- [self updateUIForFindResult:tab_contents->find_result()
- withText:string16()];
- }
-}
-
-// NSControl delegate method
-- (BOOL)control:(NSControl*)control
- textView:(NSTextView*)textView
- doCommandBySelector:(SEL)command {
- if (command == @selector(insertNewline:)) {
- // Pressing Return
- NSEvent* event = [NSApp currentEvent];
-
- if ([event modifierFlags] & NSShiftKeyMask)
- [previousButton_ performClick:nil];
- else
- [nextButton_ performClick:nil];
-
- return YES;
- } else if (command == @selector(insertLineBreak:)) {
- // Pressing Ctrl-Return
- if (findBarBridge_) {
- findBarBridge_->GetFindBarController()->EndFindSession(
- FindBarController::kActivateSelection);
- }
- return YES;
- } else if (command == @selector(pageUp:) ||
- command == @selector(pageUpAndModifySelection:) ||
- command == @selector(scrollPageUp:) ||
- command == @selector(pageDown:) ||
- command == @selector(pageDownAndModifySelection:) ||
- command == @selector(scrollPageDown:) ||
- command == @selector(scrollToBeginningOfDocument:) ||
- command == @selector(scrollToEndOfDocument:) ||
- command == @selector(moveUp:) ||
- command == @selector(moveDown:)) {
- TabContents* contents =
- findBarBridge_->GetFindBarController()->tab_contents();
- if (!contents)
- return NO;
-
- // Sanity-check to make sure we got a keyboard event.
- NSEvent* event = [NSApp currentEvent];
- if ([event type] != NSKeyDown && [event type] != NSKeyUp)
- return NO;
-
- // Forward the event to the renderer.
- // TODO(rohitrao): Should this call -[BaseView keyEvent:]? Is there code in
- // that function that we want to keep or avoid? Calling
- // |ForwardKeyboardEvent()| directly ignores edit commands, which breaks
- // cmd-up/down if we ever decide to include |moveToBeginningOfDocument:| in
- // the list above.
- RenderViewHost* render_view_host = contents->render_view_host();
- render_view_host->ForwardKeyboardEvent(NativeWebKeyboardEvent(event));
- return YES;
- }
-
- return NO;
-}
-
-// Methods from FindBar
-- (void)showFindBar:(BOOL)animate {
- // Save the currently-focused view. |findBarView_| is in the view
- // hierarchy by now. showFindBar can be called even when the
- // findbar is already open, so do not overwrite an already saved
- // view.
- if (!focusTracker_.get())
- focusTracker_.reset(
- [[FocusTracker alloc] initWithWindow:[findBarView_ window]]);
-
- // Animate the view into place.
- NSRect frame = [findBarView_ frame];
- frame.origin = NSMakePoint(0, 0);
- [self setFindBarFrame:frame animate:animate duration:kFindBarOpenDuration];
-}
-
-- (void)hideFindBar:(BOOL)animate {
- NSRect frame = [self hiddenFindBarFrame];
- [self setFindBarFrame:frame animate:animate duration:kFindBarCloseDuration];
-}
-
-- (void)stopAnimation {
- if (currentAnimation_.get()) {
- [currentAnimation_ stopAnimation];
- currentAnimation_.reset(nil);
- }
-}
-
-- (void)setFocusAndSelection {
- [[findText_ window] makeFirstResponder:findText_];
-
- // Enable the buttons if the find text is non-empty.
- BOOL buttonsEnabled = ([[findText_ stringValue] length] > 0) ? YES : NO;
- [previousButton_ setEnabled:buttonsEnabled];
- [nextButton_ setEnabled:buttonsEnabled];
-}
-
-- (void)restoreSavedFocus {
- if (!(focusTracker_.get() &&
- [focusTracker_ restoreFocusInWindow:[findBarView_ window]])) {
- // Fall back to giving focus to the tab contents.
- findBarBridge_->GetFindBarController()->tab_contents()->Focus();
- }
- focusTracker_.reset(nil);
-}
-
-- (void)setFindText:(NSString*)findText {
- [findText_ setStringValue:findText];
-
- // Make sure the text in the find bar always ends up in the find pasteboard
- // (and, via notifications, in the other find bars too).
- [[FindPasteboard sharedInstance] setFindText:findText];
-}
-
-- (void)clearResults:(const FindNotificationDetails&)results {
- // Just call updateUIForFindResult, which will take care of clearing
- // the search text and the results label.
- [self updateUIForFindResult:results withText:string16()];
-}
-
-- (void)updateUIForFindResult:(const FindNotificationDetails&)result
- withText:(const string16&)findText {
- // If we don't have any results and something was passed in, then
- // that means someone pressed Cmd-G while the Find box was
- // closed. In that case we need to repopulate the Find box with what
- // was passed in.
- if ([[findText_ stringValue] length] == 0 && !findText.empty()) {
- [findText_ setStringValue:base::SysUTF16ToNSString(findText)];
- [findText_ selectText:self];
- }
-
- // Make sure Find Next and Find Previous are enabled if we found any matches.
- BOOL buttonsEnabled = result.number_of_matches() > 0 ? YES : NO;
- [previousButton_ setEnabled:buttonsEnabled];
- [nextButton_ setEnabled:buttonsEnabled];
-
- // Update the results label.
- BOOL validRange = result.active_match_ordinal() != -1 &&
- result.number_of_matches() != -1;
- NSString* searchString = [findText_ stringValue];
- if ([searchString length] > 0 && validRange) {
- [[findText_ findBarTextFieldCell]
- setActiveMatch:result.active_match_ordinal()
- of:result.number_of_matches()];
- } else {
- // If there was no text entered, we don't show anything in the results area.
- [[findText_ findBarTextFieldCell] clearResults];
- }
-
- [findText_ resetFieldEditorFrameIfNeeded];
-
- // If we found any results, reset the focus tracker, so we always
- // restore focus to the tab contents.
- if (result.number_of_matches() > 0)
- focusTracker_.reset(nil);
-}
-
-- (BOOL)isFindBarVisible {
- // Find bar is visible if any part of it is on the screen.
- return NSIntersectsRect([[self view] bounds], [findBarView_ frame]);
-}
-
-- (BOOL)isFindBarAnimating {
- return (currentAnimation_.get() != nil);
-}
-
-// NSAnimation delegate methods.
-- (void)animationDidEnd:(NSAnimation*)animation {
- // Autorelease the animation (cannot use release because the animation object
- // is still on the stack.
- DCHECK(animation == currentAnimation_.get());
- [currentAnimation_.release() autorelease];
-
- // If the find bar is not visible, make it actually hidden, so it'll no longer
- // respond to key events.
- [findBarView_ setHidden:![self isFindBarVisible]];
-}
-
-@end
-
-@implementation FindBarCocoaController (PrivateMethods)
-
-- (NSRect)hiddenFindBarFrame {
- NSRect frame = [findBarView_ frame];
- NSRect containerBounds = [[self view] bounds];
- frame.origin = NSMakePoint(NSMinX(containerBounds), NSMaxY(containerBounds));
- return frame;
-}
-
-- (void)setFindBarFrame:(NSRect)endFrame
- animate:(BOOL)animate
- duration:(float)duration {
- // Save the current frame.
- NSRect startFrame = [findBarView_ frame];
-
- // Stop any existing animations.
- [currentAnimation_ stopAnimation];
-
- if (!animate) {
- [findBarView_ setFrame:endFrame];
- [findBarView_ setHidden:![self isFindBarVisible]];
- currentAnimation_.reset(nil);
- return;
- }
-
- // If animating, ensure that the find bar is not hidden. Hidden status will be
- // updated at the end of the animation.
- [findBarView_ setHidden:NO];
-
- // Reset the frame to what was saved above.
- [findBarView_ setFrame:startFrame];
- NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:
- findBarView_, NSViewAnimationTargetKey,
- [NSValue valueWithRect:endFrame], NSViewAnimationEndFrameKey, nil];
-
- currentAnimation_.reset(
- [[NSViewAnimation alloc]
- initWithViewAnimations:[NSArray arrayWithObjects:dict, nil]]);
- [currentAnimation_ gtm_setDuration:duration
- eventMask:NSLeftMouseUpMask];
- [currentAnimation_ setDelegate:self];
- [currentAnimation_ startAnimation];
-}
-
-- (void)prepopulateText:(NSString*)text stopSearch:(BOOL)stopSearch{
- [self setFindText:text];
-
- // End the find session, hide the "x of y" text and disable the
- // buttons, but do not close the find bar or raise the window here.
- if (stopSearch && findBarBridge_) {
- TabContents* contents =
- findBarBridge_->GetFindBarController()->tab_contents();
- if (contents) {
- contents->StopFinding(FindBarController::kClearSelection);
- findBarBridge_->ClearResults(contents->find_result());
- }
- }
-
- // Has to happen after |ClearResults()| above.
- BOOL buttonsEnabled = [text length] > 0 ? YES : NO;
- [previousButton_ setEnabled:buttonsEnabled];
- [nextButton_ setEnabled:buttonsEnabled];
-}
-
-@end