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

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

Issue 2169513004: Add spinner, status text and Re-scan button to Bluetooth chooser on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added spinner, status text and Re-scan button to Bluetooth chooser on Mac Created 4 years, 5 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"
11 #include "chrome/browser/chooser_controller/chooser_controller.h" 11 #include "chrome/browser/chooser_controller/chooser_controller.h"
12 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h" 12 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h"
13 #include "chrome/browser/ui/cocoa/spinner_view.h"
13 #include "chrome/grit/generated_resources.h" 14 #include "chrome/grit/generated_resources.h"
14 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTw eaker.h" 15 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTw eaker.h"
15 #import "ui/base/cocoa/controls/hyperlink_button_cell.h" 16 #import "ui/base/cocoa/controls/hyperlink_button_cell.h"
16 #include "ui/base/l10n/l10n_util_mac.h" 17 #include "ui/base/l10n/l10n_util_mac.h"
17 18
18 namespace { 19 namespace {
19 20
20 // Chooser width. 21 // Chooser width.
21 const CGFloat kChooserWidth = 320.0f; 22 const CGFloat kChooserWidth = 350.0f;
22 23
23 // Chooser height. 24 // Chooser height.
24 const CGFloat kChooserHeight = 280.0f; 25 const CGFloat kChooserHeight = 300.0f;
26
27 // Spinner size.
28 const CGFloat kSpinnerSize = 50.0f;
25 29
26 // Distance between the chooser border and the view that is closest to the 30 // Distance between the chooser border and the view that is closest to the
27 // border. 31 // border.
28 const CGFloat kMarginX = 20.0f; 32 const CGFloat kMarginX = 20.0f;
29 const CGFloat kMarginY = 20.0f; 33 const CGFloat kMarginY = 20.0f;
30 34
31 // Distance between two views inside the chooser. 35 // Distance between two views inside the chooser.
32 const CGFloat kHorizontalPadding = 10.0f; 36 const CGFloat kHorizontalPadding = 10.0f;
33 const CGFloat kVerticalPadding = 10.0f; 37 const CGFloat kVerticalPadding = 10.0f;
34 38
35 // Separator alpha value. 39 // Separator alpha value.
36 const CGFloat kSeparatorAlphaValue = 0.6f; 40 const CGFloat kSeparatorAlphaValue = 0.6f;
37 41
38 // Separator height. 42 // Separator height.
39 const CGFloat kSeparatorHeight = 1.0f; 43 const CGFloat kSeparatorHeight = 1.0f;
40 44
41 } // namespace 45 } // namespace
42 46
43 class TableViewController : public ChooserController::Observer { 47 class ChooserContentViewController : public ChooserController::Observer {
44 public: 48 public:
45 TableViewController(ChooserController* chooser_controller, 49 ChooserContentViewController(ChooserController* chooser_controller,
46 NSTableView* table_view); 50 NSTableView* table_view,
47 ~TableViewController() override; 51 SpinnerView* spinner,
52 NSTextField* status,
53 NSButton* rescan_button);
54 ~ChooserContentViewController() override;
48 55
49 // ChooserController::Observer: 56 // ChooserController::Observer:
50 void OnOptionsInitialized() override; 57 void OnOptionsInitialized() override;
51 void OnOptionAdded(size_t index) override; 58 void OnOptionAdded(size_t index) override;
52 void OnOptionRemoved(size_t index) override; 59 void OnOptionRemoved(size_t index) override;
53 void OnAdapterEnabledChanged(bool enabled) override; 60 void OnAdapterEnabledChanged(bool enabled) override;
54 void OnRefreshStateChanged(bool refreshing) override; 61 void OnRefreshStateChanged(bool refreshing) override;
55 62
56 void UpdateTableView(); 63 void UpdateTableView();
57 64
58 private: 65 private:
59 ChooserController* chooser_controller_; 66 ChooserController* chooser_controller_;
60 NSTableView* table_view_; 67 NSTableView* table_view_;
68 SpinnerView* spinner_;
69 NSTextField* status_;
70 NSButton* rescan_button_;
61 71
62 DISALLOW_COPY_AND_ASSIGN(TableViewController); 72 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController);
63 }; 73 };
64 74
65 TableViewController::TableViewController(ChooserController* chooser_controller, 75 ChooserContentViewController::ChooserContentViewController(
66 NSTableView* table_view) 76 ChooserController* chooser_controller,
67 : chooser_controller_(chooser_controller), table_view_(table_view) { 77 NSTableView* table_view,
78 SpinnerView* spinner,
79 NSTextField* status,
80 NSButton* rescan_button)
81 : chooser_controller_(chooser_controller),
82 table_view_(table_view),
83 spinner_(spinner),
84 status_(status),
85 rescan_button_(rescan_button) {
68 DCHECK(chooser_controller_); 86 DCHECK(chooser_controller_);
69 DCHECK(table_view_); 87 DCHECK(table_view_);
88 DCHECK(spinner_);
89 DCHECK(status_);
90 DCHECK(rescan_button_);
70 chooser_controller_->set_observer(this); 91 chooser_controller_->set_observer(this);
71 } 92 }
72 93
73 TableViewController::~TableViewController() { 94 ChooserContentViewController::~ChooserContentViewController() {
74 chooser_controller_->set_observer(nullptr); 95 chooser_controller_->set_observer(nullptr);
75 } 96 }
76 97
77 void TableViewController::OnOptionsInitialized() { 98 void ChooserContentViewController::OnOptionsInitialized() {
78 UpdateTableView(); 99 UpdateTableView();
79 } 100 }
80 101
81 void TableViewController::OnOptionAdded(size_t index) { 102 void ChooserContentViewController::OnOptionAdded(size_t index) {
82 UpdateTableView(); 103 UpdateTableView();
83 } 104 }
84 105
85 void TableViewController::OnOptionRemoved(size_t index) { 106 void ChooserContentViewController::OnOptionRemoved(size_t index) {
86 // |table_view_| will automatically select the removed item's next item. 107 // |table_view_| will automatically select the removed item's next item.
87 // So here it tracks if the removed item is the item that was currently 108 // So here it tracks if the removed item is the item that was currently
88 // selected, if so, deselect it. Also if the removed item is before the 109 // selected, if so, deselect it. Also if the removed item is before the
89 // currently selected item, the currently selected item's index needs to 110 // currently selected item, the currently selected item's index needs to
90 // be adjusted by one. 111 // be adjusted by one.
91 NSInteger idx = static_cast<NSInteger>(index); 112 NSInteger idx = static_cast<NSInteger>(index);
92 NSInteger selected_row = [table_view_ selectedRow]; 113 NSInteger selected_row = [table_view_ selectedRow];
93 if (selected_row == idx) 114 if (selected_row == idx)
94 [table_view_ deselectRow:idx]; 115 [table_view_ deselectRow:idx];
95 else if (selected_row > idx) 116 else if (selected_row > idx)
96 [table_view_ 117 [table_view_
97 selectRowIndexes:[NSIndexSet indexSetWithIndex:selected_row - 1] 118 selectRowIndexes:[NSIndexSet indexSetWithIndex:selected_row - 1]
98 byExtendingSelection:NO]; 119 byExtendingSelection:NO];
99 120
100 UpdateTableView(); 121 UpdateTableView();
101 } 122 }
102 123
103 void TableViewController::OnAdapterEnabledChanged(bool enabled) {} 124 void ChooserContentViewController::OnAdapterEnabledChanged(bool enabled) {
125 // No row is selected since the adapter status has changed.
126 // This will also disable the OK button if it was enabled because
127 // of a previously selected row.
128 [table_view_ deselectAll:nil];
129 UpdateTableView();
130 [table_view_ setHidden:NO];
104 131
105 void TableViewController::OnRefreshStateChanged(bool refreshing) {} 132 [spinner_ setHidden:YES];
106 133
107 void TableViewController::UpdateTableView() { 134 [status_ setHidden:YES];
135 // When adapter is enabled, show |rescan_button_|; otherwise hide it.
136 [rescan_button_ setHidden:enabled ? NO : YES];
137 }
138
139 void ChooserContentViewController::OnRefreshStateChanged(bool refreshing) {
Robert Sesek 2016/07/21 14:56:32 Should there be unit tests for these methods?
juncai 2016/07/21 22:08:14 Yes. It needs to modify MockChooserController, I a
140 // No row is selected since the chooser is refreshing or just refreshed.
141 // This will also disable the OK button if it was enabled because
142 // of a previously selected row.
143 [table_view_ deselectAll:nil];
144 UpdateTableView();
145 // When refreshing, hide |table_view_|. When complete, show |table_view_|.
146 [table_view_ setHidden:refreshing ? YES : NO];
147
148 // When refreshing, show |spinner_|. When complete, hide |spinner_|.
149 [spinner_ setHidden:refreshing ? NO : YES];
150
151 // When refreshing, show |status_| and hide |rescan_button_|.
152 // When complete, show |rescan_button_| and hide |status_|.
153 [status_ setHidden:refreshing ? NO : YES];
154 [rescan_button_ setHidden:refreshing ? YES : NO];
155 }
156
157 void ChooserContentViewController::UpdateTableView() {
108 [table_view_ setEnabled:chooser_controller_->NumOptions() > 0]; 158 [table_view_ setEnabled:chooser_controller_->NumOptions() > 0];
109 [table_view_ reloadData]; 159 [table_view_ reloadData];
110 } 160 }
111 161
112 @implementation ChooserContentViewCocoa 162 @implementation ChooserContentViewCocoa
113 163
114 - (instancetype)initWithChooserTitle:(NSString*)chooserTitle 164 - (instancetype)initWithChooserTitle:(NSString*)chooserTitle
115 chooserController: 165 chooserController:
116 (std::unique_ptr<ChooserController>)chooserController { 166 (std::unique_ptr<ChooserController>)chooserController {
117 // ------------------------------------ 167 // ------------------------------------
(...skipping 17 matching lines...) Expand all
135 NSRect chooserFrame = NSMakeRect(0, 0, kChooserWidth, kChooserHeight); 185 NSRect chooserFrame = NSMakeRect(0, 0, kChooserWidth, kChooserHeight);
136 186
137 if ((self = [super initWithFrame:chooserFrame])) { 187 if ((self = [super initWithFrame:chooserFrame])) {
138 chooserController_ = std::move(chooserController); 188 chooserController_ = std::move(chooserController);
139 189
140 // Create the views. 190 // Create the views.
141 // Title. 191 // Title.
142 titleView_ = [self createChooserTitle:chooserTitle]; 192 titleView_ = [self createChooserTitle:chooserTitle];
143 CGFloat titleHeight = NSHeight([titleView_ frame]); 193 CGFloat titleHeight = NSHeight([titleView_ frame]);
144 194
195 // Status.
196 status_ = [self createTextField:l10n_util::GetNSString(
197 IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING)];
198
199 // Re-scan button.
200 rescanButton_ =
201 [self createHyperlinkButtonWithText:
202 l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN)];
203
145 // Connect button. 204 // Connect button.
146 connectButton_ = [self createConnectButton]; 205 connectButton_ = [self createConnectButton];
147 CGFloat connectButtonWidth = NSWidth([connectButton_ frame]); 206 CGFloat connectButtonWidth = NSWidth([connectButton_ frame]);
148 CGFloat connectButtonHeight = NSHeight([connectButton_ frame]); 207 CGFloat connectButtonHeight = NSHeight([connectButton_ frame]);
149 208
150 // Cancel button. 209 // Cancel button.
151 cancelButton_ = [self createCancelButton]; 210 cancelButton_ = [self createCancelButton];
152 CGFloat cancelButtonWidth = NSWidth([cancelButton_ frame]); 211 CGFloat cancelButtonWidth = NSWidth([cancelButton_ frame]);
153 212
154 // Separator. 213 // Separator.
155 separator_ = [self createSeparator]; 214 separator_ = [self createSeparator];
156 215
157 // Message. 216 // Message.
158 message_ = [self createMessage]; 217 message_ = [self createTextField:l10n_util::GetNSStringF(
218 IDS_DEVICE_CHOOSER_FOOTNOTE_TEXT,
219 base::string16())];
159 CGFloat messageWidth = NSWidth([message_ frame]); 220 CGFloat messageWidth = NSWidth([message_ frame]);
160 CGFloat messageHeight = NSHeight([message_ frame]); 221 CGFloat messageHeight = NSHeight([message_ frame]);
161 222
162 // Help button. 223 // Help button.
163 helpButton_ = [self createHelpButton]; 224 helpButton_ = [self
225 createHyperlinkButtonWithText:
226 l10n_util::GetNSString(IDS_DEVICE_CHOOSER_GET_HELP_LINK_TEXT)];
164 227
165 // ScollView embedding with TableView. 228 // ScollView embedding with TableView.
166 CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX; 229 CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX;
167 CGFloat scrollViewHeight = kChooserHeight - 2 * kMarginY - 230 CGFloat scrollViewHeight = kChooserHeight - 2 * kMarginY -
168 4 * kVerticalPadding - titleHeight - 231 4 * kVerticalPadding - titleHeight -
169 connectButtonHeight - messageHeight; 232 connectButtonHeight - messageHeight;
170 NSRect scrollFrame = NSMakeRect( 233 CGFloat scrollViewOriginX = kMarginX;
171 kMarginX, 234 CGFloat scrollViewOriginY =
172 kMarginY + messageHeight + 3 * kVerticalPadding + connectButtonHeight, 235 kMarginY + messageHeight + 3 * kVerticalPadding + connectButtonHeight;
173 scrollViewWidth, scrollViewHeight); 236 NSRect scrollFrame = NSMakeRect(scrollViewOriginX, scrollViewOriginY,
237 scrollViewWidth, scrollViewHeight);
174 scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]); 238 scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]);
175 [scrollView_ setBorderType:NSBezelBorder]; 239 [scrollView_ setBorderType:NSBezelBorder];
176 [scrollView_ setHasVerticalScroller:YES]; 240 [scrollView_ setHasVerticalScroller:YES];
177 [scrollView_ setHasHorizontalScroller:YES]; 241 [scrollView_ setHasHorizontalScroller:YES];
178 [scrollView_ setAutohidesScrollers:YES]; 242 [scrollView_ setAutohidesScrollers:YES];
179 243
180 // TableView. 244 // TableView.
181 tableView_.reset([[NSTableView alloc] initWithFrame:NSZeroRect]); 245 tableView_.reset([[NSTableView alloc] initWithFrame:NSZeroRect]);
182 tableColumn_.reset([[NSTableColumn alloc] initWithIdentifier:@""]); 246 tableColumn_.reset([[NSTableColumn alloc] initWithIdentifier:@""]);
183 [tableColumn_ setWidth:(scrollViewWidth - kMarginX)]; 247 [tableColumn_ setWidth:(scrollViewWidth - kMarginX)];
184 [tableView_ addTableColumn:tableColumn_]; 248 [tableView_ addTableColumn:tableColumn_];
185 // Make the column title invisible. 249 // Make the column title invisible.
186 [tableView_ setHeaderView:nil]; 250 [tableView_ setHeaderView:nil];
187 [tableView_ setFocusRingType:NSFocusRingTypeNone]; 251 [tableView_ setFocusRingType:NSFocusRingTypeNone];
188 252
253 // Spinner.
254 // Set the spinner in the center of the scroll view.
255 CGFloat spinnerOriginX =
256 scrollViewOriginX + (scrollViewWidth - kSpinnerSize) / 2;
257 CGFloat spinnerOriginY =
258 scrollViewOriginY + (scrollViewHeight - kSpinnerSize) / 2;
259 spinner_.reset([[SpinnerView alloc]
260 initWithFrame:NSMakeRect(spinnerOriginX, spinnerOriginY, kSpinnerSize,
261 kSpinnerSize)]);
262
189 // Lay out the views. 263 // Lay out the views.
190 // Title. 264 // Title.
191 CGFloat titleOriginX = kMarginX; 265 CGFloat titleOriginX = kMarginX;
192 CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight; 266 CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight;
193 [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)]; 267 [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
194 [self addSubview:titleView_]; 268 [self addSubview:titleView_];
195 269
196 // ScollView. 270 // ScollView and Spinner. Only one of them is shown.
197 [scrollView_ setDocumentView:tableView_]; 271 [scrollView_ setDocumentView:tableView_];
198 [self addSubview:scrollView_]; 272 [self addSubview:scrollView_];
273 [spinner_ setHidden:YES];
274 [self addSubview:spinner_];
275
276 // Status text field and Re-scan button. Only one of them is shown.
277 CGFloat statusOriginX = kMarginX;
278 CGFloat statusOriginY = kMarginY + messageHeight + 2 * kVerticalPadding;
279 [status_ setFrameOrigin:NSMakePoint(statusOriginX, statusOriginY)];
280 [self addSubview:status_];
281 [status_ setHidden:YES];
282 [rescanButton_ setFrameOrigin:NSMakePoint(statusOriginX, statusOriginY)];
283 [rescanButton_ setTarget:self];
284 [rescanButton_ setAction:@selector(onRescan:)];
285 [self addSubview:rescanButton_];
286 [rescanButton_ setHidden:YES];
199 287
200 // Connect button. 288 // Connect button.
201 CGFloat connectButtonOriginX = kChooserWidth - kMarginX - 289 CGFloat connectButtonOriginX = kChooserWidth - kMarginX -
202 kHorizontalPadding - connectButtonWidth - 290 kHorizontalPadding - connectButtonWidth -
203 cancelButtonWidth; 291 cancelButtonWidth;
204 CGFloat connectButtonOriginY = 292 CGFloat connectButtonOriginY = statusOriginY;
205 kMarginY + messageHeight + 2 * kVerticalPadding;
206 [connectButton_ 293 [connectButton_
207 setFrameOrigin:NSMakePoint(connectButtonOriginX, connectButtonOriginY)]; 294 setFrameOrigin:NSMakePoint(connectButtonOriginX, connectButtonOriginY)];
208 [connectButton_ setEnabled:NO]; 295 [connectButton_ setEnabled:NO];
209 [self addSubview:connectButton_]; 296 [self addSubview:connectButton_];
210 297
211 // Cancel button. 298 // Cancel button.
212 CGFloat cancelButtonOriginX = kChooserWidth - kMarginX - cancelButtonWidth; 299 CGFloat cancelButtonOriginX = kChooserWidth - kMarginX - cancelButtonWidth;
213 CGFloat cancelButtonOriginY = connectButtonOriginY; 300 CGFloat cancelButtonOriginY = connectButtonOriginY;
214 [cancelButton_ 301 [cancelButton_
215 setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)]; 302 setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)];
(...skipping 14 matching lines...) Expand all
230 // Help button. 317 // Help button.
231 CGFloat helpButtonOriginX = 318 CGFloat helpButtonOriginX =
232 kMarginX + messageWidth - kHorizontalPadding / 2; 319 kMarginX + messageWidth - kHorizontalPadding / 2;
233 CGFloat helpButtonOriginY = kMarginY; 320 CGFloat helpButtonOriginY = kMarginY;
234 [helpButton_ 321 [helpButton_
235 setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)]; 322 setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)];
236 [helpButton_ setTarget:self]; 323 [helpButton_ setTarget:self];
237 [helpButton_ setAction:@selector(onHelpPressed:)]; 324 [helpButton_ setAction:@selector(onHelpPressed:)];
238 [self addSubview:helpButton_]; 325 [self addSubview:helpButton_];
239 326
240 tableViewController_.reset( 327 chooserContentViewController_.reset(new ChooserContentViewController(
241 new TableViewController(chooserController_.get(), tableView_.get())); 328 chooserController_.get(), tableView_.get(), spinner_.get(),
329 status_.get(), rescanButton_.get()));
242 } 330 }
243 331
244 return self; 332 return self;
245 } 333 }
246 334
247 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title { 335 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title {
248 base::scoped_nsobject<NSTextField> titleView( 336 base::scoped_nsobject<NSTextField> titleView(
249 [[NSTextField alloc] initWithFrame:NSZeroRect]); 337 [[NSTextField alloc] initWithFrame:NSZeroRect]);
250 [titleView setDrawsBackground:NO]; 338 [titleView setDrawsBackground:NO];
251 [titleView setBezeled:NO]; 339 [titleView setBezeled:NO];
(...skipping 30 matching lines...) Expand all
282 370
283 - (base::scoped_nsobject<NSBox>)createSeparator { 371 - (base::scoped_nsobject<NSBox>)createSeparator {
284 base::scoped_nsobject<NSBox> spacer([[NSBox alloc] initWithFrame:NSZeroRect]); 372 base::scoped_nsobject<NSBox> spacer([[NSBox alloc] initWithFrame:NSZeroRect]);
285 [spacer setBoxType:NSBoxSeparator]; 373 [spacer setBoxType:NSBoxSeparator];
286 [spacer setBorderType:NSLineBorder]; 374 [spacer setBorderType:NSLineBorder];
287 [spacer setAlphaValue:kSeparatorAlphaValue]; 375 [spacer setAlphaValue:kSeparatorAlphaValue];
288 [spacer setFrameSize:NSMakeSize(kChooserWidth, kSeparatorHeight)]; 376 [spacer setFrameSize:NSMakeSize(kChooserWidth, kSeparatorHeight)];
289 return spacer; 377 return spacer;
290 } 378 }
291 379
292 - (base::scoped_nsobject<NSTextField>)createMessage { 380 - (base::scoped_nsobject<NSTextField>)createTextField:(NSString*)text {
293 base::scoped_nsobject<NSTextField> messageView( 381 base::scoped_nsobject<NSTextField> textField(
294 [[NSTextField alloc] initWithFrame:NSZeroRect]); 382 [[NSTextField alloc] initWithFrame:NSZeroRect]);
295 [messageView setDrawsBackground:NO]; 383 [textField setDrawsBackground:NO];
296 [messageView setBezeled:NO]; 384 [textField setBezeled:NO];
297 [messageView setEditable:NO]; 385 [textField setEditable:NO];
298 [messageView setSelectable:NO]; 386 [textField setSelectable:NO];
299 [messageView 387 [textField setStringValue:text];
300 setStringValue:l10n_util::GetNSStringF(IDS_DEVICE_CHOOSER_FOOTNOTE_TEXT, 388 [textField setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
301 base::string16())]; 389 [textField sizeToFit];
302 [messageView setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; 390 return textField;
303 [messageView sizeToFit];
304 return messageView;
305 } 391 }
306 392
307 - (base::scoped_nsobject<NSButton>)createHelpButton { 393 - (base::scoped_nsobject<NSButton>)createHyperlinkButtonWithText:
394 (NSString*)text {
308 base::scoped_nsobject<NSButton> button( 395 base::scoped_nsobject<NSButton> button(
309 [[NSButton alloc] initWithFrame:NSZeroRect]); 396 [[NSButton alloc] initWithFrame:NSZeroRect]);
310 base::scoped_nsobject<HyperlinkButtonCell> cell([[HyperlinkButtonCell alloc] 397 base::scoped_nsobject<HyperlinkButtonCell> cell(
311 initTextCell:l10n_util::GetNSString( 398 [[HyperlinkButtonCell alloc] initTextCell:text]);
312 IDS_DEVICE_CHOOSER_GET_HELP_LINK_TEXT)]);
313 [button setCell:cell.get()]; 399 [button setCell:cell.get()];
314 [button sizeToFit]; 400 [button sizeToFit];
315 return button; 401 return button;
316 } 402 }
317 403
318 - (NSTableView*)tableView { 404 - (NSTableView*)tableView {
319 return tableView_.get(); 405 return tableView_.get();
320 } 406 }
321 407
322 - (NSButton*)connectButton { 408 - (NSButton*)connectButton {
(...skipping 13 matching lines...) Expand all
336 // no devices, so the number of rows is always at least 1. 422 // no devices, so the number of rows is always at least 1.
337 return std::max(static_cast<NSInteger>(chooserController_->NumOptions()), 423 return std::max(static_cast<NSInteger>(chooserController_->NumOptions()),
338 static_cast<NSInteger>(1)); 424 static_cast<NSInteger>(1));
339 } 425 }
340 426
341 - (NSString*)optionAtIndex:(NSInteger)index { 427 - (NSString*)optionAtIndex:(NSInteger)index {
342 NSInteger numOptions = 428 NSInteger numOptions =
343 static_cast<NSInteger>(chooserController_->NumOptions()); 429 static_cast<NSInteger>(chooserController_->NumOptions());
344 if (numOptions == 0) { 430 if (numOptions == 0) {
345 DCHECK_EQ(0, index); 431 DCHECK_EQ(0, index);
346 return l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT); 432 return base::SysUTF16ToNSString(chooserController_->GetNoOptionsText());
347 } 433 }
348 434
349 DCHECK_GE(index, 0); 435 DCHECK_GE(index, 0);
350 DCHECK_LT(index, numOptions); 436 DCHECK_LT(index, numOptions);
351 437
352 return base::SysUTF16ToNSString( 438 return base::SysUTF16ToNSString(
353 chooserController_->GetOption(static_cast<size_t>(index))); 439 chooserController_->GetOption(static_cast<size_t>(index)));
354 } 440 }
355 441
356 - (void)updateTableView { 442 - (void)updateTableView {
357 tableViewController_->UpdateTableView(); 443 chooserContentViewController_->UpdateTableView();
358 } 444 }
359 445
360 - (void)accept { 446 - (void)accept {
361 chooserController_->Select([tableView_ selectedRow]); 447 chooserController_->Select([tableView_ selectedRow]);
362 } 448 }
363 449
364 - (void)cancel { 450 - (void)cancel {
365 chooserController_->Cancel(); 451 chooserController_->Cancel();
366 } 452 }
367 453
368 - (void)close { 454 - (void)close {
369 chooserController_->Close(); 455 chooserController_->Close();
370 } 456 }
371 457
458 - (void)onRescan:(id)sender {
459 chooserController_->RefreshOptions();
460 }
461
372 - (void)onHelpPressed:(id)sender { 462 - (void)onHelpPressed:(id)sender {
373 chooserController_->OpenHelpCenterUrl(); 463 chooserController_->OpenHelpCenterUrl();
374 } 464 }
375 465
376 @end 466 @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