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