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

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: a 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_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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698