Home | History | Annotate | Download | only in tray
      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_TRAY_TRAY_NOTIFICATION_VIEW_H_
      6 #define ASH_SYSTEM_TRAY_TRAY_NOTIFICATION_VIEW_H_
      7 
      8 #include "base/timer/timer.h"
      9 #include "ui/views/controls/button/image_button.h"
     10 #include "ui/views/controls/slide_out_view.h"
     11 
     12 namespace gfx {
     13 class ImageSkia;
     14 }
     15 
     16 namespace views {
     17 class ImageView;
     18 }
     19 
     20 namespace ash {
     21 class SystemTrayItem;
     22 
     23 // A view for closable notification views, laid out like:
     24 //  -------------------
     25 // | icon  contents  x |
     26 //  ----------------v--
     27 // The close button will call OnClose() when clicked.
     28 class TrayNotificationView : public views::SlideOutView,
     29                              public views::ButtonListener {
     30  public:
     31   // If icon_id is 0, no icon image will be set. SetIconImage can be called
     32   // to later set the icon image.
     33   TrayNotificationView(SystemTrayItem* owner, int icon_id);
     34   virtual ~TrayNotificationView();
     35 
     36   // InitView must be called once with the contents to be displayed.
     37   void InitView(views::View* contents);
     38 
     39   // Sets/updates the icon image.
     40   void SetIconImage(const gfx::ImageSkia& image);
     41 
     42   // Gets the icons image.
     43   const gfx::ImageSkia& GetIconImage() const;
     44 
     45   // Replaces the contents view.
     46   void UpdateView(views::View* new_contents);
     47 
     48   // Replaces the contents view and updates the icon image.
     49   void UpdateViewAndImage(views::View* new_contents,
     50                           const gfx::ImageSkia& image);
     51 
     52   // Autoclose timer operations.
     53   void StartAutoCloseTimer(int seconds);
     54   void StopAutoCloseTimer();
     55   void RestartAutoCloseTimer();
     56 
     57   // Overridden from ButtonListener.
     58   virtual void ButtonPressed(views::Button* sender,
     59                              const ui::Event& event) OVERRIDE;
     60 
     61   // Overridden from views::View.
     62   virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
     63 
     64   // Overridden from ui::EventHandler.
     65   virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
     66 
     67  protected:
     68   // Called when the close button is pressed. Does nothing by default.
     69   virtual void OnClose();
     70   // Called when the notification is clicked on. Does nothing by default.
     71   virtual void OnClickAction();
     72 
     73   // Overridden from views::SlideOutView.
     74   virtual void OnSlideOut() OVERRIDE;
     75 
     76   SystemTrayItem* owner() { return owner_; }
     77 
     78  private:
     79   void HandleClose();
     80   void HandleClickAction();
     81 
     82   SystemTrayItem* owner_;
     83   int icon_id_;
     84   views::ImageView* icon_;
     85 
     86   int autoclose_delay_;
     87   base::OneShotTimer<TrayNotificationView> autoclose_;
     88 
     89   DISALLOW_COPY_AND_ASSIGN(TrayNotificationView);
     90 };
     91 
     92 }  // namespace ash
     93 
     94 #endif  // ASH_SYSTEM_TRAY_TRAY_NOTIFICATION_VIEW_H_
     95