| 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_picker_cocoa2.h" | 11 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_cocoa2.h" |
| 12 #import "chrome/browser/ui/cocoa/intents/web_intent_view_controller_message.h" | 12 #import "chrome/browser/ui/cocoa/intents/web_intent_view_controller_message.h" |
| 13 #import "chrome/browser/ui/cocoa/intents/web_intent_view_controller_progress.h" |
| 13 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" | 14 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" |
| 14 #include "chrome/browser/ui/constrained_window.h" | 15 #include "chrome/browser/ui/constrained_window.h" |
| 15 #include "chrome/browser/ui/intents/web_intent_picker_delegate.h" | 16 #include "chrome/browser/ui/intents/web_intent_picker_delegate.h" |
| 16 #include "chrome/browser/ui/intents/web_intent_inline_disposition_delegate.h" | 17 #include "chrome/browser/ui/intents/web_intent_inline_disposition_delegate.h" |
| 17 | 18 |
| 18 #include "grit/generated_resources.h" | 19 #include "grit/generated_resources.h" |
| 19 #include "ui/base/cocoa/window_size_constants.h" | 20 #include "ui/base/cocoa/window_size_constants.h" |
| 20 #include "ui/base/l10n/l10n_util_mac.h" | 21 #include "ui/base/l10n/l10n_util_mac.h" |
| 21 | 22 |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| 24 WebIntentPickerState GetPickerState(const WebIntentPickerModel& model) { | 25 WebIntentPickerState GetPickerState(const WebIntentPickerModel& model) { |
| 26 if (!model.pending_install_extension_id().empty()) |
| 27 return PICKER_STATE_INSTALLING_EXTENSION; |
| 28 if (model.IsWaitingForSuggestions()) |
| 29 return PICKER_STATE_WAITING; |
| 25 return PICKER_STATE_NO_SERVICE; | 30 return PICKER_STATE_NO_SERVICE; |
| 26 } | 31 } |
| 27 | 32 |
| 28 } | 33 } |
| 29 | 34 |
| 30 @interface WebIntentPickerViewController () | 35 @interface WebIntentPickerViewController () |
| 31 | 36 |
| 32 - (void)performLayout; | 37 - (void)performLayout; |
| 33 // Gets the inner frame with a minimum window width and height. | 38 // Gets the inner frame with a minimum window width and height. |
| 34 - (NSRect)minInnerFrame; | 39 - (NSRect)minInnerFrame; |
| 35 // Gets the view controller currently being displayed. | 40 // Gets the view controller currently being displayed. |
| 36 - (WebIntentViewController*)currentViewController; | 41 - (WebIntentViewController*)currentViewController; |
| 37 | 42 |
| 38 // Update the varous views. | 43 // Update the varous views. |
| 44 - (void)updateWaiting; |
| 39 - (void)updateNoService; | 45 - (void)updateNoService; |
| 46 - (void)updateInstallingExtension; |
| 40 | 47 |
| 41 - (void)onCloseButton:(id)sender; | 48 - (void)onCloseButton:(id)sender; |
| 42 - (void)cancelOperation:(id)sender; | 49 - (void)cancelOperation:(id)sender; |
| 43 | 50 |
| 44 @end | 51 @end |
| 45 | 52 |
| 46 @implementation WebIntentPickerViewController | 53 @implementation WebIntentPickerViewController |
| 47 | 54 |
| 48 - (id)initWithPicker:(WebIntentPickerCocoa2*)picker { | 55 - (id)initWithPicker:(WebIntentPickerCocoa2*)picker { |
| 49 if ((self = [super init])) { | 56 if ((self = [super init])) { |
| 50 picker_ = picker; | 57 picker_ = picker; |
| 51 | 58 |
| 52 scoped_nsobject<NSView> view( | 59 scoped_nsobject<NSView> view( |
| 53 [[FlippedView alloc] initWithFrame:ui::kWindowSizeDeterminedLater]); | 60 [[FlippedView alloc] initWithFrame:ui::kWindowSizeDeterminedLater]); |
| 54 [self setView:view]; | 61 [self setView:view]; |
| 55 | 62 |
| 56 closeButton_.reset([[HoverCloseButton alloc] initWithFrame:NSZeroRect]); | 63 closeButton_.reset([[HoverCloseButton alloc] initWithFrame:NSZeroRect]); |
| 57 [closeButton_ setTarget:self]; | 64 [closeButton_ setTarget:self]; |
| 58 [closeButton_ setAction:@selector(onCloseButton:)]; | 65 [closeButton_ setAction:@selector(onCloseButton:)]; |
| 59 [[closeButton_ cell] setKeyEquivalent:kKeyEquivalentEscape]; | 66 [[closeButton_ cell] setKeyEquivalent:kKeyEquivalentEscape]; |
| 60 [[self view] addSubview:closeButton_]; | 67 [[self view] addSubview:closeButton_]; |
| 61 | 68 |
| 62 messageViewController_.reset( | 69 messageViewController_.reset( |
| 63 [[WebIntentViewControllerMessage alloc] init]); | 70 [[WebIntentViewControllerMessage alloc] init]); |
| 71 progressViewController_.reset( |
| 72 [[WebIntentViewControllerProgress alloc] init]); |
| 64 } | 73 } |
| 65 return self; | 74 return self; |
| 66 } | 75 } |
| 67 | 76 |
| 68 - (WebIntentPickerState)state { | 77 - (WebIntentPickerState)state { |
| 69 return state_; | 78 return state_; |
| 70 } | 79 } |
| 71 | 80 |
| 72 - (WebIntentViewControllerMessage*)messageViewController { | 81 - (WebIntentViewControllerMessage*)messageViewController { |
| 73 return messageViewController_; | 82 return messageViewController_; |
| 74 } | 83 } |
| 75 | 84 |
| 85 - (WebIntentViewControllerProgress*)progressViewController { |
| 86 return progressViewController_; |
| 87 } |
| 88 |
| 76 - (void)update { | 89 - (void)update { |
| 77 WebIntentPickerState newState = GetPickerState(*picker_->model()); | 90 WebIntentPickerState newState = GetPickerState(*picker_->model()); |
| 78 if (state_ != newState || ![[[self currentViewController] view] superview]) { | 91 if (state_ != newState || ![[[self currentViewController] view] superview]) { |
| 79 [[[self currentViewController] view] removeFromSuperview]; | 92 [[[self currentViewController] view] removeFromSuperview]; |
| 80 state_ = newState; | 93 state_ = newState; |
| 81 [[self view] addSubview:[[self currentViewController] view]]; | 94 [[self view] addSubview:[[self currentViewController] view]]; |
| 82 | 95 |
| 83 // Ensure that the close button is top most. | 96 // Ensure that the close button is top most. |
| 84 [closeButton_ removeFromSuperview]; | 97 [closeButton_ removeFromSuperview]; |
| 85 [[self view] addSubview:closeButton_]; | 98 [[self view] addSubview:closeButton_]; |
| 86 } | 99 } |
| 87 | 100 |
| 88 switch (state_) { | 101 switch (state_) { |
| 102 case PICKER_STATE_WAITING: |
| 103 [self updateWaiting]; |
| 104 break; |
| 89 case PICKER_STATE_NO_SERVICE: | 105 case PICKER_STATE_NO_SERVICE: |
| 90 [self updateNoService]; | 106 [self updateNoService]; |
| 91 break; | 107 break; |
| 108 case PICKER_STATE_INSTALLING_EXTENSION: |
| 109 [self updateInstallingExtension]; |
| 110 break; |
| 92 } | 111 } |
| 93 | 112 |
| 94 [self performLayout]; | 113 [self performLayout]; |
| 95 } | 114 } |
| 96 | 115 |
| 97 - (void)performLayout { | 116 - (void)performLayout { |
| 98 NSRect innerFrame = [self minInnerFrame]; | 117 NSRect innerFrame = [self minInnerFrame]; |
| 99 WebIntentViewController* viewController = [self currentViewController]; | 118 WebIntentViewController* viewController = [self currentViewController]; |
| 100 NSSize minSize = | 119 NSSize minSize = |
| 101 [viewController minimumSizeForInnerWidth:NSWidth(innerFrame)]; | 120 [viewController minimumSizeForInnerWidth:NSWidth(innerFrame)]; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 124 - (NSRect)minInnerFrame { | 143 - (NSRect)minInnerFrame { |
| 125 NSRect bounds = NSMakeRect(0, 0, WebIntentPicker::kWindowMinWidth, | 144 NSRect bounds = NSMakeRect(0, 0, WebIntentPicker::kWindowMinWidth, |
| 126 WebIntentPicker::kWindowMinHeight); | 145 WebIntentPicker::kWindowMinHeight); |
| 127 return NSInsetRect(bounds, | 146 return NSInsetRect(bounds, |
| 128 ConstrainedWindow::kHorizontalPadding, | 147 ConstrainedWindow::kHorizontalPadding, |
| 129 ConstrainedWindow::kVerticalPadding); | 148 ConstrainedWindow::kVerticalPadding); |
| 130 } | 149 } |
| 131 | 150 |
| 132 - (WebIntentViewController*)currentViewController { | 151 - (WebIntentViewController*)currentViewController { |
| 133 switch (state_) { | 152 switch (state_) { |
| 153 case PICKER_STATE_WAITING: |
| 154 return progressViewController_; |
| 134 case PICKER_STATE_NO_SERVICE: | 155 case PICKER_STATE_NO_SERVICE: |
| 135 return messageViewController_; | 156 return messageViewController_; |
| 157 case PICKER_STATE_INSTALLING_EXTENSION: |
| 158 return progressViewController_; |
| 136 } | 159 } |
| 137 NOTREACHED(); | 160 NOTREACHED(); |
| 138 return nil; | 161 return nil; |
| 139 } | 162 } |
| 140 | 163 |
| 164 - (void)updateWaiting { |
| 165 NSString* message = l10n_util::GetNSStringWithFixup( |
| 166 IDS_INTENT_PICKER_WAIT_FOR_CWS); |
| 167 [progressViewController_ setMessage:message]; |
| 168 [progressViewController_ setPercentDone:-1]; |
| 169 } |
| 170 |
| 141 - (void)updateNoService { | 171 - (void)updateNoService { |
| 142 [messageViewController_ setTitle:l10n_util::GetNSStringWithFixup( | 172 [messageViewController_ setTitle:l10n_util::GetNSStringWithFixup( |
| 143 IDS_INTENT_PICKER_NO_SERVICES_TITLE)]; | 173 IDS_INTENT_PICKER_NO_SERVICES_TITLE)]; |
| 144 [messageViewController_ setMessage:l10n_util::GetNSStringWithFixup( | 174 [messageViewController_ setMessage:l10n_util::GetNSStringWithFixup( |
| 145 IDS_INTENT_PICKER_NO_SERVICES)]; | 175 IDS_INTENT_PICKER_NO_SERVICES)]; |
| 146 } | 176 } |
| 147 | 177 |
| 178 - (void)updateInstallingExtension { |
| 179 WebIntentPickerModel* model = picker_->model(); |
| 180 const WebIntentPickerModel::SuggestedExtension* extension = |
| 181 model->GetSuggestedExtensionWithId( |
| 182 model->pending_install_extension_id()); |
| 183 if (!extension) |
| 184 return; |
| 185 [progressViewController_ setTitle: |
| 186 base::SysUTF16ToNSString(extension->title)]; |
| 187 [progressViewController_ setMessage: |
| 188 base::SysUTF16ToNSString(model->pending_install_status_string())]; |
| 189 [progressViewController_ setPercentDone: |
| 190 model->pending_install_download_percent()]; |
| 191 } |
| 192 |
| 148 - (void)onCloseButton:(id)sender { | 193 - (void)onCloseButton:(id)sender { |
| 149 picker_->delegate()->OnUserCancelledPickerDialog(); | 194 picker_->delegate()->OnUserCancelledPickerDialog(); |
| 150 } | 195 } |
| 151 | 196 |
| 152 // Handle default OSX dialog cancel mechanisms. (Cmd-.) | 197 // Handle default OSX dialog cancel mechanisms. (Cmd-.) |
| 153 - (void)cancelOperation:(id)sender { | 198 - (void)cancelOperation:(id)sender { |
| 154 [self onCloseButton:sender]; | 199 [self onCloseButton:sender]; |
| 155 } | 200 } |
| 156 | 201 |
| 157 @end | 202 @end |
| OLD | NEW |