Index: chrome/browser/ui/cocoa/speech_recognition_window_controller.mm |
diff --git a/chrome/browser/ui/cocoa/speech_recognition_window_controller.mm b/chrome/browser/ui/cocoa/speech_recognition_window_controller.mm |
deleted file mode 100644 |
index 887f75a4e1942da1d65005301abadb3b57c3132d..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/speech_recognition_window_controller.mm |
+++ /dev/null |
@@ -1,232 +0,0 @@ |
-// Copyright (c) 2012 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 "speech_recognition_window_controller.h" |
- |
-#include "base/logging.h" |
-#include "base/strings/sys_string_conversions.h" |
-#include "chrome/browser/ui/cocoa/info_bubble_view.h" |
-#include "grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#import "skia/ext/skia_utils_mac.h" |
-#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
-#include "ui/base/l10n/l10n_util_mac.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/image/image.h" |
- |
-const int kBubbleControlVerticalSpacing = 10; // Space between controls. |
-const int kBubbleHorizontalMargin = 5; // Space on either sides of controls. |
-const int kInstructionLabelMaxWidth = 150; |
- |
-@interface SpeechRecognitionWindowController (Private) |
-- (NSSize)calculateContentSize; |
-- (void)layout:(NSSize)size; |
-@end |
- |
-@implementation SpeechRecognitionWindowController |
- |
-- (id)initWithParentWindow:(NSWindow*)parentWindow |
- delegate:(SpeechRecognitionBubbleDelegate*)delegate |
- anchoredAt:(NSPoint)anchoredAt { |
- if ((self = [super initWithWindowNibPath:@"SpeechRecognitionBubble" |
- parentWindow:parentWindow |
- anchoredAt:anchoredAt])) { |
- DCHECK(delegate); |
- delegate_ = delegate; |
- displayMode_ = SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP; |
- } |
- return self; |
-} |
- |
-- (void)awakeFromNib { |
- [super awakeFromNib]; |
- InfoBubbleView* bubble = [self bubble]; |
- [bubble setArrowLocation:info_bubble::kTopLeft]; |
- NSSize arrowSize = NSMakeSize(0, info_bubble::kBubbleArrowHeight); |
- arrowSize = [bubble convertSize:arrowSize toView:nil]; |
- NSPoint anchorPoint = self.anchorPoint; |
- anchorPoint.y += arrowSize.height / 2.0; |
- self.anchorPoint = anchorPoint; |
-} |
- |
-- (IBAction)cancel:(id)sender { |
- delegate_->InfoBubbleButtonClicked(SpeechRecognitionBubble::BUTTON_CANCEL); |
-} |
- |
-- (IBAction)tryAgain:(id)sender { |
- delegate_->InfoBubbleButtonClicked(SpeechRecognitionBubble::BUTTON_TRY_AGAIN); |
-} |
- |
-- (IBAction)micSettings:(id)sender { |
- [[NSWorkspace sharedWorkspace] openFile: |
- @"/System/Library/PreferencePanes/Sound.prefPane"]; |
-} |
- |
-// Calculate the window dimensions to reflect the sum height and max width of |
-// all controls, with appropriate spacing between and around them. The returned |
-// size is in view coordinates. |
-- (NSSize)calculateContentSize { |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:cancelButton_]; |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:tryAgainButton_]; |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:micSettingsButton_]; |
- NSSize cancelSize = [cancelButton_ bounds].size; |
- NSSize tryAgainSize = [tryAgainButton_ bounds].size; |
- CGFloat newHeight = cancelSize.height + kBubbleControlVerticalSpacing; |
- CGFloat newWidth = cancelSize.width; |
- if (![tryAgainButton_ isHidden]) |
- newWidth += tryAgainSize.width; |
- |
- // The size of the bubble in warm up mode is fixed to be the same as in |
- // recording mode, so from warm up it can transition to recording without any |
- // UI jank. |
- bool isWarmUp = (displayMode_ == |
- SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP); |
- |
- if (![iconImage_ isHidden]) { |
- NSSize size = [[iconImage_ image] size]; |
- if (isWarmUp) { |
- NSImage* volumeIcon = |
- ResourceBundle::GetSharedInstance().GetNativeImageNamed( |
- IDR_SPEECH_INPUT_MIC_EMPTY).ToNSImage(); |
- size = [volumeIcon size]; |
- } |
- newHeight += size.height; |
- newWidth = std::max(newWidth, size.width + 2 * kBubbleHorizontalMargin); |
- } |
- |
- if (![instructionLabel_ isHidden] || isWarmUp) { |
- [instructionLabel_ sizeToFit]; |
- NSSize textSize = [[instructionLabel_ cell] cellSize]; |
- NSRect boundsRect = NSMakeRect(0, 0, kInstructionLabelMaxWidth, |
- CGFLOAT_MAX); |
- NSSize multiLineSize = |
- [[instructionLabel_ cell] cellSizeForBounds:boundsRect]; |
- if (textSize.width > multiLineSize.width) |
- textSize = multiLineSize; |
- newHeight += textSize.height + kBubbleControlVerticalSpacing; |
- newWidth = std::max(newWidth, textSize.width); |
- } |
- |
- if (![micSettingsButton_ isHidden]) { |
- NSSize size = [micSettingsButton_ bounds].size; |
- newHeight += size.height; |
- newWidth = std::max(newWidth, size.width); |
- } |
- |
- return NSMakeSize(newWidth + 2 * kBubbleHorizontalMargin, |
- newHeight + 3 * kBubbleControlVerticalSpacing); |
-} |
- |
-// Position the controls within the given content area bounds. |
-- (void)layout:(NSSize)size { |
- int y = kBubbleControlVerticalSpacing; |
- |
- NSRect cancelRect = [cancelButton_ bounds]; |
- |
- if ([tryAgainButton_ isHidden]) { |
- cancelRect.origin.x = (size.width - NSWidth(cancelRect)) / 2; |
- } else { |
- NSRect tryAgainRect = [tryAgainButton_ bounds]; |
- cancelRect.origin.x = (size.width - NSWidth(cancelRect) - |
- NSWidth(tryAgainRect)) / 2; |
- tryAgainRect.origin.x = cancelRect.origin.x + NSWidth(cancelRect); |
- tryAgainRect.origin.y = y; |
- [tryAgainButton_ setFrame:tryAgainRect]; |
- } |
- cancelRect.origin.y = y; |
- |
- if (![cancelButton_ isHidden]) { |
- [cancelButton_ setFrame:cancelRect]; |
- y += NSHeight(cancelRect) + kBubbleControlVerticalSpacing; |
- } |
- |
- NSRect rect; |
- if (![micSettingsButton_ isHidden]) { |
- rect = [micSettingsButton_ bounds]; |
- rect.origin.x = (size.width - NSWidth(rect)) / 2; |
- rect.origin.y = y; |
- [micSettingsButton_ setFrame:rect]; |
- y += rect.size.height + kBubbleControlVerticalSpacing; |
- } |
- |
- if (![instructionLabel_ isHidden]) { |
- int spaceForIcon = 0; |
- if (![iconImage_ isHidden]) { |
- spaceForIcon = [[iconImage_ image] size].height + |
- kBubbleControlVerticalSpacing; |
- } |
- |
- rect = NSMakeRect(0, y, size.width, size.height - y - spaceForIcon - |
- kBubbleControlVerticalSpacing * 2); |
- [instructionLabel_ setFrame:rect]; |
- y = size.height - spaceForIcon - kBubbleControlVerticalSpacing; |
- } |
- |
- if (![iconImage_ isHidden]) { |
- rect.size = [[iconImage_ image] size]; |
- // In warm-up mode only the icon gets displayed so center it vertically. |
- if (displayMode_ == SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP) |
- y = (size.height - rect.size.height) / 2; |
- rect.origin.x = (size.width - NSWidth(rect)) / 2; |
- rect.origin.y = y; |
- [iconImage_ setFrame:rect]; |
- } |
-} |
- |
-- (void)updateLayout:(SpeechRecognitionBubbleBase::DisplayMode)mode |
- messageText:(const base::string16&)messageText |
- iconImage:(NSImage*)iconImage { |
- // The very first time this method is called, the child views would still be |
- // uninitialized and null. So we invoke [self window] first and that sets up |
- // the child views properly so we can do the layout calculations below. |
- NSWindow* window = [self window]; |
- displayMode_ = mode; |
- BOOL is_message = (mode == SpeechRecognitionBubbleBase::DISPLAY_MODE_MESSAGE); |
- BOOL is_recording = |
- (mode == SpeechRecognitionBubbleBase::DISPLAY_MODE_RECORDING); |
- BOOL is_warm_up = (mode == SpeechRecognitionBubbleBase::DISPLAY_MODE_WARM_UP); |
- [iconImage_ setHidden:is_message]; |
- [tryAgainButton_ setHidden:!is_message]; |
- [micSettingsButton_ setHidden:!is_message]; |
- [instructionLabel_ setHidden:!is_message && !is_recording]; |
- [cancelButton_ setHidden:is_warm_up]; |
- |
- // Get the right set of controls to be visible. |
- if (is_message) { |
- [instructionLabel_ setStringValue:base::SysUTF16ToNSString(messageText)]; |
- } else { |
- [iconImage_ setImage:iconImage]; |
- [instructionLabel_ setStringValue:l10n_util::GetNSString( |
- IDS_SPEECH_INPUT_BUBBLE_HEADING)]; |
- } |
- |
- NSSize newSize = [self calculateContentSize]; |
- [[self bubble] setFrameSize:newSize]; |
- |
- NSSize windowDelta = [[window contentView] convertSize:newSize toView:nil]; |
- NSRect newFrame = [window frame]; |
- newFrame.origin.y -= windowDelta.height - newFrame.size.height; |
- newFrame.size = windowDelta; |
- [window setFrame:newFrame display:YES]; |
- |
- [self layout:newSize]; // Layout all the child controls. |
-} |
- |
-- (void)windowWillClose:(NSNotification*)notification { |
- delegate_->InfoBubbleFocusChanged(); |
-} |
- |
-- (void)show { |
- [self showWindow:nil]; |
-} |
- |
-- (void)hide { |
- [[self window] orderOut:nil]; |
-} |
- |
-- (void)setImage:(NSImage*)image { |
- [iconImage_ setImage:image]; |
-} |
- |
-@end // implementation SpeechRecognitionWindowController |