message_center_widget_delegate.h revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved. 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// Use of this source code is governed by a BSD-style license that can be 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org// found in the LICENSE file. 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/basictypes.h" 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/compiler_specific.h" 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "base/memory/weak_ptr.h" 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/gfx/point.h" 128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#include "ui/gfx/rect.h" 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#include "ui/message_center/message_center.h" 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/message_center/message_center_tray.h" 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/message_center/message_center_tray_delegate.h" 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/message_center/views/message_center_view.h" 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/views/widget/widget_delegate.h" 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ui/views/widget/widget_observer.h" 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgnamespace message_center { 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgenum Alignment { 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ALIGNMENT_TOP = 1 << 0, 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ALIGNMENT_LEFT = 1 << 1, 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ALIGNMENT_BOTTOM = 1 << 2, 266fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ALIGNMENT_RIGHT = 1 << 3, 276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org ALIGNMENT_NONE = 1 << 4, 286fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org}; 296fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 306fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct PositionInfo { 316fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org int max_height; 326fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 336fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Alignment of the message center relative to the center of the screen. 346fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org Alignment message_center_alignment; 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Alignment of the taskbar relative to the center of the screen. 376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org Alignment taskbar_alignment; 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org // Point relative to which message center is positioned. 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org gfx::Point inital_anchor_point; 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}; 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgclass WebNotificationTray; 446fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgclass MessageCenterFrameView; 456fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 466fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// MessageCenterWidgetDelegate is the message center's client view. It also 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// creates the message center widget and sets the notifications. 486fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org//////////////////////////////////////////////////////////////////////////////// 506fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgclass MessageCenterWidgetDelegate : public views::WidgetDelegate, 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org public message_center::MessageCenterView, 526fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org public views::WidgetObserver { 536fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org public: 546fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org MessageCenterWidgetDelegate(WebNotificationTray* tray, 556fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org MessageCenterTray* mc_tray, 566fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org bool initially_settings_visible, 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org const PositionInfo& pos_info); 586fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual ~MessageCenterWidgetDelegate(); 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 606fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // WidgetDelegate overrides: 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual View* GetContentsView() OVERRIDE; 626fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual views::NonClientFrameView* CreateNonClientFrameView( 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org views::Widget* widget) OVERRIDE; 646fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual void DeleteDelegate() OVERRIDE; 656fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual views::Widget* GetWidget() OVERRIDE; 666fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual const views::Widget* GetWidget() const OVERRIDE; 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 686fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // WidgetObserver overrides: 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual void OnWidgetActivationChanged(views::Widget* widget, 706fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org bool active) OVERRIDE; 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE; 726fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // View overrides: 746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual void PreferredSizeChanged() OVERRIDE; 756fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual gfx::Size GetPreferredSize() OVERRIDE; 766fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual gfx::Size GetMaximumSize() OVERRIDE; 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual int GetHeightForWidth(int width) OVERRIDE; 786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org private: 816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Creates and initializes the message center widget. 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void InitWidget(); 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Shifts the message center anchor point such that the mouse click point is 856fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // along the middle 60% of the width of the message center if taskbar is 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // horizontal aligned. If vertically aligned, ensures that mouse click point 876fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // is along the height of the message center (at least at a corner). 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org gfx::Point GetCorrectedAnchor(gfx::Size calculated_size); 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 906fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Calculates the message center bounds using the position info and the 916fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // corrected anchor. 926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org gfx::Rect GetMessageCenterBounds(); 936fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 946fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Insets of the message center border (set in MessageCenterFrameView). 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org gfx::Insets border_insets_; 966fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 976fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org // Info necessary to calculate the estimated position of the message center. 986fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org PositionInfo pos_info_; 996fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org WebNotificationTray* tray_; 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org}; 1026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1036fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org} // namespace message_center 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#endif // CHROME_BROWSER_UI_VIEWS_MESSAGE_CENTER_MESSAGE_CENTER_WIDGET_DELEGATE_H_ 1066fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org