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