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 |