Index: chrome/browser/ui/cocoa/infobars/infobar_controller.mm |
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm |
index be70ccd070ce326c12ffcd61cde633cae16abf7e..fee307749d2c9a3dd6b8b5c1982d5276382653c2 100644 |
--- a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm |
+++ b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm |
@@ -2,29 +2,22 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#import <Cocoa/Cocoa.h> |
+#import "chrome/browser/ui/cocoa/infobars/infobar_controller.h" |
-#include "base/logging.h" // for NOTREACHED() |
+#include "base/logging.h" |
#include "base/mac/bundle_locations.h" |
#include "base/mac/mac_util.h" |
-#include "base/sys_string_conversions.h" |
#include "grit/ui_resources.h" |
-#include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
#include "chrome/browser/api/infobars/infobar_service.h" |
-#include "chrome/browser/infobars/alternate_nav_infobar_delegate.h" |
#import "chrome/browser/ui/cocoa/animatable_view.h" |
#import "chrome/browser/ui/cocoa/browser_window_controller.h" |
-#include "chrome/browser/ui/cocoa/event_utils.h" |
#import "chrome/browser/ui/cocoa/hyperlink_text_view.h" |
#import "chrome/browser/ui/cocoa/image_button_cell.h" |
#include "chrome/browser/ui/cocoa/infobars/infobar.h" |
#import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h" |
-#import "chrome/browser/ui/cocoa/infobars/infobar_controller.h" |
#import "chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h" |
#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" |
-#include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
#include "ui/gfx/image/image.h" |
-#include "webkit/glue/window_open_disposition.h" |
namespace { |
// Durations set to match the default SlideAnimation duration. |
@@ -284,193 +277,3 @@ const float kAnimateCloseDuration = 0.12; |
} |
@end |
- |
- |
-///////////////////////////////////////////////////////////////////////// |
-// AlternateNavInfoBarController implementation |
- |
-@implementation AlternateNavInfoBarController |
- |
-// Link infobars have a text message, of which part is linkified. We |
-// use an NSAttributedString to display styled text, and we set a |
-// NSLink attribute on the hyperlink portion of the message. Infobars |
-// use a custom NSTextField subclass, which allows us to override |
-// textView:clickedOnLink:atIndex: and intercept clicks. |
-// |
-- (void)addAdditionalControls { |
- // No buttons. |
- [self removeButtons]; |
- |
- AlternateNavInfoBarDelegate* delegate = |
- delegate_->AsAlternateNavInfoBarDelegate(); |
- DCHECK(delegate); |
- size_t offset = string16::npos; |
- string16 message = delegate->GetMessageTextWithOffset(&offset); |
- string16 link = delegate->GetLinkText(); |
- NSFont* font = [NSFont labelFontOfSize: |
- [NSFont systemFontSizeForControlSize:NSRegularControlSize]]; |
- HyperlinkTextView* view = (HyperlinkTextView*)label_.get(); |
- [view setMessageAndLink:base::SysUTF16ToNSString(message) |
- withLink:base::SysUTF16ToNSString(link) |
- atOffset:offset |
- font:font |
- messageColor:[NSColor blackColor] |
- linkColor:[NSColor blueColor]]; |
-} |
- |
-// Called when someone clicks on the link in the infobar. This method |
-// is called by the InfobarTextField on its delegate (the |
-// AlternateNavInfoBarController). |
-- (void)linkClicked { |
- if (![self isOwned]) |
- return; |
- WindowOpenDisposition disposition = |
- event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); |
- if (delegate_->AsAlternateNavInfoBarDelegate()->LinkClicked(disposition)) |
- [self removeSelf]; |
-} |
- |
-@end |
- |
- |
-///////////////////////////////////////////////////////////////////////// |
-// ConfirmInfoBarController implementation |
- |
-@implementation ConfirmInfoBarController |
- |
-// Called when someone clicks on the "OK" button. |
-- (IBAction)ok:(id)sender { |
- if (![self isOwned]) |
- return; |
- if (delegate_->AsConfirmInfoBarDelegate()->Accept()) |
- [self removeSelf]; |
-} |
- |
-// Called when someone clicks on the "Cancel" button. |
-- (IBAction)cancel:(id)sender { |
- if (![self isOwned]) |
- return; |
- if (delegate_->AsConfirmInfoBarDelegate()->Cancel()) |
- [self removeSelf]; |
-} |
- |
-// Confirm infobars can have OK and/or cancel buttons, depending on |
-// the return value of GetButtons(). We create each button if |
-// required and position them to the left of the close button. |
-- (void)addAdditionalControls { |
- ConfirmInfoBarDelegate* delegate = delegate_->AsConfirmInfoBarDelegate(); |
- DCHECK(delegate); |
- int visibleButtons = delegate->GetButtons(); |
- |
- NSRect okButtonFrame = [okButton_ frame]; |
- NSRect cancelButtonFrame = [cancelButton_ frame]; |
- |
- DCHECK(NSMaxX(cancelButtonFrame) < NSMinX(okButtonFrame)) |
- << "Ok button expected to be on the right of the Cancel button in nib"; |
- |
- CGFloat rightEdge = NSMaxX(okButtonFrame); |
- CGFloat spaceBetweenButtons = |
- NSMinX(okButtonFrame) - NSMaxX(cancelButtonFrame); |
- CGFloat spaceBeforeButtons = |
- NSMinX(cancelButtonFrame) - NSMaxX([label_.get() frame]); |
- |
- // Update and position the OK button if needed. Otherwise, hide it. |
- if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_OK) { |
- [okButton_ setTitle:base::SysUTF16ToNSString( |
- delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK))]; |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:okButton_]; |
- okButtonFrame = [okButton_ frame]; |
- |
- // Position the ok button to the left of the Close button. |
- okButtonFrame.origin.x = rightEdge - okButtonFrame.size.width; |
- [okButton_ setFrame:okButtonFrame]; |
- |
- // Update the rightEdge |
- rightEdge = NSMinX(okButtonFrame); |
- } else { |
- [okButton_ removeFromSuperview]; |
- okButton_ = nil; |
- } |
- |
- // Update and position the Cancel button if needed. Otherwise, hide it. |
- if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { |
- [cancelButton_ setTitle:base::SysUTF16ToNSString( |
- delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL))]; |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:cancelButton_]; |
- cancelButtonFrame = [cancelButton_ frame]; |
- |
- // If we had a Ok button, leave space between the buttons. |
- if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_OK) { |
- rightEdge -= spaceBetweenButtons; |
- } |
- |
- // Position the Cancel button on our current right edge. |
- cancelButtonFrame.origin.x = rightEdge - cancelButtonFrame.size.width; |
- [cancelButton_ setFrame:cancelButtonFrame]; |
- |
- // Update the rightEdge. |
- rightEdge = NSMinX(cancelButtonFrame); |
- } else { |
- [cancelButton_ removeFromSuperview]; |
- cancelButton_ = nil; |
- } |
- |
- // If we had either button, leave space before the edge of the textfield. |
- if ((visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) || |
- (visibleButtons & ConfirmInfoBarDelegate::BUTTON_OK)) { |
- rightEdge -= spaceBeforeButtons; |
- } |
- |
- NSRect frame = [label_.get() frame]; |
- DCHECK(rightEdge > NSMinX(frame)) |
- << "Need to make the xib larger to handle buttons with text this long"; |
- frame.size.width = rightEdge - NSMinX(frame); |
- [label_.get() setFrame:frame]; |
- |
- // Set the text and link. |
- NSString* message = base::SysUTF16ToNSString(delegate->GetMessageText()); |
- string16 link = delegate->GetLinkText(); |
- if (!link.empty()) { |
- // Add spacing between the label and the link. |
- message = [message stringByAppendingString:@" "]; |
- } |
- NSFont* font = [NSFont labelFontOfSize: |
- [NSFont systemFontSizeForControlSize:NSRegularControlSize]]; |
- HyperlinkTextView* view = (HyperlinkTextView*)label_.get(); |
- [view setMessageAndLink:message |
- withLink:base::SysUTF16ToNSString(link) |
- atOffset:[message length] |
- font:font |
- messageColor:[NSColor blackColor] |
- linkColor:[NSColor blueColor]]; |
-} |
- |
-// Called when someone clicks on the link in the infobar. This method |
-// is called by the InfobarTextField on its delegate (the |
-// AlternateNavInfoBarController). |
-- (void)linkClicked { |
- if (![self isOwned]) |
- return; |
- WindowOpenDisposition disposition = |
- event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); |
- if (delegate_->AsConfirmInfoBarDelegate()->LinkClicked(disposition)) |
- [self removeSelf]; |
-} |
- |
-@end |
- |
- |
-////////////////////////////////////////////////////////////////////////// |
-// CreateInfoBar() implementations |
- |
-InfoBar* AlternateNavInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { |
- AlternateNavInfoBarController* controller = |
- [[AlternateNavInfoBarController alloc] initWithDelegate:this owner:owner]; |
- return new InfoBar(controller, this); |
-} |
- |
-InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { |
- ConfirmInfoBarController* controller = |
- [[ConfirmInfoBarController alloc] initWithDelegate:this owner:owner]; |
- return new InfoBar(controller, this); |
-} |