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