Index: ui/message_center/message_view_multiple.cc |
diff --git a/ui/message_center/message_view_multiple.cc b/ui/message_center/message_view_multiple.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2a60f6fc86048c9d9f7d468e800b370a4f6d8dac |
--- /dev/null |
+++ b/ui/message_center/message_view_multiple.cc |
@@ -0,0 +1,153 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/message_center/message_view_multiple.h" |
+ |
+#include "base/utf_string_conversions.h" |
+#include "grit/ui_resources.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/views/controls/button/image_button.h" |
+#include "ui/views/controls/image_view.h" |
+#include "ui/views/controls/label.h" |
+#include "ui/views/layout/grid_layout.h" |
+ |
+namespace message_center { |
+ |
+const SkColor kNotificationColor = SkColorSetRGB(0xfe, 0xfe, 0xfe); |
+const SkColor kNotificationReadColor = SkColorSetRGB(0xfa, 0xfa, 0xfa); |
+ |
+// Temporarily here, this will later get merged into the Notification class. |
miket_OOO
2012/11/15 18:35:32
Use TODO format.
Can you do this work now, rather
dharcourt
2012/11/16 02:37:00
Done.
|
+struct MessageViewMultiple::NotificationItem { |
+ string16 title; |
+ string16 details; |
+ NotificationItem(string16 title, string16 details) |
+ : title(title), |
+ details(details) { |
benwells
2012/11/15 22:27:08
drive by suggestion: you can use {} on one line he
dharcourt
2012/11/16 02:37:00
Thanks for the review & the suggestion.
|
+ } |
+}; |
+ |
+MessageViewMultiple::MessageViewMultiple( |
+ NotificationList::Delegate* list_delegate, |
+ const NotificationList::Notification& notification) |
+ : MessageView(list_delegate, notification) { |
+} |
+ |
+MessageViewMultiple::MessageViewMultiple() { |
+} |
+ |
+MessageViewMultiple::~MessageViewMultiple() { |
+} |
+ |
+// TODO(dharcourt): Make this a subclass of BaseFormatView or of a |
+// BaseFormatView superclass and leverage that class' SetUpView(). |
+void MessageViewMultiple::SetUpView() { |
+ DCHECK(close_button_); |
+ |
+ // Create some bogus notification items for now. Later they'll come from the |
+ // Notification object. |
+ // TODO(dharcourt): Figure out if there's a simpler to provide a string16 |
+ // constant than UTF8ToUTF16(const char *). |
+ std::vector<NotificationItem> items; |
+ items.push_back(NotificationItem( |
+ UTF8ToUTF16("Andy Rubin"), |
+ UTF8ToUTF16("This is an imporant message!"))); |
miket_OOO
2012/11/15 18:35:32
spelling
|
+ items.push_back(NotificationItem( |
+ UTF8ToUTF16("James Bergen Plummer"), |
+ UTF8ToUTF16("Just took a look at the proposal"))); |
+ items.push_back(NotificationItem( |
+ UTF8ToUTF16("Adam Cohen"), |
+ UTF8ToUTF16("I see that you went to the conference"))); |
+ items.push_back(NotificationItem( |
+ UTF8ToUTF16("Mike Jurka"), |
+ UTF8ToUTF16("I ate Cleron's sandwhich!"))); |
miket_OOO
2012/11/15 18:35:32
spelling
dharcourt
2012/11/16 02:37:00
Funny. The mockup had a typo which I kepth even th
|
+ items.push_back(NotificationItem( |
+ UTF8ToUTF16("Winson Chung"), |
+ UTF8ToUTF16("I saw mike steal a sandwhich :-)"))); |
+ |
+ SkColor bg_color = notification_.is_read ? |
+ kNotificationReadColor : kNotificationColor; |
+ set_background(views::Background::CreateSolidBackground(bg_color)); |
+ |
+ // TODO(dharcourt): If possible, us GridLayout fill functionality to make the |
miket_OOO
2012/11/15 18:35:32
spelling
dharcourt
2012/11/16 02:37:00
Done.
|
+ // message as wide as possible without reference to the kWebNotificationWidth. |
+ // TODO(dharcourt): Verify intended meaning of MessageView size constants. |
+ const int padding_width = kPaddingHorizontal / 2; |
+ const int message_width = kWebNotificationWidth - kWebNotificationIconSize - |
+ kWebNotificationButtonWidth - (padding_width * 3); |
+ |
+ views::GridLayout* layout = new views::GridLayout(this); |
+ SetLayoutManager(layout); |
+ |
+ // Three columns (icon, messages, close button) surrounded by padding. |
+ views::ColumnSet* columns = layout->AddColumnSet(0); |
+ columns->AddPaddingColumn(0, padding_width); |
+ columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING, |
+ 0, /* resize weight */ |
+ views::GridLayout::FIXED, |
+ kWebNotificationIconSize, kWebNotificationIconSize); |
+ columns->AddPaddingColumn(0, padding_width); |
+ columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, |
+ 100, /* resize weight */ |
+ views::GridLayout::FIXED, |
+ message_width, message_width); |
+ columns->AddPaddingColumn(0, padding_width); |
+ columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING, |
+ 0, /* resize weight */ |
+ views::GridLayout::FIXED, |
+ kWebNotificationButtonWidth, |
+ kWebNotificationButtonWidth); |
+ |
+ // First row has the icon, title, and close button after some top padding. |
+ layout->AddPaddingRow(0, kPaddingBetweenItems); |
+ layout->StartRow(0, 0); |
+ |
+ views::ImageView* icon = new views::ImageView; |
+ icon->SetImageSize( |
+ gfx::Size(kWebNotificationIconSize, kWebNotificationIconSize)); |
+ icon->SetImage(notification_.image); |
+ layout->AddView(icon, 1, 1 + items.size()); |
+ |
+ views::Label* title = new views::Label(notification_.title); |
+ title->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ title->SetFont(title->font().DeriveFont(0, gfx::Font::BOLD)); |
+ layout->AddView(title); |
+ |
+ close_button_ = new views::ImageButton(this); |
+ close_button_->SetImage( |
+ views::CustomButton::STATE_NORMAL, |
+ ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
+ IDR_MESSAGE_CLOSE)); |
+ close_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, |
+ views::ImageButton::ALIGN_MIDDLE); |
+ layout->AddView(close_button_); |
+ |
+ // One row for each notification item. |
+ for (std::vector<NotificationItem>::const_iterator i = items.begin(); |
+ i != items.end(); |
+ ++i) { |
+ views::Label* item_title = new views::Label(i->title); |
+ item_title->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ layout->StartRow(0,0); |
+ layout->SkipColumns(2); |
+ layout->AddView(item_title); |
+ // TODO(dharcourt): Item details. |
+ } |
+ |
+ // TODO(dharcourt): Add a horizontal line. |
+ |
+ // One row for the summary message. TODO(dharcourt): Make it optional. |
+ views::Label* message = new views::Label(notification_.message); |
+ message->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ message->SetMultiLine(true); |
+ layout->StartRow(0, 0); |
+ layout->SkipColumns(2); |
+ layout->AddView(message); |
+ |
+ // TODO(dharcourt): Add a second icon to the right of the summary message. |
+ |
+ // Bottom padding. |
+ layout->AddPaddingRow(0, kPaddingBetweenItems); |
+} |
+ |
+} // namespace message_center |