Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ash / system / status_area_widget.h
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_H_
6 #define ASH_SYSTEM_STATUS_AREA_WIDGET_H_
7
8 #include "ash/ash_export.h"
9 #include "ash/shelf/shelf_types.h"
10 #include "ash/system/user/login_status.h"
11 #include "ui/views/widget/widget.h"
12
13 namespace ash {
14 class OverviewButtonTray;
15 class ShellDelegate;
16 class StatusAreaWidgetDelegate;
17 class SystemTray;
18 class WebNotificationTray;
19 #if defined(OS_CHROMEOS)
20 class LogoutButtonTray;
21 class VirtualKeyboardTray;
22 #endif
23
24 class ASH_EXPORT StatusAreaWidget : public views::Widget {
25  public:
26   static const char kNativeViewName[];
27
28   explicit StatusAreaWidget(aura::Window* status_container);
29   virtual ~StatusAreaWidget();
30
31   // Creates the SystemTray, WebNotificationTray and LogoutButtonTray.
32   void CreateTrayViews();
33
34   // Destroys the system tray and web notification tray. Called before
35   // tearing down the windows to avoid shutdown ordering issues.
36   void Shutdown();
37
38   // Update the alignment of the widget and tray views.
39   void SetShelfAlignment(ShelfAlignment alignment);
40
41   // Set the visibility of system notifications.
42   void SetHideSystemNotifications(bool hide);
43
44   // Called by the client when the login status changes. Caches login_status
45   // and calls UpdateAfterLoginStatusChange for the system tray and the web
46   // notification tray.
47   void UpdateAfterLoginStatusChange(user::LoginStatus login_status);
48
49   StatusAreaWidgetDelegate* status_area_widget_delegate() {
50     return status_area_widget_delegate_;
51   }
52   SystemTray* system_tray() { return system_tray_; }
53   WebNotificationTray* web_notification_tray() {
54     return web_notification_tray_;
55   }
56   OverviewButtonTray* overview_button_tray() {
57     return overview_button_tray_;
58   }
59
60   user::LoginStatus login_status() const { return login_status_; }
61
62   // Returns true if the shelf should be visible. This is used when the
63   // shelf is configured to auto-hide and test if the shelf should force
64   // the shelf to remain visible.
65   bool ShouldShowShelf() const;
66
67   // True if any message bubble is shown.
68   bool IsMessageBubbleShown() const;
69
70   // Overridden from views::Widget:
71   virtual void OnNativeWidgetActivationChanged(bool active) OVERRIDE;
72
73  private:
74   void AddSystemTray();
75   void AddWebNotificationTray();
76 #if defined(OS_CHROMEOS)
77   void AddLogoutButtonTray();
78   void AddVirtualKeyboardTray();
79 #endif
80   void AddOverviewButtonTray();
81
82   // Weak pointers to View classes that are parented to StatusAreaWidget:
83   StatusAreaWidgetDelegate* status_area_widget_delegate_;
84   OverviewButtonTray* overview_button_tray_;
85   SystemTray* system_tray_;
86   WebNotificationTray* web_notification_tray_;
87 #if defined(OS_CHROMEOS)
88   LogoutButtonTray* logout_button_tray_;
89   VirtualKeyboardTray* virtual_keyboard_tray_;
90 #endif
91   user::LoginStatus login_status_;
92
93   DISALLOW_COPY_AND_ASSIGN(StatusAreaWidget);
94 };
95
96 }  // namespace ash
97
98 #endif  // ASH_SYSTEM_STATUS_AREA_WIDGET_H_