From 89c375874aa2743d723e36c0a00e4694f0521d65 Mon Sep 17 00:00:00 2001 From: "sail@chromium.org" Date: Sat, 10 Sep 2011 05:27:29 +0000 Subject: Add global error bubble view for Mac This change adds a bubble view to show global errors on the Mac. Tests comming in a separate CL. BUG=95146 TEST= Review URL: http://codereview.chromium.org/7859022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100569 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/app/nibs/GlobalErrorBubble.xib | 1554 ++++++++++++++++++++ .../ui/cocoa/global_error_bubble_controller.h | 33 + .../ui/cocoa/global_error_bubble_controller.mm | 110 ++ .../browser/ui/cocoa/toolbar/toolbar_controller.h | 3 + .../browser/ui/cocoa/toolbar/toolbar_controller.mm | 4 + chrome/browser/ui/global_error.cc | 10 +- chrome/browser/ui/global_error.h | 2 + chrome/chrome_browser.gypi | 3 + chrome/chrome_dll.gypi | 1 + 9 files changed, 1719 insertions(+), 1 deletion(-) create mode 100644 chrome/app/nibs/GlobalErrorBubble.xib create mode 100644 chrome/browser/ui/cocoa/global_error_bubble_controller.h create mode 100644 chrome/browser/ui/cocoa/global_error_bubble_controller.mm diff --git a/chrome/app/nibs/GlobalErrorBubble.xib b/chrome/app/nibs/GlobalErrorBubble.xib new file mode 100644 index 0000000..1c3a9e6 --- /dev/null +++ b/chrome/app/nibs/GlobalErrorBubble.xib @@ -0,0 +1,1554 @@ + + + + 1050 + 10F2521 + 823 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 823 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + GlobalErrorBubbleController + + + FirstResponder + + + NSApplication + + + 15 + 2 + {{196, 399}, {273, 121}} + 536873984 + Window + InfoBubbleWindow + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 274 + + YES + + + 265 + + YES + + + 289 + {{5, -3}, {96, 32}} + + YES + + 67239424 + 134217728 + Button + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + Gw + 200 + 25 + + + + + 289 + {{101, -3}, {96, 32}} + + YES + + 67239424 + 134217728 + Button + + + -2038284033 + 129 + + DQ + 200 + 25 + + + + {{69, 7}, {203, 28}} + + GTMWidthBasedTweaker + + + + 266 + {{10, 44}, {253, 32}} + + YES + + 67239424 + 272629760 + Your sparble needs fargling - marble tarble warble faable? + + LucidaGrande + 12 + 16 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 266 + {{42, 83}, {221, 18}} + + YES + + 67239424 + 272629760 + Error Title + + LucidaGrande + 13 + 16 + + + + + + + + + 268 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{10, 78}, {24, 24}} + + YES + + 67239424 + 33685504 + + LucidaGrande + 11 + 3100 + + 0 + 0 + 0 + NO + + YES + + + {273, 121} + + InfoBubbleView + + + {273, 121} + + + {{0, 0}, {1680, 1028}} + {1.79769e+308, 1.79769e+308} + + + ChromeUILocalizer + + + GTMUILocalizerAndLayoutTweaker + + + + + YES + + + window + + + + 3 + + + + bubble_ + + + + 5 + + + + delegate + + + + 6 + + + + title_ + + + + 63 + + + + message_ + + + + 64 + + + + acceptButton_ + + + + 65 + + + + cancelButton_ + + + + 66 + + + + iconView_ + + + + 67 + + + + uiObject_ + + + + 68 + + + + localizer_ + + + + 69 + + + + onAccept: + + + + 72 + + + + onCancel: + + + + 73 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + 2 + + + YES + + + + + + 4 + + + YES + + + + + + + + + 20 + + + + + 21 + + + + + 52 + + + YES + + + + + + 53 + + + + + 54 + + + YES + + + + + + 55 + + + + + 56 + + + YES + + + + + + 57 + + + + + 71 + + + YES + + + + + + + 58 + + + YES + + + + + + 59 + + + + + 60 + + + YES + + + + + + 61 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBViewEditorWindowController.showingLayoutRectangles + 1.IBWindowTemplateEditedContentRect + 1.NSWindowTemplate.visibleAtLaunch + 1.WindowOrigin + 1.editorWindowContentRectSynchronizationRect + 2.IBPluginDependency + 20.IBPluginDependency + 21.IBPluginDependency + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 52.IBPluginDependency + 52.IBViewBoundsToFrameTransform + 53.IBPluginDependency + 54.IBPluginDependency + 54.IBViewBoundsToFrameTransform + 55.IBPluginDependency + 56.IBPluginDependency + 56.IBViewBoundsToFrameTransform + 57.IBPluginDependency + 58.IBPluginDependency + 58.IBViewBoundsToFrameTransform + 59.IBPluginDependency + 60.IBPluginDependency + 60.IBViewBoundsToFrameTransform + 61.IBPluginDependency + 71.IBViewBoundsToFrameTransform + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{702, 986}, {273, 121}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{702, 986}, {273, 121}} + + {196, 240} + {{357, 418}, {480, 270}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AQAAAABDAgAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + AUJEAABDNgAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDYgAAwwkAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBIAAAwz8AAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDSgAAwroAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC1AAAwroAAA + + com.apple.InterfaceBuilder.CocoaPlugin + + AUKKAABBEAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 73 + + + + YES + + BaseBubbleController + NSWindowController + + bubble_ + InfoBubbleView + + + bubble_ + + bubble_ + InfoBubbleView + + + + IBProjectSource + browser/ui/cocoa/base_bubble_controller.h + + + + ChromeEventProcessingWindow + NSWindow + + IBProjectSource + browser/ui/cocoa/chrome_event_processing_window.h + + + + ChromeUILocalizer + GTMUILocalizer + + IBProjectSource + browser/ui/cocoa/ui_localizer.h + + + + GTMUILocalizer + NSObject + + YES + + YES + otherObjectToLocalize_ + owner_ + yetAnotherObjectToLocalize_ + + + YES + id + id + id + + + + YES + + YES + otherObjectToLocalize_ + owner_ + yetAnotherObjectToLocalize_ + + + YES + + otherObjectToLocalize_ + id + + + owner_ + id + + + yetAnotherObjectToLocalize_ + id + + + + + IBProjectSource + ../third_party/GTM/AppKit/GTMUILocalizer.h + + + + GTMUILocalizerAndLayoutTweaker + NSObject + + YES + + YES + localizerOwner_ + localizer_ + uiObject_ + + + YES + id + GTMUILocalizer + id + + + + YES + + YES + localizerOwner_ + localizer_ + uiObject_ + + + YES + + localizerOwner_ + id + + + localizer_ + GTMUILocalizer + + + uiObject_ + id + + + + + IBProjectSource + ../third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h + + + + InfoBubbleView + NSView + + IBProjectSource + browser/ui/cocoa/info_bubble_view.h + + + + InfoBubbleWindow + ChromeEventProcessingWindow + + IBProjectSource + browser/ui/cocoa/info_bubble_window.h + + + + NSObject + + IBProjectSource + ../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.h + + + + NSObject + + IBProjectSource + browser/ui/cocoa/objc_zombie.h + + + + NSObject + + IBProjectSource + browser/ui/cocoa/status_bubble_mac.h + + + + NSObject + + IBProjectSource + browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h + + + + NSView + + IBProjectSource + browser/ui/cocoa/view_id_util.h + + + + NSWindow + + IBProjectSource + browser/ui/cocoa/framed_browser_window.h + + + + NSWindow + + IBProjectSource + browser/ui/cocoa/themed_window.h + + + + + YES + + GlobalErrorBubbleController + BaseBubbleController + + YES + + YES + onAccept: + onCancel: + + + YES + id + id + + + + YES + + YES + onAccept: + onCancel: + + + YES + + onAccept: + id + + + onCancel: + id + + + + + YES + + YES + acceptButton_ + cancelButton_ + iconView_ + message_ + title_ + + + YES + NSButton + NSButton + NSImageView + NSTextField + NSTextField + + + + YES + + YES + acceptButton_ + cancelButton_ + iconView_ + message_ + title_ + + + YES + + acceptButton_ + NSButton + + + cancelButton_ + NSButton + + + iconView_ + NSImageView + + + message_ + NSTextField + + + title_ + NSTextField + + + + + IBDocumentRelativeSource + ../../browser/ui/cocoa/global_error_bubble_controller.h + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSObject + + IBFrameworkSource + AddressBook.framework/Headers/ABActions.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAlert.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAnimation.h + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSBrowser.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSComboBox.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSComboBoxCell.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDatePickerCell.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSImage.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSRuleEditor.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSound.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSpeechRecognizer.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSpeechSynthesizer.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSplitView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTabView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSText.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTextStorage.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTextView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTokenField.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTokenFieldCell.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbar.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSMetadata.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSNetServices.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPort.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSSpellServer.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSStream.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSXMLParser.h + + + + NSObject + + IBFrameworkSource + Print.framework/Headers/PDEPluginInterface.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFAuthorizationView.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFCertificatePanel.h + + + + NSObject + + IBFrameworkSource + SecurityInterface.framework/Headers/SFChooseIdentityPanel.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + + + NSWindow + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + NSWindowController + NSResponder + + showWindow: + id + + + showWindow: + + showWindow: + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSWindowController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../../chrome.xcodeproj + 3 + + diff --git a/chrome/browser/ui/cocoa/global_error_bubble_controller.h b/chrome/browser/ui/cocoa/global_error_bubble_controller.h new file mode 100644 index 0000000..8061104 --- /dev/null +++ b/chrome/browser/ui/cocoa/global_error_bubble_controller.h @@ -0,0 +1,33 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_COCOA_GLOBAL_ERROR_BUBBLE_CONTROLLER_H_ +#define CHROME_BROWSER_UI_COCOA_GLOBAL_ERROR_BUBBLE_CONTROLLER_H_ +#pragma once + +#import + +#import "chrome/browser/ui/cocoa/base_bubble_controller.h" + +class GlobalError; + +// This is a bubble view shown from the wrench menu to display information +// about a global error. +@interface GlobalErrorBubbleController : BaseBubbleController { + @private + GlobalError* error_; + + IBOutlet NSImageView* iconView_; + IBOutlet NSTextField* title_; + IBOutlet NSTextField* message_; + IBOutlet NSButton* acceptButton_; + IBOutlet NSButton* cancelButton_; +} + +- (IBAction)onAccept:(id)sender; +- (IBAction)onCancel:(id)sender; + +@end + +#endif // CHROME_BROWSER_UI_COCOA_GLOBAL_ERROR_BUBBLE_CONTROLLER_H_ diff --git a/chrome/browser/ui/cocoa/global_error_bubble_controller.mm b/chrome/browser/ui/cocoa/global_error_bubble_controller.mm new file mode 100644 index 0000000..a1d5f77 --- /dev/null +++ b/chrome/browser/ui/cocoa/global_error_bubble_controller.mm @@ -0,0 +1,110 @@ +// 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 "chrome/browser/ui/cocoa/global_error_bubble_controller.h" + +#include "base/logging.h" +#include "base/sys_string_conversions.h" +#include "base/utf_string_conversions.h" +#include "chrome/browser/search_engines/util.h" +#import "chrome/browser/ui/browser.h" +#import "chrome/browser/ui/browser_window.h" +#import "chrome/browser/ui/cocoa/browser_window_controller.h" +#import "chrome/browser/ui/cocoa/l10n_util.h" +#import "chrome/browser/ui/cocoa/info_bubble_view.h" +#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" +#import "chrome/browser/ui/global_error.h" +#include "grit/generated_resources.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/image/image.h" + +namespace { + +// The vertical offset of the wrench bubble from the wrench menu button. +const CGFloat kWrenchBubblePointOffsetY = 6; + +} // namespace + +@implementation GlobalErrorBubbleController + ++ (void)showForBrowser:(Browser*)browser + error:(GlobalError*)error { + NSWindow* parentWindow = browser->window()->GetNativeHandle(); + BrowserWindowController* bwc = [BrowserWindowController + browserWindowControllerForWindow:parentWindow]; + NSView* wrenchButton = [[bwc toolbarController] wrenchButton]; + NSPoint offset = NSMakePoint(NSMidX([wrenchButton bounds]), + kWrenchBubblePointOffsetY); + + // The bubble will be automatically deleted when the window is closed. + GlobalErrorBubbleController* bubble = [[GlobalErrorBubbleController alloc] + initWithWindowNibPath:@"GlobalErrorBubble" + relativeToView:wrenchButton + offset:offset]; + bubble->error_ = error; + [bubble showWindow:nil]; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + + DCHECK(error_); + + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + [iconView_ setImage:rb.GetNativeImageNamed( + error_->GetBubbleViewIconResourceID()).ToNSImage()]; + + [title_ setStringValue:SysUTF16ToNSString(error_->GetBubbleViewTitle())]; + [message_ setStringValue:SysUTF16ToNSString(error_->GetBubbleViewMessage())]; + [acceptButton_ setTitle: + SysUTF16ToNSString(error_->GetBubbleViewAcceptButtonLabel())]; + string16 cancelLabel = error_->GetBubbleViewCancelButtonLabel(); + if (cancelLabel.empty()) + [cancelButton_ setHidden:YES]; + else + [cancelButton_ setTitle:SysUTF16ToNSString(cancelLabel)]; + + // Adapt window size to bottom buttons. Do this before all other layouting. + NSArray* views = [NSArray arrayWithObjects: + title_, message_, [acceptButton_ superview], nil]; + NSSize ds = NSMakeSize(0, cocoa_l10n_util::VerticallyReflowGroup(views)); + ds = [[self bubble] convertSize:ds toView:nil]; + + NSRect frame = [[self window] frame]; + frame.origin.y -= ds.height; + frame.size.height += ds.height; + [[self window] setFrame:frame display:YES]; +} + +- (void)showWindow:(id)sender { + BrowserWindowController* bwc = [BrowserWindowController + browserWindowControllerForWindow:[self parentWindow]]; + [bwc lockBarVisibilityForOwner:self withAnimation:NO delay:NO]; + [super showWindow:sender]; +} + +- (void)close { + error_->BubbleViewDidClose(); + BrowserWindowController* bwc = [BrowserWindowController + browserWindowControllerForWindow:[self parentWindow]]; + [bwc releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; + [super close]; +} + +- (IBAction)onAccept:(id)sender { + error_->BubbleViewAcceptButtonPressed(); + [self close]; +} + +- (IBAction)onCancel:(id)sender { + error_->BubbleViewCancelButtonPressed(); + [self close]; +} + +@end + +void GlobalError::ShowBubbleView(Browser* browser, GlobalError* error) { + [GlobalErrorBubbleController showForBrowser:browser error:error]; +} diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.h b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.h index a9c6a5e..a51e3b7 100644 --- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.h +++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.h @@ -159,6 +159,9 @@ class WrenchMenuModel; // Return the BrowserActionsController for this toolbar. - (BrowserActionsController*)browserActionsController; +// Returns the wrench button. +- (NSView*)wrenchButton; + @end // A set of private methods used by subclasses. Do not call these directly diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm index 1fa7e3d..7c72d56 100644 --- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm +++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm @@ -749,6 +749,10 @@ class NotificationBridge : public NotificationObserver { return browserActionsController_.get(); } +- (NSView*)wrenchButton { + return wrenchButton_; +} + // (URLDropTargetController protocol) - (void)dropURLs:(NSArray*)urls inView:(NSView*)view at:(NSPoint)point { // TODO(viettrungluu): This code is more or less copied from the code in diff --git a/chrome/browser/ui/global_error.cc b/chrome/browser/ui/global_error.cc index be06046..3e01571 100644 --- a/chrome/browser/ui/global_error.cc +++ b/chrome/browser/ui/global_error.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/global_error.h" +#include "base/logging.h" #include "grit/theme_resources.h" #include "grit/theme_resources_standard.h" @@ -22,9 +23,16 @@ int GlobalError::MenuItemIconResourceID() { } void GlobalError::ShowBubbleView(Browser* browser) { - // TODO(sail) Need to implement this. + ShowBubbleView(browser, this); } int GlobalError::GetBubbleViewIconResourceID() { return IDR_INPUT_ALERT; } + +#if !defined(OS_MACOSX) +// static +void GlobalError::ShowBubbleView(Browser* browser, GlobalError* error) { + NOTREACHED(); +} +#endif diff --git a/chrome/browser/ui/global_error.h b/chrome/browser/ui/global_error.h index 03c7897..38a9c91 100644 --- a/chrome/browser/ui/global_error.h +++ b/chrome/browser/ui/global_error.h @@ -58,6 +58,8 @@ class GlobalError { private: DISALLOW_COPY_AND_ASSIGN(GlobalError); + + static void ShowBubbleView(Browser* browser, GlobalError* error); }; #endif // CHROME_BROWSER_UI_GLOBAL_ERROR_H_ diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 9bba7e9..a6e97e5 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2516,6 +2516,8 @@ 'browser/ui/cocoa/framed_browser_window.mm', 'browser/ui/cocoa/fullscreen_window.h', 'browser/ui/cocoa/fullscreen_window.mm', + 'browser/ui/cocoa/global_error_bubble_controller.h', + 'browser/ui/cocoa/global_error_bubble_controller.mm', 'browser/ui/cocoa/gradient_button_cell.h', 'browser/ui/cocoa/gradient_button_cell.mm', 'browser/ui/cocoa/history_menu_bridge.h', @@ -4307,6 +4309,7 @@ 'app/nibs/ExtensionInstalledBubble.xib', 'app/nibs/FirstRunBubble.xib', 'app/nibs/FirstRunDialog.xib', + 'app/nibs/GlobalErrorBubble.xib', 'app/nibs/HttpAuthLoginSheet.xib', 'app/nibs/HungRendererDialog.xib', 'app/nibs/ImportProgressDialog.xib', diff --git a/chrome/chrome_dll.gypi b/chrome/chrome_dll.gypi index cd33233..24b968c 100644 --- a/chrome/chrome_dll.gypi +++ b/chrome/chrome_dll.gypi @@ -263,6 +263,7 @@ 'app/nibs/FindBar.xib', 'app/nibs/FirstRunBubble.xib', 'app/nibs/FirstRunDialog.xib', + 'app/nibs/GlobalErrorBubble.xib', 'app/nibs/HungRendererDialog.xib', 'app/nibs/HttpAuthLoginSheet.xib', 'app/nibs/ImportProgressDialog.xib', -- cgit v1.1