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

Side by Side Diff: chrome/browser/ui/cocoa/chooser_content_view_cocoa.mm

Issue 2208983002: Support multiple lines for status text on Chooser UI on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added TODO Created 4 years, 4 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
« no previous file with comments | « chrome/browser/ui/cocoa/chooser_content_view_cocoa.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/chooser_content_view_cocoa.h" 5 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
(...skipping 28 matching lines...) Expand all
39 // Separator alpha value. 39 // Separator alpha value.
40 const CGFloat kSeparatorAlphaValue = 0.6f; 40 const CGFloat kSeparatorAlphaValue = 0.6f;
41 41
42 // Separator height. 42 // Separator height.
43 const CGFloat kSeparatorHeight = 1.0f; 43 const CGFloat kSeparatorHeight = 1.0f;
44 44
45 } // namespace 45 } // namespace
46 46
47 class ChooserContentViewController : public ChooserController::View { 47 class ChooserContentViewController : public ChooserController::View {
48 public: 48 public:
49 ChooserContentViewController(ChooserController* chooser_controller, 49 ChooserContentViewController(ChooserContentViewCocoa* chooser_content_view,
50 ChooserController* chooser_controller,
50 NSTableView* table_view, 51 NSTableView* table_view,
51 SpinnerView* spinner, 52 SpinnerView* spinner,
52 NSTextField* status, 53 NSTextField* status,
53 NSButton* rescan_button); 54 NSButton* rescan_button);
54 ~ChooserContentViewController() override; 55 ~ChooserContentViewController() override;
55 56
56 // ChooserController::View: 57 // ChooserController::View:
57 void OnOptionsInitialized() override; 58 void OnOptionsInitialized() override;
58 void OnOptionAdded(size_t index) override; 59 void OnOptionAdded(size_t index) override;
59 void OnOptionRemoved(size_t index) override; 60 void OnOptionRemoved(size_t index) override;
60 void OnAdapterEnabledChanged(bool enabled) override; 61 void OnAdapterEnabledChanged(bool enabled) override;
61 void OnRefreshStateChanged(bool refreshing) override; 62 void OnRefreshStateChanged(bool refreshing) override;
62 63
63 void UpdateTableView(); 64 void UpdateTableView();
64 65
65 private: 66 private:
67 ChooserContentViewCocoa* chooser_content_view_;
66 ChooserController* chooser_controller_; 68 ChooserController* chooser_controller_;
67 NSTableView* table_view_; 69 NSTableView* table_view_;
68 SpinnerView* spinner_; 70 SpinnerView* spinner_;
69 NSTextField* status_; 71 NSTextField* status_;
70 NSButton* rescan_button_; 72 NSButton* rescan_button_;
71 73
72 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController); 74 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController);
73 }; 75 };
74 76
75 ChooserContentViewController::ChooserContentViewController( 77 ChooserContentViewController::ChooserContentViewController(
78 ChooserContentViewCocoa* chooser_content_view,
76 ChooserController* chooser_controller, 79 ChooserController* chooser_controller,
77 NSTableView* table_view, 80 NSTableView* table_view,
78 SpinnerView* spinner, 81 SpinnerView* spinner,
79 NSTextField* status, 82 NSTextField* status,
80 NSButton* rescan_button) 83 NSButton* rescan_button)
81 : chooser_controller_(chooser_controller), 84 : chooser_content_view_(chooser_content_view),
85 chooser_controller_(chooser_controller),
82 table_view_(table_view), 86 table_view_(table_view),
83 spinner_(spinner), 87 spinner_(spinner),
84 status_(status), 88 status_(status),
85 rescan_button_(rescan_button) { 89 rescan_button_(rescan_button) {
86 DCHECK(chooser_controller_); 90 DCHECK(chooser_controller_);
87 DCHECK(table_view_); 91 DCHECK(table_view_);
88 DCHECK(spinner_); 92 DCHECK(spinner_);
89 DCHECK(status_); 93 DCHECK(status_);
90 DCHECK(rescan_button_); 94 DCHECK(rescan_button_);
91 chooser_controller_->set_view(this); 95 chooser_controller_->set_view(this);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 // of a previously selected row. 133 // of a previously selected row.
130 [table_view_ deselectAll:nil]; 134 [table_view_ deselectAll:nil];
131 UpdateTableView(); 135 UpdateTableView();
132 [table_view_ setHidden:NO]; 136 [table_view_ setHidden:NO];
133 137
134 [spinner_ setHidden:YES]; 138 [spinner_ setHidden:YES];
135 139
136 [status_ setHidden:YES]; 140 [status_ setHidden:YES];
137 // When adapter is enabled, show |rescan_button_|; otherwise hide it. 141 // When adapter is enabled, show |rescan_button_|; otherwise hide it.
138 [rescan_button_ setHidden:enabled ? NO : YES]; 142 [rescan_button_ setHidden:enabled ? NO : YES];
143
144 [chooser_content_view_ updateView];
139 } 145 }
140 146
141 void ChooserContentViewController::OnRefreshStateChanged(bool refreshing) { 147 void ChooserContentViewController::OnRefreshStateChanged(bool refreshing) {
142 if (refreshing) { 148 if (refreshing) {
143 // No row is selected since the chooser is refreshing. 149 // No row is selected since the chooser is refreshing.
144 // This will also disable the OK button if it was enabled because 150 // This will also disable the OK button if it was enabled because
145 // of a previously selected row. 151 // of a previously selected row.
146 [table_view_ deselectAll:nil]; 152 [table_view_ deselectAll:nil];
147 UpdateTableView(); 153 UpdateTableView();
148 } 154 }
149 155
150 // When refreshing and no option available yet, hide |table_view_| and show 156 // When refreshing and no option available yet, hide |table_view_| and show
151 // |spinner_|. Otherwise show |table_view_| and hide |spinner_|. 157 // |spinner_|. Otherwise show |table_view_| and hide |spinner_|.
152 bool table_view_hidden = 158 bool table_view_hidden =
153 refreshing && (chooser_controller_->NumOptions() == 0); 159 refreshing && (chooser_controller_->NumOptions() == 0);
154 [table_view_ setHidden:table_view_hidden ? YES : NO]; 160 [table_view_ setHidden:table_view_hidden ? YES : NO];
155 [spinner_ setHidden:table_view_hidden ? NO : YES]; 161 [spinner_ setHidden:table_view_hidden ? NO : YES];
156 162
157 // When refreshing, show |status_| and hide |rescan_button_|. 163 // When refreshing, show |status_| and hide |rescan_button_|.
158 // When complete, show |rescan_button_| and hide |status_|. 164 // When complete, show |rescan_button_| and hide |status_|.
159 [status_ setHidden:refreshing ? NO : YES]; 165 [status_ setHidden:refreshing ? NO : YES];
160 [rescan_button_ setHidden:refreshing ? YES : NO]; 166 [rescan_button_ setHidden:refreshing ? YES : NO];
167
168 [chooser_content_view_ updateView];
161 } 169 }
162 170
163 void ChooserContentViewController::UpdateTableView() { 171 void ChooserContentViewController::UpdateTableView() {
164 [table_view_ setEnabled:chooser_controller_->NumOptions() > 0]; 172 [table_view_ setEnabled:chooser_controller_->NumOptions() > 0];
165 [table_view_ reloadData]; 173 [table_view_ reloadData];
166 } 174 }
167 175
168 @implementation ChooserContentViewCocoa 176 @implementation ChooserContentViewCocoa
169 177
178 // TODO(juncai): restructure this function to be some smaller methods to
179 // create the pieces for the view. By doing so, the methods that calculate
180 // the frame and origins can be moved into those methods, rather than as
181 // helper functions.
170 - (instancetype)initWithChooserTitle:(NSString*)chooserTitle 182 - (instancetype)initWithChooserTitle:(NSString*)chooserTitle
171 chooserController: 183 chooserController:
172 (std::unique_ptr<ChooserController>)chooserController { 184 (std::unique_ptr<ChooserController>)chooserController {
173 // ------------------------------------ 185 // ------------------------------------
174 // | Chooser title | 186 // | Chooser title |
175 // | -------------------------------- | 187 // | -------------------------------- |
176 // | | option 0 | | 188 // | | option 0 | |
177 // | | option 1 | | 189 // | | option 1 | |
178 // | | option 2 | | 190 // | | option 2 | |
179 // | | | | 191 // | | | |
180 // | | | | 192 // | | | |
181 // | | | | 193 // | | | |
182 // | -------------------------------- | 194 // | -------------------------------- |
183 // | [ Connect ] [ Cancel ] | 195 // | [ Connect ] [ Cancel ] |
184 // |----------------------------------| 196 // |----------------------------------|
185 // | Not seeing your device? Get help | 197 // | Not seeing your device? Get help |
186 // ------------------------------------ 198 // ------------------------------------
187 199
188 // Determine the dimensions of the chooser. 200 // Determine the dimensions of the chooser.
189 // Once the height and width are set, the buttons and permission menus can 201 // Once the height and width are set, the buttons and permission menus can
190 // be laid out correctly. 202 // be laid out correctly.
191 NSRect chooserFrame = NSMakeRect(0, 0, kChooserWidth, kChooserHeight); 203 NSRect chooserFrame = NSMakeRect(0, 0, kChooserWidth, kChooserHeight);
192 204
193 if ((self = [super initWithFrame:chooserFrame])) { 205 if ((self = [super initWithFrame:chooserFrame])) {
194 chooserController_ = std::move(chooserController); 206 chooserController_ = std::move(chooserController);
195 207
196 // Create the views. 208 // Create the views.
197 // Title. 209 // Title.
198 titleView_ = [self createChooserTitle:chooserTitle]; 210 titleView_ = [self createChooserTitle:chooserTitle];
199 CGFloat titleHeight = NSHeight([titleView_ frame]); 211 titleHeight_ = NSHeight([titleView_ frame]);
200 212
201 // Status. 213 // Status.
202 status_ = [self createTextField:l10n_util::GetNSString( 214 status_ = [self createTextField:l10n_util::GetNSString(
203 IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING)]; 215 IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING)];
216 CGFloat statusWidth = kChooserWidth / 2 - kMarginX;
217 // The height is arbitrary as it will be adjusted later.
218 [status_ setFrameSize:NSMakeSize(statusWidth, 0.0f)];
219 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:status_];
220 statusHeight_ = NSHeight([status_ frame]);
204 221
205 // Re-scan button. 222 // Re-scan button.
206 rescanButton_ = 223 rescanButton_ =
207 [self createHyperlinkButtonWithText: 224 [self createHyperlinkButtonWithText:
208 l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN)]; 225 l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN)];
226 rescanButtonHeight_ = NSHeight([rescanButton_ frame]);
209 227
210 // Connect button. 228 // Connect button.
211 connectButton_ = [self createConnectButton]; 229 connectButton_ = [self createConnectButton];
212 CGFloat connectButtonWidth = NSWidth([connectButton_ frame]); 230 connectButtonWidth_ = NSWidth([connectButton_ frame]);
213 CGFloat connectButtonHeight = NSHeight([connectButton_ frame]); 231 connectButtonHeight_ = NSHeight([connectButton_ frame]);
214 232
215 // Cancel button. 233 // Cancel button.
216 cancelButton_ = [self createCancelButton]; 234 cancelButton_ = [self createCancelButton];
217 CGFloat cancelButtonWidth = NSWidth([cancelButton_ frame]); 235 cancelButtonWidth_ = NSWidth([cancelButton_ frame]);
236 cancelButtonHeight_ = NSHeight([cancelButton_ frame]);
237
238 CGFloat buttonRowHeight =
239 std::max(connectButtonHeight_, cancelButtonHeight_);
218 240
219 // Separator. 241 // Separator.
220 separator_ = [self createSeparator]; 242 separator_ = [self createSeparator];
221 243
222 // Message. 244 // Message.
223 message_ = [self createTextField:l10n_util::GetNSStringF( 245 message_ = [self createTextField:l10n_util::GetNSStringF(
224 IDS_DEVICE_CHOOSER_FOOTNOTE_TEXT, 246 IDS_DEVICE_CHOOSER_FOOTNOTE_TEXT,
225 base::string16())]; 247 base::string16())];
226 CGFloat messageWidth = NSWidth([message_ frame]); 248 CGFloat messageWidth = NSWidth([message_ frame]);
227 CGFloat messageHeight = NSHeight([message_ frame]); 249 messageHeight_ = NSHeight([message_ frame]);
228 250
229 // Help button. 251 // Help button.
230 helpButton_ = [self 252 helpButton_ = [self
231 createHyperlinkButtonWithText: 253 createHyperlinkButtonWithText:
232 l10n_util::GetNSString(IDS_DEVICE_CHOOSER_GET_HELP_LINK_TEXT)]; 254 l10n_util::GetNSString(IDS_DEVICE_CHOOSER_GET_HELP_LINK_TEXT)];
233 255
234 // ScollView embedding with TableView. 256 // ScollView embedding with TableView.
235 CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX; 257 noStatusOrRescanButtonShown_.scroll_view_frame =
236 CGFloat scrollViewHeight = kChooserHeight - 2 * kMarginY - 258 [self calculateScrollViewFrame:buttonRowHeight];
237 4 * kVerticalPadding - titleHeight - 259 scrollView_.reset([[NSScrollView alloc]
238 connectButtonHeight - messageHeight; 260 initWithFrame:noStatusOrRescanButtonShown_.scroll_view_frame]);
239 CGFloat scrollViewOriginX = kMarginX;
240 CGFloat scrollViewOriginY =
241 kMarginY + messageHeight + 3 * kVerticalPadding + connectButtonHeight;
242 NSRect scrollFrame = NSMakeRect(scrollViewOriginX, scrollViewOriginY,
243 scrollViewWidth, scrollViewHeight);
244 scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]);
245 [scrollView_ setBorderType:NSBezelBorder]; 261 [scrollView_ setBorderType:NSBezelBorder];
246 [scrollView_ setHasVerticalScroller:YES]; 262 [scrollView_ setHasVerticalScroller:YES];
247 [scrollView_ setHasHorizontalScroller:YES]; 263 [scrollView_ setHasHorizontalScroller:YES];
248 [scrollView_ setAutohidesScrollers:YES]; 264 [scrollView_ setAutohidesScrollers:YES];
249 265
250 // TableView. 266 // TableView.
251 tableView_.reset([[NSTableView alloc] initWithFrame:NSZeroRect]); 267 tableView_.reset([[NSTableView alloc] initWithFrame:NSZeroRect]);
252 tableColumn_.reset([[NSTableColumn alloc] initWithIdentifier:@""]); 268 tableColumn_.reset([[NSTableColumn alloc] initWithIdentifier:@""]);
253 [tableColumn_ setWidth:(scrollViewWidth - kMarginX)]; 269 [tableColumn_
270 setWidth:(noStatusOrRescanButtonShown_.scroll_view_frame.size.width -
271 kMarginX)];
254 [tableView_ addTableColumn:tableColumn_]; 272 [tableView_ addTableColumn:tableColumn_];
255 // Make the column title invisible. 273 // Make the column title invisible.
256 [tableView_ setHeaderView:nil]; 274 [tableView_ setHeaderView:nil];
257 [tableView_ setFocusRingType:NSFocusRingTypeNone]; 275 [tableView_ setFocusRingType:NSFocusRingTypeNone];
258 276
259 // Spinner. 277 // Spinner.
260 // Set the spinner in the center of the scroll view. 278 // Set the spinner in the center of the scroll view.
279 // When |status_| is shown, it may affect the frame origin and size of the
280 // |scrollView_|, and since the |spinner_| is shown with the |status_|,
281 // its frame origin needs to be calculated according to the frame origin
282 // of |scrollView_| with |status_| shown.
283 NSRect scrollViewFrameWithStatusText = [self
284 calculateScrollViewFrame:std::max(statusHeight_, buttonRowHeight)];
261 CGFloat spinnerOriginX = 285 CGFloat spinnerOriginX =
262 scrollViewOriginX + (scrollViewWidth - kSpinnerSize) / 2; 286 scrollViewFrameWithStatusText.origin.x +
287 (scrollViewFrameWithStatusText.size.width - kSpinnerSize) / 2;
263 CGFloat spinnerOriginY = 288 CGFloat spinnerOriginY =
264 scrollViewOriginY + (scrollViewHeight - kSpinnerSize) / 2; 289 scrollViewFrameWithStatusText.origin.y +
290 (scrollViewFrameWithStatusText.size.height - kSpinnerSize) / 2;
265 spinner_.reset([[SpinnerView alloc] 291 spinner_.reset([[SpinnerView alloc]
266 initWithFrame:NSMakeRect(spinnerOriginX, spinnerOriginY, kSpinnerSize, 292 initWithFrame:NSMakeRect(spinnerOriginX, spinnerOriginY, kSpinnerSize,
267 kSpinnerSize)]); 293 kSpinnerSize)]);
268 294
269 // Lay out the views. 295 // Lay out the views.
270 // Title. 296 // Title.
271 CGFloat titleOriginX = kMarginX; 297 CGFloat titleOriginX = kMarginX;
272 CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight; 298 CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight_;
273 [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)]; 299 [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
274 [self addSubview:titleView_]; 300 [self addSubview:titleView_];
275 301
276 // ScollView and Spinner. Only one of them is shown. 302 // ScollView and Spinner. Only one of them is shown.
277 [scrollView_ setDocumentView:tableView_]; 303 [scrollView_ setDocumentView:tableView_];
278 [self addSubview:scrollView_]; 304 [self addSubview:scrollView_];
279 [spinner_ setHidden:YES]; 305 [spinner_ setHidden:YES];
280 [self addSubview:spinner_]; 306 [self addSubview:spinner_];
281 307
282 // Status text field and Re-scan button. Only one of them is shown. 308 // Status text field and Re-scan button. At most one of them is shown.
283 CGFloat statusOriginX = kMarginX;
284 // Bottom-align with the text on the buttons.
285 CGFloat statusOriginY = kMarginY + messageHeight + 2 * kVerticalPadding +
286 (connectButtonHeight - [NSFont systemFontSize]) / 2;
287 [status_ setFrameOrigin:NSMakePoint(statusOriginX, statusOriginY)];
288 [self addSubview:status_]; 309 [self addSubview:status_];
289 [status_ setHidden:YES]; 310 [status_ setHidden:YES];
290 [rescanButton_ setFrameOrigin:NSMakePoint(statusOriginX, statusOriginY)]; 311
291 [rescanButton_ setTarget:self]; 312 [rescanButton_ setTarget:self];
292 [rescanButton_ setAction:@selector(onRescan:)]; 313 [rescanButton_ setAction:@selector(onRescan:)];
293 [self addSubview:rescanButton_]; 314 [self addSubview:rescanButton_];
294 [rescanButton_ setHidden:YES]; 315 [rescanButton_ setHidden:YES];
295 316
296 // Connect button. 317 // Connect button.
297 CGFloat connectButtonOriginX = kChooserWidth - kMarginX - 318 noStatusOrRescanButtonShown_.connect_button_origin =
298 kHorizontalPadding - connectButtonWidth - 319 [self calculateConnectButtonOrigin:buttonRowHeight];
299 cancelButtonWidth;
300 CGFloat connectButtonOriginY =
301 kMarginY + messageHeight + 2 * kVerticalPadding;
302 [connectButton_ 320 [connectButton_
303 setFrameOrigin:NSMakePoint(connectButtonOriginX, connectButtonOriginY)]; 321 setFrameOrigin:noStatusOrRescanButtonShown_.connect_button_origin];
304 [connectButton_ setEnabled:NO]; 322 [connectButton_ setEnabled:NO];
305 [self addSubview:connectButton_]; 323 [self addSubview:connectButton_];
306 324
307 // Cancel button. 325 // Cancel button.
308 CGFloat cancelButtonOriginX = kChooserWidth - kMarginX - cancelButtonWidth; 326 noStatusOrRescanButtonShown_.cancel_button_origin =
309 CGFloat cancelButtonOriginY = connectButtonOriginY; 327 [self calculateCancelButtonOrigin:buttonRowHeight];
310 [cancelButton_ 328 [cancelButton_
311 setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)]; 329 setFrameOrigin:noStatusOrRescanButtonShown_.cancel_button_origin];
312 [self addSubview:cancelButton_]; 330 [self addSubview:cancelButton_];
313 331
314 // Separator. 332 // Separator.
315 CGFloat separatorOriginX = 0.0f; 333 CGFloat separatorOriginX = 0.0f;
316 CGFloat separatorOriginY = kMarginY + messageHeight + kVerticalPadding; 334 CGFloat separatorOriginY = kMarginY + messageHeight_ + kVerticalPadding;
317 [separator_ setFrameOrigin:NSMakePoint(separatorOriginX, separatorOriginY)]; 335 [separator_ setFrameOrigin:NSMakePoint(separatorOriginX, separatorOriginY)];
318 [self addSubview:separator_]; 336 [self addSubview:separator_];
319 337
320 // Message. 338 // Message.
321 CGFloat messageOriginX = kMarginX; 339 CGFloat messageOriginX = kMarginX;
322 CGFloat messageOriginY = kMarginY; 340 CGFloat messageOriginY = kMarginY;
323 [message_ setFrameOrigin:NSMakePoint(messageOriginX, messageOriginY)]; 341 [message_ setFrameOrigin:NSMakePoint(messageOriginX, messageOriginY)];
324 [self addSubview:message_]; 342 [self addSubview:message_];
325 343
326 // Help button. 344 // Help button.
327 CGFloat helpButtonOriginX = 345 CGFloat helpButtonOriginX =
328 kMarginX + messageWidth - kHorizontalPadding / 2; 346 kMarginX + messageWidth - kHorizontalPadding / 2;
329 CGFloat helpButtonOriginY = kMarginY; 347 CGFloat helpButtonOriginY = kMarginY;
330 [helpButton_ 348 [helpButton_
331 setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)]; 349 setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)];
332 [helpButton_ setTarget:self]; 350 [helpButton_ setTarget:self];
333 [helpButton_ setAction:@selector(onHelpPressed:)]; 351 [helpButton_ setAction:@selector(onHelpPressed:)];
334 [self addSubview:helpButton_]; 352 [self addSubview:helpButton_];
335 353
354 // Calculate and cache the frame and origins values.
355 buttonRowHeight = std::max(
356 statusHeight_, std::max(connectButtonHeight_, cancelButtonHeight_));
357 statusShown_ = {[self calculateScrollViewFrame:buttonRowHeight],
358 [self calculateConnectButtonOrigin:buttonRowHeight],
359 [self calculateCancelButtonOrigin:buttonRowHeight]};
360 statusOrigin_ = [self calculateStatusOrigin:buttonRowHeight];
361
362 buttonRowHeight =
363 std::max(rescanButtonHeight_,
364 std::max(connectButtonHeight_, cancelButtonHeight_));
365 rescanButtonShown_ = {[self calculateScrollViewFrame:buttonRowHeight],
366 [self calculateConnectButtonOrigin:buttonRowHeight],
367 [self calculateCancelButtonOrigin:buttonRowHeight]};
368 rescanButtonOrigin_ = [self calculateRescanButtonOrigin:buttonRowHeight];
369
336 chooserContentViewController_.reset(new ChooserContentViewController( 370 chooserContentViewController_.reset(new ChooserContentViewController(
337 chooserController_.get(), tableView_.get(), spinner_.get(), 371 self, chooserController_.get(), tableView_.get(), spinner_.get(),
338 status_.get(), rescanButton_.get())); 372 status_.get(), rescanButton_.get()));
339 } 373 }
340 374
341 return self; 375 return self;
342 } 376 }
343 377
344 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title { 378 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title {
345 base::scoped_nsobject<NSTextField> titleView( 379 base::scoped_nsobject<NSTextField> titleView(
346 [[NSTextField alloc] initWithFrame:NSZeroRect]); 380 [[NSTextField alloc] initWithFrame:NSZeroRect]);
347 [titleView setDrawsBackground:NO]; 381 [titleView setDrawsBackground:NO];
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 (NSString*)text { 437 (NSString*)text {
404 base::scoped_nsobject<NSButton> button( 438 base::scoped_nsobject<NSButton> button(
405 [[NSButton alloc] initWithFrame:NSZeroRect]); 439 [[NSButton alloc] initWithFrame:NSZeroRect]);
406 base::scoped_nsobject<HyperlinkButtonCell> cell( 440 base::scoped_nsobject<HyperlinkButtonCell> cell(
407 [[HyperlinkButtonCell alloc] initTextCell:text]); 441 [[HyperlinkButtonCell alloc] initTextCell:text]);
408 [button setCell:cell.get()]; 442 [button setCell:cell.get()];
409 [button sizeToFit]; 443 [button sizeToFit];
410 return button; 444 return button;
411 } 445 }
412 446
447 - (NSRect)calculateScrollViewFrame:(CGFloat)buttonRowHeight {
448 CGFloat originX = kMarginX;
449 CGFloat originY =
450 kMarginY + messageHeight_ + 3 * kVerticalPadding + buttonRowHeight;
451 CGFloat width = kChooserWidth - 2 * kMarginX;
452 CGFloat height = kChooserHeight - 2 * kMarginY - 4 * kVerticalPadding -
453 titleHeight_ - buttonRowHeight - messageHeight_;
454 return NSMakeRect(originX, originY, width, height);
455 }
456
457 - (NSPoint)calculateStatusOrigin:(CGFloat)buttonRowHeight {
458 return NSMakePoint(kMarginX, kMarginY + messageHeight_ +
459 2 * kVerticalPadding +
460 (buttonRowHeight - statusHeight_) / 2);
461 }
462
463 - (NSPoint)calculateRescanButtonOrigin:(CGFloat)buttonRowHeight {
464 return NSMakePoint(kMarginX, kMarginY + messageHeight_ +
465 2 * kVerticalPadding +
466 (buttonRowHeight - rescanButtonHeight_) / 2);
467 }
468
469 - (NSPoint)calculateConnectButtonOrigin:(CGFloat)buttonRowHeight {
470 return NSMakePoint(kChooserWidth - kMarginX - kHorizontalPadding -
471 connectButtonWidth_ - cancelButtonWidth_,
472 kMarginY + messageHeight_ + 2 * kVerticalPadding +
473 (buttonRowHeight - connectButtonHeight_) / 2);
474 }
475
476 - (NSPoint)calculateCancelButtonOrigin:(CGFloat)buttonRowHeight {
477 return NSMakePoint(kChooserWidth - kMarginX - cancelButtonWidth_,
478 kMarginY + messageHeight_ + 2 * kVerticalPadding +
479 (buttonRowHeight - cancelButtonHeight_) / 2);
480 }
481
482 - (void)updateView {
483 FrameAndOrigin frameAndOrigin;
484 if (![status_ isHidden]) {
485 [status_ setFrameOrigin:statusOrigin_];
486 frameAndOrigin = statusShown_;
487 } else if (![rescanButton_ isHidden]) {
488 [rescanButton_ setFrameOrigin:rescanButtonOrigin_];
489 frameAndOrigin = rescanButtonShown_;
490 } else {
491 frameAndOrigin = noStatusOrRescanButtonShown_;
492 }
493
494 [scrollView_ setFrame:frameAndOrigin.scroll_view_frame];
495 [connectButton_ setFrameOrigin:frameAndOrigin.connect_button_origin];
496 [cancelButton_ setFrameOrigin:frameAndOrigin.cancel_button_origin];
497 }
498
413 - (NSTableView*)tableView { 499 - (NSTableView*)tableView {
414 return tableView_.get(); 500 return tableView_.get();
415 } 501 }
416 502
417 - (SpinnerView*)spinner { 503 - (SpinnerView*)spinner {
418 return spinner_.get(); 504 return spinner_.get();
419 } 505 }
420 506
421 - (NSTextField*)status { 507 - (NSTextField*)status {
422 return status_.get(); 508 return status_.get();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 564
479 - (void)onRescan:(id)sender { 565 - (void)onRescan:(id)sender {
480 chooserController_->RefreshOptions(); 566 chooserController_->RefreshOptions();
481 } 567 }
482 568
483 - (void)onHelpPressed:(id)sender { 569 - (void)onHelpPressed:(id)sender {
484 chooserController_->OpenHelpCenterUrl(); 570 chooserController_->OpenHelpCenterUrl();
485 } 571 }
486 572
487 @end 573 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/chooser_content_view_cocoa.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698