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

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

Issue 11009017: Mac Web Intents Part 11: Progress view (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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 #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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698