#ifndef ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_
#define ASH_SYSTEM_CHROMEOS_SCREEN_TRAY_ITEM_H_
#include "ash/system/tray/system_tray.h"
#include "ash/system/tray/system_tray_item.h"
#include "ash/system/tray/system_tray_notifier.h"
#include "ash/system/tray/tray_item_view.h"
#include "ash/system/tray/tray_notification_view.h"
#include "ash/system/tray/tray_popup_label_button.h"
#include "ui/message_center/notification_delegate.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/image_view.h"
namespace views {
class View;
}
namespace ash {
class ScreenTrayItem;
namespace tray {
class ScreenTrayView : public TrayItemView {
public:
ScreenTrayView(ScreenTrayItem* screen_tray_item, int icon_id);
virtual ~ScreenTrayView();
void Update();
private:
ScreenTrayItem* screen_tray_item_;
DISALLOW_COPY_AND_ASSIGN(ScreenTrayView);
};
class ScreenStatusView : public views::View,
public views::ButtonListener {
public:
ScreenStatusView(ScreenTrayItem* screen_tray_item,
int icon_id,
const base::string16& label_text,
const base::string16& stop_button_text);
virtual ~ScreenStatusView();
virtual void Layout() OVERRIDE;
virtual void ButtonPressed(views::Button* sender,
const ui::Event& event) OVERRIDE;
void CreateItems();
void Update();
private:
ScreenTrayItem* screen_tray_item_;
views::ImageView* icon_;
views::Label* label_;
TrayPopupLabelButton* stop_button_;
int icon_id_;
base::string16 label_text_;
base::string16 stop_button_text_;
DISALLOW_COPY_AND_ASSIGN(ScreenStatusView);
};
class ScreenNotificationDelegate : public message_center::NotificationDelegate {
public:
explicit ScreenNotificationDelegate(ScreenTrayItem* screen_tray);
virtual void Display() OVERRIDE;
virtual void Error() OVERRIDE;
virtual void Close(bool by_user) OVERRIDE;
virtual void Click() OVERRIDE;
virtual void ButtonClick(int button_index) OVERRIDE;
protected:
virtual ~ScreenNotificationDelegate();
private:
ScreenTrayItem* screen_tray_;
DISALLOW_COPY_AND_ASSIGN(ScreenNotificationDelegate);
};
}
class ASH_EXPORT ScreenTrayItem : public SystemTrayItem {
public:
explicit ScreenTrayItem(SystemTray* system_tray);
virtual ~ScreenTrayItem();
tray::ScreenTrayView* tray_view() { return tray_view_; }
void set_tray_view(tray::ScreenTrayView* tray_view) {
tray_view_ = tray_view;
}
tray::ScreenStatusView* default_view() { return default_view_; }
void set_default_view(tray::ScreenStatusView* default_view) {
default_view_ = default_view;
}
bool is_started() const { return is_started_; }
void set_is_started(bool is_started) { is_started_ = is_started; }
void Update();
void Start(const base::Closure& stop_callback);
void Stop();
virtual void CreateOrUpdateNotification() = 0;
virtual std::string GetNotificationId() = 0;
virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE = 0;
virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE = 0;
virtual void DestroyTrayView() OVERRIDE;
virtual void DestroyDefaultView() OVERRIDE;
virtual void UpdateAfterShelfAlignmentChange(
ShelfAlignment alignment) OVERRIDE;
private:
tray::ScreenTrayView* tray_view_;
tray::ScreenStatusView* default_view_;
bool is_started_;
base::Closure stop_callback_;
DISALLOW_COPY_AND_ASSIGN(ScreenTrayItem);
};
}
#endif