1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ASH_SYSTEM_STATUS_AREA_WIDGET_DELEGATE_H_
6#define ASH_SYSTEM_STATUS_AREA_WIDGET_DELEGATE_H_
7
8#include "ash/ash_export.h"
9#include "ash/shelf/shelf_types.h"
10#include "ash/wm/gestures/shelf_gesture_handler.h"
11#include "ui/gfx/image/image_skia.h"
12#include "ui/views/accessible_pane_view.h"
13#include "ui/views/widget/widget_delegate.h"
14
15namespace ash {
16class FocusCycler;
17
18class ASH_EXPORT StatusAreaWidgetDelegate : public views::AccessiblePaneView,
19                                            public views::WidgetDelegate {
20 public:
21  StatusAreaWidgetDelegate();
22  virtual ~StatusAreaWidgetDelegate();
23
24  // Add a tray view to the widget (e.g. system tray, web notifications).
25  void AddTray(views::View* tray);
26
27  // Called whenever layout might change (e.g. alignment changed).
28  void UpdateLayout();
29
30  // Sets the focus cycler.
31  void SetFocusCyclerForTesting(const FocusCycler* focus_cycler);
32
33  void set_alignment(ShelfAlignment alignment) { alignment_ = alignment; }
34
35  // Overridden from views::AccessiblePaneView.
36  virtual View* GetDefaultFocusableChild() OVERRIDE;
37
38  // Overridden from views::View:
39  virtual views::Widget* GetWidget() OVERRIDE;
40  virtual const views::Widget* GetWidget() const OVERRIDE;
41
42  // Overridden from ui::EventHandler:
43  virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
44
45  // views::WidgetDelegate overrides:
46  virtual bool CanActivate() const OVERRIDE;
47  virtual void DeleteDelegate() OVERRIDE;
48
49 protected:
50  // Overridden from views::View:
51  virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
52  virtual void ChildVisibilityChanged(views::View* child) OVERRIDE;
53
54 private:
55  void UpdateWidgetSize();
56
57  const FocusCycler* focus_cycler_for_testing_;
58  ShelfAlignment alignment_;
59
60  ShelfGestureHandler gesture_handler_;
61
62  DISALLOW_COPY_AND_ASSIGN(StatusAreaWidgetDelegate);
63};
64
65}  // namespace ash
66
67#endif  // ASH_SYSTEM_STATUS_AREA_WIDGET_DELEGATE_H_
68