Home | History | Annotate | Download | only in system
      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   // Notifies child trays, and the |status_area_widget_delegate_| to schedule a
     71   // paint.
     72   void SchedulePaint();
     73 
     74   // Overridden from views::Widget:
     75   virtual void OnNativeWidgetActivationChanged(bool active) OVERRIDE;
     76 
     77  private:
     78   void AddSystemTray();
     79   void AddWebNotificationTray();
     80 #if defined(OS_CHROMEOS)
     81   void AddLogoutButtonTray();
     82   void AddVirtualKeyboardTray();
     83 #endif
     84   void AddOverviewButtonTray();
     85 
     86   // Weak pointers to View classes that are parented to StatusAreaWidget:
     87   StatusAreaWidgetDelegate* status_area_widget_delegate_;
     88   OverviewButtonTray* overview_button_tray_;
     89   SystemTray* system_tray_;
     90   WebNotificationTray* web_notification_tray_;
     91 #if defined(OS_CHROMEOS)
     92   LogoutButtonTray* logout_button_tray_;
     93   VirtualKeyboardTray* virtual_keyboard_tray_;
     94 #endif
     95   user::LoginStatus login_status_;
     96 
     97   DISALLOW_COPY_AND_ASSIGN(StatusAreaWidget);
     98 };
     99 
    100 }  // namespace ash
    101 
    102 #endif  // ASH_SYSTEM_STATUS_AREA_WIDGET_H_
    103