1 // Copyright 2013 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_CHROMEOS_SCREEN_TRAY_ITEM_H_ 6 #define ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_ 7 8 #include "ash/system/tray/system_tray.h" 9 #include "ash/system/tray/system_tray_item.h" 10 #include "ash/system/tray/system_tray_notifier.h" 11 #include "ash/system/tray/tray_item_view.h" 12 #include "ash/system/tray/tray_notification_view.h" 13 #include "ash/system/tray/tray_popup_label_button.h" 14 #include "ui/message_center/notification_delegate.h" 15 #include "ui/views/controls/button/button.h" 16 #include "ui/views/controls/image_view.h" 17 18 namespace views { 19 class View; 20 } 21 22 namespace ash { 23 namespace internal { 24 25 class ScreenTrayItem; 26 27 namespace tray { 28 29 class ScreenTrayView : public TrayItemView { 30 public: 31 ScreenTrayView(ScreenTrayItem* screen_tray_item, int icon_id); 32 virtual ~ScreenTrayView(); 33 34 void Update(); 35 36 private: 37 ScreenTrayItem* screen_tray_item_; 38 39 DISALLOW_COPY_AND_ASSIGN(ScreenTrayView); 40 }; 41 42 class ScreenStatusView : public views::View, 43 public views::ButtonListener { 44 public: 45 ScreenStatusView(ScreenTrayItem* screen_tray_item, 46 int icon_id, 47 const base::string16& label_text, 48 const base::string16& stop_button_text); 49 virtual ~ScreenStatusView(); 50 51 // Overridden from views::View. 52 virtual void Layout() OVERRIDE; 53 54 // Overridden from views::ButtonListener. 55 virtual void ButtonPressed(views::Button* sender, 56 const ui::Event& event) OVERRIDE; 57 58 void CreateItems(); 59 void Update(); 60 61 private: 62 ScreenTrayItem* screen_tray_item_; 63 views::ImageView* icon_; 64 views::Label* label_; 65 TrayPopupLabelButton* stop_button_; 66 int icon_id_; 67 base::string16 label_text_; 68 base::string16 stop_button_text_; 69 70 DISALLOW_COPY_AND_ASSIGN(ScreenStatusView); 71 }; 72 73 class ScreenNotificationDelegate : public message_center::NotificationDelegate { 74 public: 75 explicit ScreenNotificationDelegate(ScreenTrayItem* screen_tray); 76 77 // message_center::NotificationDelegate overrides: 78 virtual void Display() OVERRIDE; 79 virtual void Error() OVERRIDE; 80 virtual void Close(bool by_user) OVERRIDE; 81 virtual void Click() OVERRIDE; 82 virtual void ButtonClick(int button_index) OVERRIDE; 83 84 protected: 85 virtual ~ScreenNotificationDelegate(); 86 87 private: 88 ScreenTrayItem* screen_tray_; 89 90 DISALLOW_COPY_AND_ASSIGN(ScreenNotificationDelegate); 91 }; 92 93 } // namespace tray 94 95 96 // The base tray item for screen capture and screen sharing. The 97 // Start method brings up a notification and a tray item, and the user 98 // can stop the screen capture/sharing by pressing the stop button. 99 class ASH_EXPORT ScreenTrayItem : public SystemTrayItem { 100 public: 101 explicit ScreenTrayItem(SystemTray* system_tray); 102 virtual ~ScreenTrayItem(); 103 104 tray::ScreenTrayView* tray_view() { return tray_view_; } 105 void set_tray_view(tray::ScreenTrayView* tray_view) { 106 tray_view_ = tray_view; 107 } 108 109 tray::ScreenStatusView* default_view() { return default_view_; } 110 void set_default_view(tray::ScreenStatusView* default_view) { 111 default_view_ = default_view; 112 } 113 114 bool is_started() const { return is_started_; } 115 void set_is_started(bool is_started) { is_started_ = is_started; } 116 117 void Update(); 118 void Start(const base::Closure& stop_callback); 119 void Stop(); 120 121 // Creates or updates the notification for the tray item. 122 virtual void CreateOrUpdateNotification() = 0; 123 124 // Returns the id of the notification for the tray item. 125 virtual std::string GetNotificationId() = 0; 126 127 // Overridden from SystemTrayItem. 128 virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE = 0; 129 virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE = 0; 130 virtual void DestroyTrayView() OVERRIDE; 131 virtual void DestroyDefaultView() OVERRIDE; 132 virtual void UpdateAfterShelfAlignmentChange( 133 ShelfAlignment alignment) OVERRIDE; 134 135 private: 136 tray::ScreenTrayView* tray_view_; 137 tray::ScreenStatusView* default_view_; 138 bool is_started_; 139 base::Closure stop_callback_; 140 141 DISALLOW_COPY_AND_ASSIGN(ScreenTrayItem); 142 }; 143 144 } // namespace internal 145 } // namespace ash 146 147 #endif // ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_ 148