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

Side by Side Diff: ui/message_center/cocoa/tray_view_controller.mm

Issue 142413005: Add an empty message to the notification center. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removes views changes for now. Created 6 years, 10 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) 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698