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

Side by Side Diff: chrome/browser/cocoa/infobar_controller.mm

Issue 3127009: Convert infobar APIs to UTF-16. (Closed)
Patch Set: works Created 10 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #include "base/logging.h" // for NOTREACHED() 7 #include "base/logging.h" // for NOTREACHED()
8 #include "base/mac_util.h" 8 #include "base/mac_util.h"
9 #include "base/sys_string_conversions.h" 9 #include "base/sys_string_conversions.h"
10 #import "chrome/browser/cocoa/animatable_view.h" 10 #import "chrome/browser/cocoa/animatable_view.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 @implementation AlertInfoBarController 337 @implementation AlertInfoBarController
338 338
339 // Alert infobars have a text message. 339 // Alert infobars have a text message.
340 - (void)addAdditionalControls { 340 - (void)addAdditionalControls {
341 // No buttons. 341 // No buttons.
342 [self removeButtons]; 342 [self removeButtons];
343 343
344 // Insert the text. 344 // Insert the text.
345 AlertInfoBarDelegate* delegate = delegate_->AsAlertInfoBarDelegate(); 345 AlertInfoBarDelegate* delegate = delegate_->AsAlertInfoBarDelegate();
346 DCHECK(delegate); 346 DCHECK(delegate);
347 [self setLabelToMessage:base::SysWideToNSString(delegate->GetMessageText())]; 347 [self setLabelToMessage:base::SysUTF16ToNSString(delegate->GetMessageText())];
348 } 348 }
349 349
350 @end 350 @end
351 351
352 352
353 ///////////////////////////////////////////////////////////////////////// 353 /////////////////////////////////////////////////////////////////////////
354 // LinkInfoBarController implementation 354 // LinkInfoBarController implementation
355 355
356 @implementation LinkInfoBarController 356 @implementation LinkInfoBarController
357 357
358 // Link infobars have a text message, of which part is linkified. We 358 // Link infobars have a text message, of which part is linkified. We
359 // use an NSAttributedString to display styled text, and we set a 359 // use an NSAttributedString to display styled text, and we set a
360 // NSLink attribute on the hyperlink portion of the message. Infobars 360 // NSLink attribute on the hyperlink portion of the message. Infobars
361 // use a custom NSTextField subclass, which allows us to override 361 // use a custom NSTextField subclass, which allows us to override
362 // textView:clickedOnLink:atIndex: and intercept clicks. 362 // textView:clickedOnLink:atIndex: and intercept clicks.
363 // 363 //
364 - (void)addAdditionalControls { 364 - (void)addAdditionalControls {
365 // No buttons. 365 // No buttons.
366 [self removeButtons]; 366 [self removeButtons];
367 367
368 LinkInfoBarDelegate* delegate = delegate_->AsLinkInfoBarDelegate(); 368 LinkInfoBarDelegate* delegate = delegate_->AsLinkInfoBarDelegate();
369 DCHECK(delegate); 369 DCHECK(delegate);
370 size_t offset = std::wstring::npos; 370 size_t offset = std::wstring::npos;
371 std::wstring message = delegate->GetMessageTextWithOffset(&offset); 371 string16 message = delegate->GetMessageTextWithOffset(&offset);
372 [self setLabelToMessage:base::SysWideToNSString(message) 372 [self setLabelToMessage:base::SysUTF16ToNSString(message)
373 withLink:base::SysWideToNSString(delegate->GetLinkText()) 373 withLink:base::SysUTF16ToNSString(delegate->GetLinkText())
374 atOffset:offset]; 374 atOffset:offset];
375 } 375 }
376 376
377 // Called when someone clicks on the link in the infobar. This method 377 // Called when someone clicks on the link in the infobar. This method
378 // is called by the InfobarTextField on its delegate (the 378 // is called by the InfobarTextField on its delegate (the
379 // LinkInfoBarController). 379 // LinkInfoBarController).
380 - (void)linkClicked { 380 - (void)linkClicked {
381 WindowOpenDisposition disposition = 381 WindowOpenDisposition disposition =
382 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); 382 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
383 if (delegate_ && delegate_->AsLinkInfoBarDelegate()->LinkClicked(disposition)) 383 if (delegate_ && delegate_->AsLinkInfoBarDelegate()->LinkClicked(disposition))
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 << "Cancel button expected to be on the right of the Ok button in nib"; 419 << "Cancel button expected to be on the right of the Ok button in nib";
420 420
421 CGFloat rightEdge = NSMaxX(cancelButtonFrame); 421 CGFloat rightEdge = NSMaxX(cancelButtonFrame);
422 CGFloat spaceBetweenButtons = 422 CGFloat spaceBetweenButtons =
423 NSMinX(cancelButtonFrame) - NSMaxX(okButtonFrame); 423 NSMinX(cancelButtonFrame) - NSMaxX(okButtonFrame);
424 CGFloat spaceBeforeButtons = 424 CGFloat spaceBeforeButtons =
425 NSMinX(okButtonFrame) - NSMaxX([label_.get() frame]); 425 NSMinX(okButtonFrame) - NSMaxX([label_.get() frame]);
426 426
427 // Update and position the Cancel button if needed. Otherwise, hide it. 427 // Update and position the Cancel button if needed. Otherwise, hide it.
428 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { 428 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) {
429 [cancelButton_ setTitle:base::SysWideToNSString( 429 [cancelButton_ setTitle:base::SysUTF16ToNSString(
430 delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL))]; 430 delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL))];
431 [GTMUILocalizerAndLayoutTweaker sizeToFitView:cancelButton_]; 431 [GTMUILocalizerAndLayoutTweaker sizeToFitView:cancelButton_];
432 cancelButtonFrame = [cancelButton_ frame]; 432 cancelButtonFrame = [cancelButton_ frame];
433 433
434 // Position the cancel button to the left of the Close button. 434 // Position the cancel button to the left of the Close button.
435 cancelButtonFrame.origin.x = rightEdge - cancelButtonFrame.size.width; 435 cancelButtonFrame.origin.x = rightEdge - cancelButtonFrame.size.width;
436 [cancelButton_ setFrame:cancelButtonFrame]; 436 [cancelButton_ setFrame:cancelButtonFrame];
437 437
438 // Update the rightEdge 438 // Update the rightEdge
439 rightEdge = NSMinX(cancelButtonFrame); 439 rightEdge = NSMinX(cancelButtonFrame);
440 } else { 440 } else {
441 [cancelButton_ removeFromSuperview]; 441 [cancelButton_ removeFromSuperview];
442 } 442 }
443 443
444 // Update and position the OK button if needed. Otherwise, hide it. 444 // Update and position the OK button if needed. Otherwise, hide it.
445 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_OK) { 445 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_OK) {
446 [okButton_ setTitle:base::SysWideToNSString( 446 [okButton_ setTitle:base::SysUTF16ToNSString(
447 delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK))]; 447 delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK))];
448 [GTMUILocalizerAndLayoutTweaker sizeToFitView:okButton_]; 448 [GTMUILocalizerAndLayoutTweaker sizeToFitView:okButton_];
449 okButtonFrame = [okButton_ frame]; 449 okButtonFrame = [okButton_ frame];
450 450
451 // If we had a Cancel button, leave space between the buttons. 451 // If we had a Cancel button, leave space between the buttons.
452 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { 452 if (visibleButtons & ConfirmInfoBarDelegate::BUTTON_CANCEL) {
453 rightEdge -= spaceBetweenButtons; 453 rightEdge -= spaceBetweenButtons;
454 } 454 }
455 455
456 // Position the OK button on our current right edge. 456 // Position the OK button on our current right edge.
(...skipping 13 matching lines...) Expand all
470 rightEdge -= spaceBeforeButtons; 470 rightEdge -= spaceBeforeButtons;
471 } 471 }
472 472
473 NSRect frame = [label_.get() frame]; 473 NSRect frame = [label_.get() frame];
474 DCHECK(rightEdge > NSMinX(frame)) 474 DCHECK(rightEdge > NSMinX(frame))
475 << "Need to make the xib larger to handle buttons with text this long"; 475 << "Need to make the xib larger to handle buttons with text this long";
476 frame.size.width = rightEdge - NSMinX(frame); 476 frame.size.width = rightEdge - NSMinX(frame);
477 [label_.get() setFrame:frame]; 477 [label_.get() setFrame:frame];
478 478
479 // Set the text and link. 479 // Set the text and link.
480 NSString* message = base::SysWideToNSString(delegate->GetMessageText()); 480 NSString* message = base::SysUTF16ToNSString(delegate->GetMessageText());
481 std::wstring link = delegate->GetLinkText(); 481 string16 link = delegate->GetLinkText();
482 if (link.empty()) { 482 if (link.empty()) {
483 // Simple case: no link, so just set the message directly. 483 // Simple case: no link, so just set the message directly.
484 [self setLabelToMessage:message]; 484 [self setLabelToMessage:message];
485 } else { 485 } else {
486 // Inserting the link unintentionally causes the text to have a slightly 486 // Inserting the link unintentionally causes the text to have a slightly
487 // different result to the simple case above: text is truncated on word 487 // different result to the simple case above: text is truncated on word
488 // boundaries (if needed) rather than elided with ellipses. 488 // boundaries (if needed) rather than elided with ellipses.
489 489
490 // Add spacing between the label and the link. 490 // Add spacing between the label and the link.
491 message = [message stringByAppendingString:@" "]; 491 message = [message stringByAppendingString:@" "];
492 [self setLabelToMessage:message 492 [self setLabelToMessage:message
493 withLink:base::SysWideToNSString(link) 493 withLink:base::SysUTF16ToNSString(link)
494 atOffset:[message length]]; 494 atOffset:[message length]];
495 } 495 }
496 } 496 }
497 497
498 // Called when someone clicks on the link in the infobar. This method 498 // Called when someone clicks on the link in the infobar. This method
499 // is called by the InfobarTextField on its delegate (the 499 // is called by the InfobarTextField on its delegate (the
500 // LinkInfoBarController). 500 // LinkInfoBarController).
501 - (void)linkClicked { 501 - (void)linkClicked {
502 WindowOpenDisposition disposition = 502 WindowOpenDisposition disposition =
503 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); 503 event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
(...skipping 18 matching lines...) Expand all
522 LinkInfoBarController* controller = 522 LinkInfoBarController* controller =
523 [[LinkInfoBarController alloc] initWithDelegate:this]; 523 [[LinkInfoBarController alloc] initWithDelegate:this];
524 return new InfoBar(controller); 524 return new InfoBar(controller);
525 } 525 }
526 526
527 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() { 527 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar() {
528 ConfirmInfoBarController* controller = 528 ConfirmInfoBarController* controller =
529 [[ConfirmInfoBarController alloc] initWithDelegate:this]; 529 [[ConfirmInfoBarController alloc] initWithDelegate:this];
530 return new InfoBar(controller); 530 return new InfoBar(controller);
531 } 531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698