summaryrefslogtreecommitdiffstats
path: root/chromium/ui/message_center/views/message_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/message_center/views/message_view.cc')
-rw-r--r--chromium/ui/message_center/views/message_view.cc209
1 files changed, 63 insertions, 146 deletions
diff --git a/chromium/ui/message_center/views/message_view.cc b/chromium/ui/message_center/views/message_view.cc
index ccf1074b2e6..11ff5485f86 100644
--- a/chromium/ui/message_center/views/message_view.cc
+++ b/chromium/ui/message_center/views/message_view.cc
@@ -6,7 +6,7 @@
#include "grit/ui_resources.h"
#include "grit/ui_strings.h"
-#include "ui/base/accessibility/accessible_view_state.h"
+#include "ui/accessibility/ax_view_state.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/base/resource/resource_bundle.h"
@@ -14,15 +14,14 @@
#include "ui/gfx/canvas.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_style.h"
-#include "ui/message_center/message_center_util.h"
#include "ui/message_center/views/padded_button.h"
-#include "ui/views/context_menu_controller.h"
+#include "ui/views/background.h"
#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/controls/image_view.h"
#include "ui/views/controls/scroll_view.h"
+#include "ui/views/focus/focus_manager.h"
#include "ui/views/painter.h"
#include "ui/views/shadow_border.h"
-#include "ui/views/widget/widget.h"
namespace {
@@ -32,161 +31,48 @@ const int kCloseIconRightPadding = 5;
const int kShadowOffset = 1;
const int kShadowBlur = 4;
-// Menu constants
-const int kTogglePermissionCommand = 0;
-const int kShowSettingsCommand = 1;
-
-// A dropdown menu for notifications.
-class MenuModel : public ui::SimpleMenuModel,
- public ui::SimpleMenuModel::Delegate {
- public:
- MenuModel(message_center::MessageViewController* controller,
- message_center::NotifierId notifier_id,
- const string16& display_source);
- virtual ~MenuModel();
-
- // Overridden from ui::SimpleMenuModel::Delegate:
- virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE;
- virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
- virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) OVERRIDE;
- virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-
- private:
- message_center::MessageViewController* controller_;
- message_center::NotifierId notifier_id_;
- DISALLOW_COPY_AND_ASSIGN(MenuModel);
-};
-
-MenuModel::MenuModel(message_center::MessageViewController* controller,
- message_center::NotifierId notifier_id,
- const string16& display_source)
- : ui::SimpleMenuModel(this),
- controller_(controller),
- notifier_id_(notifier_id) {
- // Add 'disable notifications' menu item.
- if (!display_source.empty()) {
- AddItem(kTogglePermissionCommand,
- l10n_util::GetStringFUTF16(IDS_MESSAGE_CENTER_NOTIFIER_DISABLE,
- display_source));
- }
- // Add settings menu item.
- AddItem(kShowSettingsCommand,
- l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_SETTINGS));
-}
-
-MenuModel::~MenuModel() {
-}
-
-bool MenuModel::IsItemForCommandIdDynamic(int command_id) const {
- return false;
-}
-
-bool MenuModel::IsCommandIdChecked(int command_id) const {
- return false;
-}
-
-bool MenuModel::IsCommandIdEnabled(int command_id) const {
- return true;
-}
-
-bool MenuModel::GetAcceleratorForCommandId(int command_id,
- ui::Accelerator* accelerator) {
- return false;
-}
-
-void MenuModel::ExecuteCommand(int command_id, int event_flags) {
- switch (command_id) {
- case kTogglePermissionCommand:
- controller_->DisableNotificationsFromThisSource(notifier_id_);
- break;
- case kShowSettingsCommand:
- controller_->ShowNotifierSettingsBubble();
- break;
- default:
- NOTREACHED();
- }
-}
-
} // namespace
namespace message_center {
-class MessageViewContextMenuController : public views::ContextMenuController {
- public:
- MessageViewContextMenuController(MessageViewController* controller,
- const NotifierId& notifier_id,
- const string16& display_source);
- virtual ~MessageViewContextMenuController();
-
- protected:
- // Overridden from views::ContextMenuController:
- virtual void ShowContextMenuForView(views::View* source,
- const gfx::Point& point,
- ui::MenuSourceType source_type) OVERRIDE;
-
- MessageViewController* controller_; // Weak, owns us.
- NotifierId notifier_id_;
- string16 display_source_;
-};
-
-MessageViewContextMenuController::MessageViewContextMenuController(
- MessageViewController* controller,
- const NotifierId& notifier_id,
- const string16& display_source)
- : controller_(controller),
- notifier_id_(notifier_id),
- display_source_(display_source) {
-}
-
-MessageViewContextMenuController::~MessageViewContextMenuController() {
-}
-
-void MessageViewContextMenuController::ShowContextMenuForView(
- views::View* source,
- const gfx::Point& point,
- ui::MenuSourceType source_type) {
- MenuModel menu_model(controller_, notifier_id_, display_source_);
- if (menu_model.GetItemCount() == 0)
- return;
-
- views::MenuRunner menu_runner(&menu_model);
-
- ignore_result(menu_runner.RunMenuAt(
- source->GetWidget()->GetTopLevelWidget(),
- NULL,
- gfx::Rect(point, gfx::Size()),
- views::MenuItemView::TOPRIGHT,
- source_type,
- views::MenuRunner::HAS_MNEMONICS));
-}
-
MessageView::MessageView(MessageViewController* controller,
const std::string& notification_id,
const NotifierId& notifier_id,
- const string16& display_source)
+ const gfx::ImageSkia& small_image,
+ const base::string16& display_source)
: controller_(controller),
notification_id_(notification_id),
notifier_id_(notifier_id),
- context_menu_controller_(
- new MessageViewContextMenuController(controller,
- notifier_id,
- display_source)),
- scroller_(NULL) {
+ background_view_(NULL),
+ scroller_(NULL),
+ display_source_(display_source) {
SetFocusable(true);
- set_context_menu_controller(context_menu_controller_.get());
+
+ // Create the opaque background that's above the view's shadow.
+ background_view_ = new views::View();
+ background_view_->set_background(
+ views::Background::CreateSolidBackground(kNotificationBackgroundColor));
+ AddChildView(background_view_);
+
+ views::ImageView* small_image_view = new views::ImageView();
+ small_image_view->SetImage(small_image);
+ small_image_view->SetImageSize(gfx::Size(kSmallImageSize, kSmallImageSize));
+ // The small image view should be added to view hierarchy by the derived
+ // class. This ensures that it is on top of other views.
+ small_image_view->set_owned_by_client();
+ small_image_view_.reset(small_image_view);
PaddedButton *close = new PaddedButton(this);
close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding);
close->SetNormalImage(IDR_NOTIFICATION_CLOSE);
close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER);
close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED);
- close->set_owned_by_client();
close->set_animate_on_state_change(false);
close->SetAccessibleName(l10n_util::GetStringUTF16(
IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME));
+ // The close button should be added to view hierarchy by the derived class.
+ // This ensures that it is on top of other views.
+ close->set_owned_by_client();
close_button_.reset(close);
focus_painter_ = views::Painter::CreateSolidFocusPainter(
@@ -197,6 +83,11 @@ MessageView::MessageView(MessageViewController* controller,
MessageView::~MessageView() {
}
+void MessageView::UpdateWithNotification(const Notification& notification) {
+ small_image_view_->SetImage(notification.small_image().AsImageSkia());
+ display_source_ = notification.display_source();
+}
+
// static
gfx::Insets MessageView::GetShadowInsets() {
return gfx::Insets(kShadowBlur / 2 - kShadowOffset,
@@ -206,10 +97,11 @@ gfx::Insets MessageView::GetShadowInsets() {
}
void MessageView::CreateShadowBorder() {
- set_border(new views::ShadowBorder(kShadowBlur,
- message_center::kShadowColor,
- kShadowOffset, // Vertical offset.
- 0)); // Horizontal offset.
+ SetBorder(scoped_ptr<views::Border>(
+ new views::ShadowBorder(kShadowBlur,
+ message_center::kShadowColor,
+ kShadowOffset, // Vertical offset.
+ 0))); // Horizontal offset.
}
bool MessageView::IsCloseButtonFocused() {
@@ -221,8 +113,8 @@ void MessageView::RequestFocusOnCloseButton() {
close_button_->RequestFocus();
}
-void MessageView::GetAccessibleState(ui::AccessibleViewState* state) {
- state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
+void MessageView::GetAccessibleState(ui::AXViewState* state) {
+ state->role = ui::AX_ROLE_BUTTON;
state->name = accessible_name_;
}
@@ -261,6 +153,8 @@ bool MessageView::OnKeyReleased(const ui::KeyEvent& event) {
}
void MessageView::OnPaint(gfx::Canvas* canvas) {
+ DCHECK_EQ(this, close_button_->parent());
+ DCHECK_EQ(this, small_image_view_->parent());
SlideOutView::OnPaint(canvas);
views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
@@ -277,6 +171,29 @@ void MessageView::OnBlur() {
SchedulePaint();
}
+void MessageView::Layout() {
+ gfx::Rect content_bounds = GetContentsBounds();
+
+ // Background.
+ background_view_->SetBoundsRect(content_bounds);
+
+ // Close button.
+ gfx::Size close_size(close_button_->GetPreferredSize());
+ gfx::Rect close_rect(content_bounds.right() - close_size.width(),
+ content_bounds.y(),
+ close_size.width(),
+ close_size.height());
+ close_button_->SetBoundsRect(close_rect);
+
+ gfx::Size small_image_size(small_image_view_->GetPreferredSize());
+ gfx::Rect small_image_rect(small_image_size);
+ small_image_rect.set_origin(gfx::Point(
+ content_bounds.right() - small_image_size.width() - kSmallImagePadding,
+ content_bounds.bottom() - small_image_size.height() -
+ kSmallImagePadding));
+ small_image_view_->SetBoundsRect(small_image_rect);
+}
+
void MessageView::OnGestureEvent(ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_TAP) {
controller_->ClickOnNotification(notification_id_);