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

Side by Side Diff: chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.mm

Issue 11230023: Web Intents Mac: Add view animation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review comment Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698