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