• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ITEM_VIEW_H_
6 #define ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_
7 
8 #include "ash/ash_export.h"
9 #include "ui/gfx/animation/animation_delegate.h"
10 #include "ui/views/view.h"
11 
12 namespace gfx {
13 class SlideAnimation;
14 }
15 
16 namespace views {
17 class ImageView;
18 class Label;
19 }
20 
21 namespace ash {
22 class SystemTrayItem;
23 
24 // Base-class for items in the tray. It makes sure the widget is updated
25 // correctly when the visibility/size of the tray item changes. It also adds
26 // animation when showing/hiding the item in the tray.
27 class ASH_EXPORT TrayItemView : public views::View,
28                                 public gfx::AnimationDelegate {
29  public:
30   explicit TrayItemView(SystemTrayItem* owner);
31   virtual ~TrayItemView();
32 
33   static void DisableAnimationsForTest();
34 
35   // Convenience function for creating a child Label or ImageView.
36   void CreateLabel();
37   void CreateImageView();
38 
owner()39   SystemTrayItem* owner() const { return owner_; }
label()40   views::Label* label() const { return label_; }
image_view()41   views::ImageView* image_view() const { return image_view_; }
42 
43   // Overridden from views::View.
44   virtual void SetVisible(bool visible) OVERRIDE;
45   virtual gfx::Size GetPreferredSize() const OVERRIDE;
46   virtual int GetHeightForWidth(int width) const OVERRIDE;
47 
48  protected:
49   // Makes sure the widget relayouts after the size/visibility of the view
50   // changes.
51   void ApplyChange();
52 
53   // This should return the desired size of the view. For most views, this
54   // returns GetPreferredSize. But since this class overrides GetPreferredSize
55   // for animation purposes, we allow a different way to get this size, and do
56   // not allow GetPreferredSize to be overridden.
57   virtual gfx::Size DesiredSize() const;
58 
59   // The default animation duration is 200ms. But each view can customize this.
60   virtual int GetAnimationDurationMS();
61 
62  private:
63   // Overridden from views::View.
64   virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
65 
66   // Overridden from gfx::AnimationDelegate.
67   virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
68   virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE;
69   virtual void AnimationCanceled(const gfx::Animation* animation) OVERRIDE;
70 
71   SystemTrayItem* owner_;
72   scoped_ptr<gfx::SlideAnimation> animation_;
73   views::Label* label_;
74   views::ImageView* image_view_;
75 
76   DISALLOW_COPY_AND_ASSIGN(TrayItemView);
77 };
78 
79 }  // namespace ash
80 
81 #endif  // ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_
82