17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/compiler_specific.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/weak_ptr.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/views/message_center/web_notification_tray.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/base/animation/animation_delegate.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/base/animation/slide_animation.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/gfx/point.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/gfx/rect.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/message_center/message_center.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/message_center/message_center_tray.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/message_center/message_center_tray_delegate.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/message_center/views/message_center_view.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/views/widget/widget_delegate.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/views/widget/widget_observer.h" 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace ui { 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass SlideAnimation; 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass AnimationDelegate; 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace message_center { 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochenum Alignment { 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALIGNMENT_TOP = 1 << 0, 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALIGNMENT_LEFT = 1 << 1, 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALIGNMENT_BOTTOM = 1 << 2, 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALIGNMENT_RIGHT = 1 << 3, 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ALIGNMENT_NONE = 1 << 4, 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct PositionInfo { 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int max_height; 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Alignment of the message center relative to the center of the screen. 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Alignment message_center_alignment; 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Alignment of the taskbar relative to the center of the screen. 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Alignment taskbar_alignment; 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Point relative to which message center is positioned. 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Point inital_anchor_point; 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass WebNotificationTray; 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass MessageCenterFrameView; 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// MessageCenterWidgetDelegate is the message center's client view. It also 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// creates the message center widget and sets the notifications. 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass MessageCenterWidgetDelegate : public views::WidgetDelegate, 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public message_center::MessageCenterView, 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public views::WidgetObserver { 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MessageCenterWidgetDelegate(WebNotificationTray* tray, 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MessageCenterTray* mc_tray, 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool initially_settings_visible, 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const PositionInfo& pos_info); 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~MessageCenterWidgetDelegate(); 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // WidgetDelegate overrides: 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual View* GetContentsView() OVERRIDE; 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual views::NonClientFrameView* CreateNonClientFrameView( 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch views::Widget* widget) OVERRIDE; 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DeleteDelegate() OVERRIDE; 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual views::Widget* GetWidget() OVERRIDE; 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual const views::Widget* GetWidget() const OVERRIDE; 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // WidgetObserver overrides: 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnWidgetActivationChanged(views::Widget* widget, 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool active) OVERRIDE; 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE; 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // View overrides: 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void PreferredSizeChanged() OVERRIDE; 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual gfx::Size GetPreferredSize() OVERRIDE; 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual gfx::Size GetMaximumSize() OVERRIDE; 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual int GetHeightForWidth(int width) OVERRIDE; 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Creates and initializes the message center widget. 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void InitWidget(); 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Shifts the message center anchor point such that the mouse click point is 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // along the middle 60% of the width of the message center if taskbar is 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // horizontal aligned. If vertically aligned, ensures that mouse click point 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // is along the height of the message center (at least at a corner). 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Point GetCorrectedAnchor(gfx::Size calculated_size); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Calculates the message center bounds using the position info and the 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // corrected anchor. 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Rect GetMessageCenterBounds(); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Insets of the message center border (set in MessageCenterFrameView). 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Insets border_insets_; 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Info necessary to calculate the estimated position of the message center. 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PositionInfo pos_info_; 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch WebNotificationTray* tray_; 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace message_center 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 114