// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_ #define ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_ #include "ash/system/user/login_status.h" #include "base/base_export.h" #include "base/memory/scoped_ptr.h" #include "base/timer/timer.h" #include "ui/views/bubble/tray_bubble_view.h" #include <vector> namespace ash { class SystemTray; class SystemTrayItem; class SystemTrayBubble { public: enum BubbleType { BUBBLE_TYPE_DEFAULT, BUBBLE_TYPE_DETAILED, BUBBLE_TYPE_NOTIFICATION }; SystemTrayBubble(ash::SystemTray* tray, const std::vector<ash::SystemTrayItem*>& items, BubbleType bubble_type); virtual ~SystemTrayBubble(); // Change the items displayed in the bubble. void UpdateView(const std::vector<ash::SystemTrayItem*>& items, BubbleType bubble_type); // Creates |bubble_view_| and a child views for each member of |items_|. // Also creates |bubble_wrapper_|. |init_params| may be modified. void InitView(views::View* anchor, user::LoginStatus login_status, views::TrayBubbleView::InitParams* init_params); // Focus the default item if no item is focused. Othewise, do nothing. void FocusDefaultIfNeeded(); BubbleType bubble_type() const { return bubble_type_; } views::TrayBubbleView* bubble_view() const { return bubble_view_; } void DestroyItemViews(); void BubbleViewDestroyed(); void StartAutoCloseTimer(int seconds); void StopAutoCloseTimer(); void RestartAutoCloseTimer(); void Close(); void SetVisible(bool is_visible); bool IsVisible(); // Returns true if any of the SystemTrayItems return true from // ShouldShowShelf(). bool ShouldShowShelf() const; private: void CreateItemViews(user::LoginStatus login_status); ash::SystemTray* tray_; views::TrayBubbleView* bubble_view_; std::vector<ash::SystemTrayItem*> items_; BubbleType bubble_type_; int autoclose_delay_; base::OneShotTimer<SystemTrayBubble> autoclose_; DISALLOW_COPY_AND_ASSIGN(SystemTrayBubble); }; } // namespace ash #endif // ASH_SYSTEM_TRAY_SYSTEM_TRAY_BUBBLE_H_