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

Unified Diff: ui/message_center/message_view_multiple.cc

Issue 11410008: Created initial multi-item notification view (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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
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..dfb774f26ec895b17080ab9902d6f66d7abd4497
--- /dev/null
+++ b/ui/message_center/message_view_multiple.cc
@@ -0,0 +1,141 @@
+// 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 {
+
+typedef std::vector<NotificationList::NotificationItem> NotificationItems;
+
+const SkColor kNotificationColor = SkColorSetRGB(0xfe, 0xfe, 0xfe);
+const SkColor kNotificationReadColor = SkColorSetRGB(0xfa, 0xfa, 0xfa);
+
+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_);
+
+ // TODO(dharcourt): Get these to come from the API call.
+ // TODO(dharcourt): Figure out if there's a simpler way to provide a string16
+ // constant than UTF8ToUTF16(const char *).
+ notification_.items = new NotificationItems();
+ notification_.items->push_back(NotificationList::NotificationItem(
+ UTF8ToUTF16("Brett Boe"),
+ UTF8ToUTF16("This is an important message!")));
+ notification_.items->push_back(NotificationList::NotificationItem(
+ UTF8ToUTF16("Carla Coe"),
+ UTF8ToUTF16("Just took a look at the proposal")));
+ notification_.items->push_back(NotificationList::NotificationItem(
+ UTF8ToUTF16("Donna Doe"),
+ UTF8ToUTF16("I see that you went to the conference")));
+ notification_.items->push_back(NotificationList::NotificationItem(
+ UTF8ToUTF16("Frank Foe"),
+ UTF8ToUTF16("I ate Harry's sandwich!")));
+ notification_.items->push_back(NotificationList::NotificationItem(
+ UTF8ToUTF16("Grace Goe"),
+ UTF8ToUTF16("I saw Frank steal a sandwich :-)")));
+
+ SkColor bg_color = notification_.is_read ?
+ kNotificationReadColor : kNotificationColor;
+ set_background(views::Background::CreateSolidBackground(bg_color));
+
+ // TODO(dharcourt): If possible, use GridLayout fill functionality to make the
+ // 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 + 0); // + notification_.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 (NotificationItems::const_iterator i = notification_.items->begin();
+ i != notification_.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

Powered by Google App Engine
This is Rietveld 408576698