| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.h" | 5 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.h" |
| 6 | 6 |
| 7 #include "base/sys_string_conversions.h" | 7 #include "base/sys_string_conversions.h" |
| 8 #import "chrome/browser/ui/cocoa/event_utils.h" | 8 #import "chrome/browser/ui/cocoa/event_utils.h" |
| 9 #import "chrome/browser/ui/cocoa/flipped_view.h" | 9 #import "chrome/browser/ui/cocoa/flipped_view.h" |
| 10 #import "chrome/browser/ui/cocoa/hover_close_button.h" | 10 #import "chrome/browser/ui/cocoa/hover_close_button.h" |
| 11 #import "chrome/browser/ui/cocoa/intents/web_intent_choose_service_view_controll
er.h" | 11 #import "chrome/browser/ui/cocoa/intents/web_intent_choose_service_view_controll
er.h" |
| 12 #import "chrome/browser/ui/cocoa/intents/web_intent_extension_prompt_view_contro
ller.h" | 12 #import "chrome/browser/ui/cocoa/intents/web_intent_extension_prompt_view_contro
ller.h" |
| 13 #import "chrome/browser/ui/cocoa/intents/web_intent_inline_service_view_controll
er.h" | 13 #import "chrome/browser/ui/cocoa/intents/web_intent_inline_service_view_controll
er.h" |
| 14 #import "chrome/browser/ui/cocoa/intents/web_intent_message_view_controller.h" | 14 #import "chrome/browser/ui/cocoa/intents/web_intent_message_view_controller.h" |
| 15 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_cocoa2.h" | 15 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_cocoa2.h" |
| 16 #import "chrome/browser/ui/cocoa/intents/web_intent_progress_view_controller.h" | 16 #import "chrome/browser/ui/cocoa/intents/web_intent_progress_view_controller.h" |
| 17 #import "chrome/browser/ui/cocoa/intents/web_intent_service_row_view_controller.
h" | 17 #import "chrome/browser/ui/cocoa/intents/web_intent_service_row_view_controller.
h" |
| 18 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" | 18 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" |
| 19 #include "chrome/browser/ui/constrained_window.h" | 19 #include "chrome/browser/ui/constrained_window.h" |
| 20 #include "chrome/browser/ui/constrained_window_constants.h" | 20 #include "chrome/browser/ui/constrained_window_constants.h" |
| 21 #include "chrome/browser/ui/intents/web_intent_picker_delegate.h" | 21 #include "chrome/browser/ui/intents/web_intent_picker_delegate.h" |
| 22 #include "chrome/browser/ui/intents/web_intent_inline_disposition_delegate.h" | 22 #include "chrome/browser/ui/intents/web_intent_inline_disposition_delegate.h" |
| 23 #include "content/public/browser/web_contents.h" | 23 #include "content/public/browser/web_contents.h" |
| 24 #include "grit/generated_resources.h" | 24 #include "grit/generated_resources.h" |
| 25 #include "ui/base/cocoa/window_size_constants.h" | 25 #include "ui/base/cocoa/window_size_constants.h" |
| 26 #include "ui/base/l10n/l10n_util_mac.h" | 26 #include "ui/base/l10n/l10n_util_mac.h" |
| 27 | 27 |
| 28 @interface WebIntentPickerViewController () | 28 @interface WebIntentPickerViewController () |
| 29 | 29 |
| 30 - (void)performLayout; | 30 - (void)performLayoutWithOldViewController: |
| 31 (WebIntentViewController*)oldViewController; |
| 31 // Gets the view controller currently being displayed. | 32 // Gets the view controller currently being displayed. |
| 32 - (WebIntentViewController*)currentViewController; | 33 - (WebIntentViewController*)currentViewController; |
| 33 - (WebIntentPickerState)newPickerState; | 34 - (WebIntentPickerState)newPickerState; |
| 34 | 35 |
| 35 // Update the various views to match changes to the picker model. | 36 // Update the various views to match changes to the picker model. |
| 36 - (void)updateWaiting; | 37 - (void)updateWaiting; |
| 37 - (void)updateNoService; | 38 - (void)updateNoService; |
| 38 - (void)updateChooseService; | 39 - (void)updateChooseService; |
| 39 - (void)updateInlineService; | 40 - (void)updateInlineService; |
| 40 - (void)updateInstallingExtension; | 41 - (void)updateInstallingExtension; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 56 @end | 57 @end |
| 57 | 58 |
| 58 @implementation WebIntentPickerViewController | 59 @implementation WebIntentPickerViewController |
| 59 | 60 |
| 60 - (id)initWithPicker:(WebIntentPickerCocoa2*)picker { | 61 - (id)initWithPicker:(WebIntentPickerCocoa2*)picker { |
| 61 if ((self = [super init])) { | 62 if ((self = [super init])) { |
| 62 picker_ = picker; | 63 picker_ = picker; |
| 63 | 64 |
| 64 scoped_nsobject<NSView> view( | 65 scoped_nsobject<NSView> view( |
| 65 [[FlippedView alloc] initWithFrame:ui::kWindowSizeDeterminedLater]); | 66 [[FlippedView alloc] initWithFrame:ui::kWindowSizeDeterminedLater]); |
| 67 [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
| 66 [self setView:view]; | 68 [self setView:view]; |
| 67 | 69 |
| 68 closeButton_.reset([[HoverCloseButton alloc] initWithFrame:NSZeroRect]); | 70 closeButton_.reset([[HoverCloseButton alloc] initWithFrame:NSZeroRect]); |
| 69 [closeButton_ setTarget:self]; | 71 [closeButton_ setTarget:self]; |
| 70 [closeButton_ setAction:@selector(onCloseButton:)]; | 72 [closeButton_ setAction:@selector(onCloseButton:)]; |
| 71 [[closeButton_ cell] setKeyEquivalent:kKeyEquivalentEscape]; | 73 [[closeButton_ cell] setKeyEquivalent:kKeyEquivalentEscape]; |
| 72 [[self view] addSubview:closeButton_]; | 74 [[self view] addSubview:closeButton_]; |
| 73 | 75 |
| 74 chooseServiceViewController_.reset( | 76 chooseServiceViewController_.reset( |
| 75 [[WebIntentChooseServiceViewController alloc] init]); | 77 [[WebIntentChooseServiceViewController alloc] init]); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 return extensionPromptViewController_; | 129 return extensionPromptViewController_; |
| 128 } | 130 } |
| 129 | 131 |
| 130 - (void)update { | 132 - (void)update { |
| 131 // The model may be NULL between the time the dialog is closed and this object | 133 // The model may be NULL between the time the dialog is closed and this object |
| 132 // is deleted. | 134 // is deleted. |
| 133 if (!picker_->model()) | 135 if (!picker_->model()) |
| 134 return; | 136 return; |
| 135 | 137 |
| 136 WebIntentPickerState newState = [self newPickerState]; | 138 WebIntentPickerState newState = [self newPickerState]; |
| 137 NSView* currentView = [[self currentViewController] view]; | 139 WebIntentViewController* oldViewController = [self currentViewController]; |
| 138 if (state_ != newState || ![currentView superview]) { | 140 if (state_ != newState || ![[oldViewController view] superview]) { |
| 139 [currentView removeFromSuperview]; | |
| 140 // Clear the inline webview. | |
| 141 [inlineServiceViewController_ setServiceURL:GURL::EmptyGURL()]; | |
| 142 [extensionPromptViewController_ clear]; | |
| 143 state_ = newState; | 141 state_ = newState; |
| 144 currentView = [[self currentViewController] view]; | 142 [[self view] addSubview:[[self currentViewController] view]]; |
| 145 [[self view] addSubview:currentView]; | |
| 146 | 143 |
| 147 // Ensure that the close button is topmost. | 144 // Ensure that the close button is topmost. |
| 148 [closeButton_ removeFromSuperview]; | 145 [closeButton_ removeFromSuperview]; |
| 149 [[self view] addSubview:closeButton_]; | 146 [[self view] addSubview:closeButton_]; |
| 150 } | 147 } |
| 151 | 148 |
| 152 switch (state_) { | 149 switch (state_) { |
| 153 case PICKER_STATE_WAITING: | 150 case PICKER_STATE_WAITING: |
| 154 [self updateWaiting]; | 151 [self updateWaiting]; |
| 155 break; | 152 break; |
| 156 case PICKER_STATE_NO_SERVICE: | 153 case PICKER_STATE_NO_SERVICE: |
| 157 [self updateNoService]; | 154 [self updateNoService]; |
| 158 break; | 155 break; |
| 159 case PICKER_STATE_CHOOSE_SERVICE: | 156 case PICKER_STATE_CHOOSE_SERVICE: |
| 160 [self updateChooseService]; | 157 [self updateChooseService]; |
| 161 break; | 158 break; |
| 162 case PICKER_STATE_INLINE_SERVICE: | 159 case PICKER_STATE_INLINE_SERVICE: |
| 163 [self updateInlineService]; | 160 [self updateInlineService]; |
| 164 break; | 161 break; |
| 165 case PICKER_STATE_INSTALLING_EXTENSION: | 162 case PICKER_STATE_INSTALLING_EXTENSION: |
| 166 [self updateInstallingExtension]; | 163 [self updateInstallingExtension]; |
| 167 break; | 164 break; |
| 168 case PICKER_STATE_EXTENSION_PROMPT: | 165 case PICKER_STATE_EXTENSION_PROMPT: |
| 169 [self updateExtensionPrompt]; | 166 [self updateExtensionPrompt]; |
| 170 break; | 167 break; |
| 171 } | 168 } |
| 172 | 169 |
| 173 [self performLayout]; | 170 [self performLayoutWithOldViewController:oldViewController]; |
| 174 } | 171 } |
| 175 | 172 |
| 176 - (void)performLayout { | 173 - (void)performLayoutWithOldViewController: |
| 174 (WebIntentViewController*)oldViewController { |
| 177 WebIntentViewController* viewController = [self currentViewController]; | 175 WebIntentViewController* viewController = [self currentViewController]; |
| 178 [viewController sizeToFitAndLayout]; | 176 [viewController sizeToFitAndLayout]; |
| 179 [[viewController view] setFrameOrigin:NSZeroPoint]; | 177 [[viewController view] setFrameOrigin:NSZeroPoint]; |
| 180 | 178 |
| 181 NSRect bounds = [[viewController view] bounds]; | 179 NSRect bounds = [[viewController view] bounds]; |
| 180 NSWindow* window = [[self view] window]; |
| 181 NSRect windowFrame = [window frameRectForContentRect:bounds]; |
| 182 | 182 |
| 183 NSRect closeFrame; | 183 NSRect closeFrame; |
| 184 closeFrame.size.width = ConstrainedWindow::GetCloseButtonSize(); | 184 closeFrame.size.width = ConstrainedWindow::GetCloseButtonSize(); |
| 185 closeFrame.size.height = ConstrainedWindow::GetCloseButtonSize(); | 185 closeFrame.size.height = ConstrainedWindow::GetCloseButtonSize(); |
| 186 closeFrame.origin.x = NSMaxX(bounds) - NSWidth(closeFrame) - | 186 closeFrame.origin.x = NSMaxX(bounds) - NSWidth(closeFrame) - |
| 187 ConstrainedWindowConstants::kCloseButtonPadding; | 187 ConstrainedWindowConstants::kCloseButtonPadding; |
| 188 closeFrame.origin.y = ConstrainedWindowConstants::kCloseButtonPadding; | 188 closeFrame.origin.y = ConstrainedWindowConstants::kCloseButtonPadding; |
| 189 [closeButton_ setFrame:closeFrame]; | |
| 190 | 189 |
| 191 [[self view] setFrame:bounds]; | 190 if (oldViewController) { |
| 191 scoped_nsobject<NSMutableArray> array([[NSMutableArray alloc] init]); |
| 192 if (oldViewController && ![oldViewController isEqual:viewController]) { |
| 193 [array addObject:@{ |
| 194 NSViewAnimationTargetKey: [viewController view], |
| 195 NSViewAnimationEffectKey: NSViewAnimationFadeInEffect |
| 196 }]; |
| 197 [array addObject:@{ |
| 198 NSViewAnimationTargetKey: [oldViewController view], |
| 199 NSViewAnimationEffectKey: NSViewAnimationFadeOutEffect |
| 200 }]; |
| 201 } |
| 202 [array addObject:@{ |
| 203 NSViewAnimationTargetKey: window, |
| 204 NSViewAnimationEndFrameKey: [NSValue valueWithRect:windowFrame] |
| 205 }]; |
| 206 [array addObject:@{ |
| 207 NSViewAnimationTargetKey: closeButton_, |
| 208 NSViewAnimationEndFrameKey: [NSValue valueWithRect:closeFrame] |
| 209 }]; |
| 192 | 210 |
| 193 NSWindow* window = [[self view] window]; | 211 scoped_nsobject<NSViewAnimation> animation( |
| 194 [window setFrame:[window frameRectForContentRect:bounds] display:YES]; | 212 [[NSViewAnimation alloc] initWithViewAnimations:array]); |
| 213 [animation setAnimationBlockingMode:NSAnimationBlocking]; |
| 214 [animation setDuration:0.2]; |
| 215 [animation startAnimation]; |
| 216 } else { |
| 217 [window setFrame:windowFrame display:YES]; |
| 218 [[self view] setFrame:bounds]; |
| 219 [closeButton_ setFrame:closeFrame]; |
| 220 } |
| 221 |
| 222 if (oldViewController && ![oldViewController isEqual:viewController]) { |
| 223 [[oldViewController view] removeFromSuperview]; |
| 224 [oldViewController viewRemovedFromSuperview]; |
| 225 } |
| 195 } | 226 } |
| 196 | 227 |
| 197 - (WebIntentViewController*)currentViewController { | 228 - (WebIntentViewController*)currentViewController { |
| 198 switch (state_) { | 229 switch (state_) { |
| 199 case PICKER_STATE_WAITING: | 230 case PICKER_STATE_WAITING: |
| 200 return progressViewController_; | 231 return progressViewController_; |
| 201 case PICKER_STATE_NO_SERVICE: | 232 case PICKER_STATE_NO_SERVICE: |
| 202 return messageViewController_; | 233 return messageViewController_; |
| 203 case PICKER_STATE_CHOOSE_SERVICE: | 234 case PICKER_STATE_CHOOSE_SERVICE: |
| 204 return chooseServiceViewController_; | 235 return chooseServiceViewController_; |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 WindowOpenDisposition disposition = | 417 WindowOpenDisposition disposition = |
| 387 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); | 418 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); |
| 388 picker_->delegate()->OnSuggestionsLinkClicked(disposition); | 419 picker_->delegate()->OnSuggestionsLinkClicked(disposition); |
| 389 } | 420 } |
| 390 | 421 |
| 391 - (void)onChooseAnotherService:(id)sender { | 422 - (void)onChooseAnotherService:(id)sender { |
| 392 picker_->delegate()->OnChooseAnotherService(); | 423 picker_->delegate()->OnChooseAnotherService(); |
| 393 } | 424 } |
| 394 | 425 |
| 395 @end | 426 @end |
| OLD | NEW |