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.
5 #ifndef ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_
6 #define ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_
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"
29 class ScreenTrayView : public TrayItemView {
31 ScreenTrayView(ScreenTrayItem* screen_tray_item, int icon_id);
32 virtual ~ScreenTrayView();
37 ScreenTrayItem* screen_tray_item_;
39 DISALLOW_COPY_AND_ASSIGN(ScreenTrayView);
42 class ScreenStatusView : public views::View,
43 public views::ButtonListener {
45 ScreenStatusView(ScreenTrayItem* screen_tray_item,
47 const base::string16& label_text,
48 const base::string16& stop_button_text);
49 virtual ~ScreenStatusView();
51 // Overridden from views::View.
52 virtual void Layout() OVERRIDE;
54 // Overridden from views::ButtonListener.
55 virtual void ButtonPressed(views::Button* sender,
56 const ui::Event& event) OVERRIDE;
62 ScreenTrayItem* screen_tray_item_;
63 views::ImageView* icon_;
65 TrayPopupLabelButton* stop_button_;
67 base::string16 label_text_;
68 base::string16 stop_button_text_;
70 DISALLOW_COPY_AND_ASSIGN(ScreenStatusView);
73 class ScreenNotificationDelegate : public message_center::NotificationDelegate {
75 explicit ScreenNotificationDelegate(ScreenTrayItem* screen_tray);
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;
85 virtual ~ScreenNotificationDelegate();
88 ScreenTrayItem* screen_tray_;
90 DISALLOW_COPY_AND_ASSIGN(ScreenNotificationDelegate);
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 {
101 explicit ScreenTrayItem(SystemTray* system_tray);
102 virtual ~ScreenTrayItem();
104 tray::ScreenTrayView* tray_view() { return tray_view_; }
105 void set_tray_view(tray::ScreenTrayView* tray_view) {
106 tray_view_ = tray_view;
109 tray::ScreenStatusView* default_view() { return default_view_; }
110 void set_default_view(tray::ScreenStatusView* default_view) {
111 default_view_ = default_view;
114 bool is_started() const { return is_started_; }
115 void set_is_started(bool is_started) { is_started_ = is_started; }
118 void Start(const base::Closure& stop_callback);
121 // Creates or updates the notification for the tray item.
122 virtual void CreateOrUpdateNotification() = 0;
124 // Returns the id of the notification for the tray item.
125 virtual std::string GetNotificationId() = 0;
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;
134 tray::ScreenTrayView* tray_view_;
135 tray::ScreenStatusView* default_view_;
137 base::Closure stop_callback_;
139 DISALLOW_COPY_AND_ASSIGN(ScreenTrayItem);
142 } // namespace internal
145 #endif // ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_