 Chromium Code Reviews
 Chromium Code Reviews Issue 142413005:
  Add an empty message to the notification center.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 142413005:
  Add an empty message to the notification center.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| OLD | NEW | 
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "ui/message_center/cocoa/tray_view_controller.h" | 5 #import "ui/message_center/cocoa/tray_view_controller.h" | 
| 6 | 6 | 
| 7 #include <cmath> | 7 #include <cmath> | 
| 8 | 8 | 
| 9 #include "base/mac/scoped_nsautorelease_pool.h" | 9 #include "base/mac/scoped_nsautorelease_pool.h" | 
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" | 
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 364 } | 364 } | 
| 365 | 365 | 
| 366 - (HoverImageButton*)pauseButton { | 366 - (HoverImageButton*)pauseButton { | 
| 367 return pauseButton_.get(); | 367 return pauseButton_.get(); | 
| 368 } | 368 } | 
| 369 | 369 | 
| 370 - (HoverImageButton*)clearAllButton { | 370 - (HoverImageButton*)clearAllButton { | 
| 371 return clearAllButton_.get(); | 371 return clearAllButton_.get(); | 
| 372 } | 372 } | 
| 373 | 373 | 
| 374 - (NSTextField*)emptyDescription { | |
| 375 return emptyDescription_.get(); | |
| 376 } | |
| 377 | |
| 378 - (NSBox*)divider { | |
| 379 return divider_.get(); | |
| 380 } | |
| 381 | |
| 374 - (void)setAnimationDuration:(NSTimeInterval)duration { | 382 - (void)setAnimationDuration:(NSTimeInterval)duration { | 
| 375 animationDuration_ = duration; | 383 animationDuration_ = duration; | 
| 376 } | 384 } | 
| 377 | 385 | 
| 378 - (void)setAnimateClearingNextNotificationDelay:(NSTimeInterval)delay { | 386 - (void)setAnimateClearingNextNotificationDelay:(NSTimeInterval)delay { | 
| 379 animateClearingNextNotificationDelay_ = delay; | 387 animateClearingNextNotificationDelay_ = delay; | 
| 380 } | 388 } | 
| 381 | 389 | 
| 382 - (void)setAnimationEndedCallback: | 390 - (void)setAnimationEndedCallback: | 
| 383 (message_center::TrayAnimationEndedCallback)callback { | 391 (message_center::TrayAnimationEndedCallback)callback { | 
| 384 testingAnimationEndedCallback_.reset(Block_copy(callback)); | 392 testingAnimationEndedCallback_.reset(Block_copy(callback)); | 
| 385 } | 393 } | 
| 386 | 394 | 
| 387 // Private ///////////////////////////////////////////////////////////////////// | 395 // Private ///////////////////////////////////////////////////////////////////// | 
| 388 | 396 | 
| 389 - (void)layoutControlArea { | 397 - (void)layoutControlArea { | 
| 390 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 398 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 
| 391 NSView* view = [self view]; | 399 NSView* view = [self view]; | 
| 392 | 400 | 
| 401 auto configureLabel = ^(NSTextField* textField) { | |
| 402 [textField setAutoresizingMask:NSViewMinYMargin]; | |
| 
Robert Sesek
2014/01/29 16:30:39
nit: blocks are indented 4 spaces
 
dewittj
2014/01/29 21:52:25
Done.
 | |
| 403 [textField setBezeled:NO]; | |
| 404 [textField setBordered:NO]; | |
| 405 [textField setDrawsBackground:NO]; | |
| 406 [textField setEditable:NO]; | |
| 407 [textField setSelectable:NO]; | |
| 408 }; | |
| 409 | |
| 393 // Create the "Notifications" label at the top of the tray. | 410 // Create the "Notifications" label at the top of the tray. | 
| 394 NSFont* font = [NSFont labelFontOfSize:message_center::kTitleFontSize]; | 411 NSFont* font = [NSFont labelFontOfSize:message_center::kTitleFontSize]; | 
| 395 title_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]); | 412 title_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]); | 
| 396 [title_ setAutoresizingMask:NSViewMinYMargin]; | 413 configureLabel(title_); | 
| 397 [title_ setBezeled:NO]; | 414 | 
| 398 [title_ setBordered:NO]; | |
| 399 [title_ setDrawsBackground:NO]; | |
| 400 [title_ setEditable:NO]; | |
| 401 [title_ setFont:font]; | 415 [title_ setFont:font]; | 
| 402 [title_ setSelectable:NO]; | |
| 403 [title_ setStringValue: | 416 [title_ setStringValue: | 
| 404 l10n_util::GetNSString(IDS_MESSAGE_CENTER_FOOTER_TITLE)]; | 417 l10n_util::GetNSString(IDS_MESSAGE_CENTER_FOOTER_TITLE)]; | 
| 405 [title_ setTextColor:gfx::SkColorToCalibratedNSColor( | 418 [title_ setTextColor:gfx::SkColorToCalibratedNSColor( | 
| 406 message_center::kRegularTextColor)]; | 419 message_center::kRegularTextColor)]; | 
| 407 [title_ sizeToFit]; | 420 [title_ sizeToFit]; | 
| 408 | 421 | 
| 409 NSRect titleFrame = [title_ frame]; | 422 NSRect titleFrame = [title_ frame]; | 
| 410 titleFrame.origin.x = message_center::kMarginBetweenItems; | 423 titleFrame.origin.x = message_center::kMarginBetweenItems; | 
| 411 titleFrame.origin.y = kControlAreaHeight/2 - NSMidY(titleFrame); | 424 titleFrame.origin.y = kControlAreaHeight/2 - NSMidY(titleFrame); | 
| 412 [title_ setFrame:titleFrame]; | 425 [title_ setFrame:titleFrame]; | 
| (...skipping 25 matching lines...) Expand all Loading... | |
| 438 [backButton_ setHidden:YES]; | 451 [backButton_ setHidden:YES]; | 
| 439 [backButton_ setKeyEquivalent:@"\e"]; | 452 [backButton_ setKeyEquivalent:@"\e"]; | 
| 440 [backButton_ setToolTip:l10n_util::GetNSString( | 453 [backButton_ setToolTip:l10n_util::GetNSString( | 
| 441 IDS_MESSAGE_CENTER_SETTINGS_GO_BACK_BUTTON_TOOLTIP)]; | 454 IDS_MESSAGE_CENTER_SETTINGS_GO_BACK_BUTTON_TOOLTIP)]; | 
| 442 [[backButton_ cell] | 455 [[backButton_ cell] | 
| 443 accessibilitySetOverrideValue:[backButton_ toolTip] | 456 accessibilitySetOverrideValue:[backButton_ toolTip] | 
| 444 forAttribute:NSAccessibilityDescriptionAttribute]; | 457 forAttribute:NSAccessibilityDescriptionAttribute]; | 
| 445 [[self view] addSubview:backButton_]; | 458 [[self view] addSubview:backButton_]; | 
| 446 | 459 | 
| 447 // Create the divider line between the control area and the notifications. | 460 // Create the divider line between the control area and the notifications. | 
| 448 base::scoped_nsobject<NSBox> divider( | 461 divider_.reset( | 
| 449 [[NSBox alloc] initWithFrame:NSMakeRect(0, 0, NSWidth([view frame]), 1)]); | 462 [[NSBox alloc] initWithFrame:NSMakeRect(0, 0, NSWidth([view frame]), 1)]); | 
| 450 [divider setAutoresizingMask:NSViewMinYMargin]; | 463 [divider_ setAutoresizingMask:NSViewMinYMargin]; | 
| 451 [divider setBorderType:NSNoBorder]; | 464 [divider_ setBorderType:NSNoBorder]; | 
| 452 [divider setBoxType:NSBoxCustom]; | 465 [divider_ setBoxType:NSBoxCustom]; | 
| 453 [divider setContentViewMargins:NSZeroSize]; | 466 [divider_ setContentViewMargins:NSZeroSize]; | 
| 454 [divider setFillColor:gfx::SkColorToCalibratedNSColor( | 467 [divider_ setFillColor:gfx::SkColorToCalibratedNSColor( | 
| 455 message_center::kFooterDelimiterColor)]; | 468 message_center::kFooterDelimiterColor)]; | 
| 456 [divider setTitlePosition:NSNoTitle]; | 469 [divider_ setTitlePosition:NSNoTitle]; | 
| 457 [view addSubview:divider]; | 470 [view addSubview:divider_]; | 
| 471 | |
| 458 | 472 | 
| 459 auto getButtonFrame = ^NSRect(CGFloat maxX, NSImage* image) { | 473 auto getButtonFrame = ^NSRect(CGFloat maxX, NSImage* image) { | 
| 460 NSSize size = [image size]; | 474 NSSize size = [image size]; | 
| 461 return NSMakeRect( | 475 return NSMakeRect( | 
| 462 maxX - size.width, | 476 maxX - size.width, | 
| 463 kControlAreaHeight/2 - size.height/2, | 477 kControlAreaHeight/2 - size.height/2, | 
| 464 size.width, | 478 size.width, | 
| 465 size.height); | 479 size.height); | 
| 466 }; | 480 }; | 
| 467 | 481 | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 517 [pauseButton_ setHoverImage: rb.GetNativeImageNamed( | 531 [pauseButton_ setHoverImage: rb.GetNativeImageNamed( | 
| 518 IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER).ToNSImage()]; | 532 IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER).ToNSImage()]; | 
| 519 [pauseButton_ setToolTip: | 533 [pauseButton_ setToolTip: | 
| 520 l10n_util::GetNSString(IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP)]; | 534 l10n_util::GetNSString(IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP)]; | 
| 521 [[pauseButton_ cell] | 535 [[pauseButton_ cell] | 
| 522 accessibilitySetOverrideValue:[pauseButton_ toolTip] | 536 accessibilitySetOverrideValue:[pauseButton_ toolTip] | 
| 523 forAttribute:NSAccessibilityDescriptionAttribute]; | 537 forAttribute:NSAccessibilityDescriptionAttribute]; | 
| 524 [pauseButton_ setAction:@selector(toggleQuietMode:)]; | 538 [pauseButton_ setAction:@selector(toggleQuietMode:)]; | 
| 525 configureButton(pauseButton_); | 539 configureButton(pauseButton_); | 
| 526 [view addSubview:pauseButton_]; | 540 [view addSubview:pauseButton_]; | 
| 541 | |
| 542 // Create the description field for the empty message center. Initially it is | |
| 543 // invisible. | |
| 544 emptyDescription_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]); | |
| 545 configureLabel(emptyDescription_); | |
| 546 | |
| 547 NSFont* smallFont = | |
| 548 [NSFont labelFontOfSize:message_center::kEmptyCenterFontSize]; | |
| 549 [emptyDescription_ setFont:smallFont]; | |
| 550 [emptyDescription_ setStringValue: | |
| 551 l10n_util::GetNSString(IDS_MESSAGE_CENTER_NO_MESSAGES)]; | |
| 552 [emptyDescription_ setTextColor:gfx::SkColorToCalibratedNSColor( | |
| 553 message_center::kDimTextColor)]; | |
| 554 [emptyDescription_ sizeToFit]; | |
| 555 [emptyDescription_ setHidden:YES]; | |
| 556 | |
| 557 [view addSubview:emptyDescription_]; | |
| 527 } | 558 } | 
| 528 | 559 | 
| 529 - (void)updateTrayViewAndWindow { | 560 - (void)updateTrayViewAndWindow { | 
| 530 CGFloat scrollContentHeight = 0; | 561 CGFloat scrollContentHeight = message_center::kMinScrollViewHeight; | 
| 531 if ([notifications_ count]) { | 562 if ([notifications_ count]) { | 
| 563 [emptyDescription_ setHidden:YES]; | |
| 564 [scrollView_ setHidden:NO]; | |
| 565 [divider_ setHidden:NO]; | |
| 532 scrollContentHeight = NSMaxY([[[notifications_ lastObject] view] frame]) + | 566 scrollContentHeight = NSMaxY([[[notifications_ lastObject] view] frame]) + | 
| 533 message_center::kMarginBetweenItems;; | 567 message_center::kMarginBetweenItems;; | 
| 568 } else { | |
| 569 [emptyDescription_ setHidden:NO]; | |
| 570 [scrollView_ setHidden:YES]; | |
| 571 [divider_ setHidden:YES]; | |
| 572 | |
| 573 NSRect centeredFrame = [emptyDescription_ frame]; | |
| 574 NSPoint centeredOrigin = NSMakePoint( | |
| 575 floor((NSWidth([[self view] frame]) - NSWidth(centeredFrame))/2 + 0.5), | |
| 576 floor((scrollContentHeight - NSHeight(centeredFrame))/2 + 0.5)); | |
| 577 | |
| 578 centeredFrame.origin = centeredOrigin; | |
| 579 [emptyDescription_ setFrame:centeredFrame]; | |
| 534 } | 580 } | 
| 535 | 581 | 
| 536 // Resize the scroll view's content. | 582 // Resize the scroll view's content. | 
| 537 NSRect scrollViewFrame = [scrollView_ frame]; | 583 NSRect scrollViewFrame = [scrollView_ frame]; | 
| 538 NSRect documentFrame = [[scrollView_ documentView] frame]; | 584 NSRect documentFrame = [[scrollView_ documentView] frame]; | 
| 539 documentFrame.size.width = NSWidth(scrollViewFrame); | 585 documentFrame.size.width = NSWidth(scrollViewFrame); | 
| 540 documentFrame.size.height = scrollContentHeight; | 586 documentFrame.size.height = scrollContentHeight; | 
| 541 [[scrollView_ documentView] setFrame:documentFrame]; | 587 [[scrollView_ documentView] setFrame:documentFrame]; | 
| 542 | 588 | 
| 543 // Resize the container view. | 589 // Resize the container view. | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 759 [pauseButton_ setDefaultImage: rb.GetNativeImageNamed( | 805 [pauseButton_ setDefaultImage: rb.GetNativeImageNamed( | 
| 760 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED).ToNSImage()]; | 806 IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED).ToNSImage()]; | 
| 761 } else { | 807 } else { | 
| 762 [pauseButton_ setTrackingEnabled:YES]; | 808 [pauseButton_ setTrackingEnabled:YES]; | 
| 763 [pauseButton_ setDefaultImage: | 809 [pauseButton_ setDefaultImage: | 
| 764 rb.GetNativeImageNamed(IDR_NOTIFICATION_DO_NOT_DISTURB).ToNSImage()]; | 810 rb.GetNativeImageNamed(IDR_NOTIFICATION_DO_NOT_DISTURB).ToNSImage()]; | 
| 765 } | 811 } | 
| 766 } | 812 } | 
| 767 | 813 | 
| 768 @end | 814 @end | 
| OLD | NEW |