Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(666)

Unified Diff: chrome/browser/ui/cocoa/infobars/infobar_controller.mm

Issue 11773025: cocoa/infobars: Split infobar_controller.* into smaller parts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add files to chrome_nibs.gyp Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
-}
« no previous file with comments | « chrome/browser/ui/cocoa/infobars/infobar_controller.h ('k') | chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698