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

Unified Diff: ash/system/web_notification/web_notification_tray.cc

Issue 14366014: Places the unread count in the middle of web notification tray button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/system/web_notification/web_notification_tray.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/web_notification/web_notification_tray.cc
diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc
index 9c2aa04ba0342e5c9be8af569c5c60793de9a6a4..7931a037e668aa7d5a6d5bc0940217ebdb6a27d6 100644
--- a/ash/system/web_notification/web_notification_tray.cc
+++ b/ash/system/web_notification/web_notification_tray.cc
@@ -12,6 +12,9 @@
#include "ash/system/tray/tray_background_view.h"
#include "ash/system/tray/tray_bubble_wrapper.h"
#include "ash/system/tray/tray_constants.h"
+#include "ash/system/tray/tray_views.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
#include "grit/ash_resources.h"
#include "grit/ui_strings.h"
#include "ui/aura/root_window.h"
@@ -27,6 +30,7 @@
#include "ui/message_center/views/message_popup_collection.h"
#include "ui/views/bubble/tray_bubble_view.h"
#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/label.h"
#include "ui/views/controls/menu/menu_runner.h"
#if defined(OS_CHROMEOS)
@@ -44,8 +48,14 @@ MessageCenterTrayDelegate* CreateMessageCenterTray() {
#endif // defined(OS_CHROMEOS)
namespace ash {
-
namespace internal {
+namespace {
+
+// The text cannot be placed in the middle of the button vertically. This
+// constant is used to modify the vertical position of the text.
+const int kUnreadLabelBottomOffset = 6;
+
+}
// Class to initialize and manage the WebNotificationBubble and
// TrayBubbleWrapper instances for a bubble.
@@ -80,6 +90,69 @@ class WebNotificationBubbleWrapper {
private:
scoped_ptr<message_center::MessageBubbleBase> bubble_;
scoped_ptr<internal::TrayBubbleWrapper> bubble_wrapper_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebNotificationBubbleWrapper);
+};
+
+class WebNotificationButton : public views::ImageButton {
+ public:
+ WebNotificationButton(views::ButtonListener* listener)
+ : views::ImageButton(listener),
+ unread_label_(NULL) {
+ }
+
+ void SetUnreadCount(int unread_count) {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (unread_count == 0) {
+ SetImage(views::CustomButton::STATE_NORMAL, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_NORMAL));
+ SetImage(views::CustomButton::STATE_HOVERED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_HOVER));
+ SetImage(views::CustomButton::STATE_PRESSED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_PRESSED));
+
+ if (unread_label_) {
+ delete unread_label_;
+ unread_label_ = NULL;
+ }
+ } else {
+ SetImage(views::CustomButton::STATE_NORMAL, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_NORMAL));
+ SetImage(views::CustomButton::STATE_HOVERED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_HOVER));
+ SetImage(views::CustomButton::STATE_PRESSED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_PRESSED));
+
+ string16 text((unread_count > 9) ?
+ UTF8ToUTF16("9+") : base::IntToString16(unread_count));
+ if (unread_label_) {
+ unread_label_->SetText(text);
+ } else {
+ unread_label_ = new views::Label(text);
+ SetupLabelForTray(unread_label_);
+ AddChildView(unread_label_);
+ }
+ }
+ InvalidateLayout();
+ SchedulePaint();
+ }
+
+ protected:
+ // Overridden from views::ImageButton:
+ virtual void Layout() OVERRIDE {
+ views::ImageButton::Layout();
+ if (unread_label_) {
+ gfx::Rect parent_bounds(bounds());
+ parent_bounds.set_height(
+ parent_bounds.height() - kUnreadLabelBottomOffset);
+ unread_label_->SetBoundsRect(parent_bounds);
+ }
+ }
+
+ private:
+ views::Label* unread_label_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebNotificationButton);
};
} // namespace internal
@@ -89,7 +162,7 @@ WebNotificationTray::WebNotificationTray(
: TrayBackgroundView(status_area_widget),
button_(NULL),
show_message_center_on_unlock_(false) {
- button_ = new views::ImageButton(this);
+ button_ = new internal::WebNotificationButton(this);
button_->set_triggerable_event_flags(
ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON);
tray_container()->AddChildView(button_);
@@ -377,24 +450,9 @@ void WebNotificationTray::ButtonPressed(views::Button* sender,
}
void WebNotificationTray::OnMessageCenterTrayChanged() {
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
message_center::MessageCenter* message_center =
message_center_tray_->message_center();
- if (message_center->UnreadNotificationCount() > 0) {
- button_->SetImage(views::CustomButton::STATE_NORMAL, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_NORMAL));
- button_->SetImage(views::CustomButton::STATE_HOVERED, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_HOVER));
- button_->SetImage(views::CustomButton::STATE_PRESSED, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_PRESSED));
- } else {
- button_->SetImage(views::CustomButton::STATE_NORMAL, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_NORMAL));
- button_->SetImage(views::CustomButton::STATE_HOVERED, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_HOVER));
- button_->SetImage(views::CustomButton::STATE_PRESSED, rb.GetImageSkiaNamed(
- IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_PRESSED));
- }
+ button_->SetUnreadCount(message_center->UnreadNotificationCount());
if (IsMessageCenterBubbleVisible())
button_->SetState(views::CustomButton::STATE_PRESSED);
else
« no previous file with comments | « ash/system/web_notification/web_notification_tray.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698