Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ash / system / tray / tray_item_view.h
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
39   SystemTrayItem* owner() const { return owner_; }
40   views::Label* label() const { return label_; }
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() OVERRIDE;
46   virtual int GetHeightForWidth(int width) 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();
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_