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_DATE_TRAY_DATE_H_
6#define ASH_SYSTEM_DATE_TRAY_DATE_H_
7
8#include "ash/ash_export.h"
9#include "ash/system/date/clock_observer.h"
10#include "ash/system/tray/system_tray_item.h"
11#include "base/memory/scoped_ptr.h"
12
13namespace views {
14class Label;
15}
16
17namespace ash {
18class DateDefaultView;
19#if defined(OS_CHROMEOS)
20class SystemClockObserver;
21#endif
22
23namespace tray {
24class TimeView;
25}
26
27class ASH_EXPORT TrayDate : public SystemTrayItem, public ClockObserver {
28 public:
29  enum ClockLayout {
30    HORIZONTAL_CLOCK,
31    VERTICAL_CLOCK,
32  };
33
34  enum DateAction {
35    NONE,
36    SET_SYSTEM_TIME,
37    SHOW_DATE_SETTINGS,
38  };
39
40  explicit TrayDate(SystemTray* system_tray);
41  virtual ~TrayDate();
42
43  // Returns view for help button if it is exists. Returns NULL otherwise.
44  views::View* GetHelpButtonView() const;
45
46  const tray::TimeView* GetTimeTrayForTesting() const;
47  const DateDefaultView* GetDefaultViewForTesting() const;
48  views::View* CreateDefaultViewForTesting(user::LoginStatus status);
49
50 private:
51  // Overridden from SystemTrayItem.
52  virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
53  virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
54  virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE;
55  virtual void DestroyTrayView() OVERRIDE;
56  virtual void DestroyDefaultView() OVERRIDE;
57  virtual void DestroyDetailedView() OVERRIDE;
58  virtual void UpdateAfterLoginStatusChange(user::LoginStatus status) OVERRIDE;
59  virtual void UpdateAfterShelfAlignmentChange(
60      ShelfAlignment alignment) OVERRIDE;
61
62  // Overridden from ClockObserver.
63  virtual void OnDateFormatChanged() OVERRIDE;
64  virtual void OnSystemClockTimeUpdated() OVERRIDE;
65  virtual void OnSystemClockCanSetTimeChanged(bool can_set_time) OVERRIDE;
66  virtual void Refresh() OVERRIDE;
67
68  void SetupLabelForTimeTray(views::Label* label);
69
70  tray::TimeView* time_tray_;
71  DateDefaultView* default_view_;
72  user::LoginStatus login_status_;
73
74#if defined(OS_CHROMEOS)
75  scoped_ptr<SystemClockObserver> system_clock_observer_;
76#endif
77
78  DISALLOW_COPY_AND_ASSIGN(TrayDate);
79};
80
81}  // namespace ash
82
83#endif  // ASH_SYSTEM_DATE_TRAY_DATE_H_
84