| 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
|
|
|