diff options
Diffstat (limited to 'chromium/ash/system/tray/tray_item_view.h')
-rw-r--r-- | chromium/ash/system/tray/tray_item_view.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/chromium/ash/system/tray/tray_item_view.h b/chromium/ash/system/tray/tray_item_view.h new file mode 100644 index 00000000000..761e918791c --- /dev/null +++ b/chromium/ash/system/tray/tray_item_view.h @@ -0,0 +1,85 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_ +#define ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_ + +#include "ash/ash_export.h" +#include "ui/gfx/animation/animation_delegate.h" +#include "ui/views/view.h" + +namespace gfx { +class SlideAnimation; +} + +namespace views { +class ImageView; +class Label; +} + +namespace ash { + +class SystemTrayItem; + +namespace internal { + +// Base-class for items in the tray. It makes sure the widget is updated +// correctly when the visibility/size of the tray item changes. It also adds +// animation when showing/hiding the item in the tray. +class ASH_EXPORT TrayItemView : public views::View, + public gfx::AnimationDelegate { + public: + explicit TrayItemView(SystemTrayItem* owner); + virtual ~TrayItemView(); + + static void DisableAnimationsForTest(); + + // Convenience function for creating a child Label or ImageView. + void CreateLabel(); + void CreateImageView(); + + SystemTrayItem* owner() const { return owner_; } + views::Label* label() const { return label_; } + views::ImageView* image_view() const { return image_view_; } + + // Overridden from views::View. + virtual void SetVisible(bool visible) OVERRIDE; + virtual gfx::Size GetPreferredSize() OVERRIDE; + virtual int GetHeightForWidth(int width) OVERRIDE; + + protected: + // Makes sure the widget relayouts after the size/visibility of the view + // changes. + void ApplyChange(); + + // This should return the desired size of the view. For most views, this + // returns GetPreferredSize. But since this class overrides GetPreferredSize + // for animation purposes, we allow a different way to get this size, and do + // not allow GetPreferredSize to be overridden. + virtual gfx::Size DesiredSize(); + + // The default animation duration is 200ms. But each view can customize this. + virtual int GetAnimationDurationMS(); + + private: + // Overridden from views::View. + virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; + + // Overridden from gfx::AnimationDelegate. + virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; + virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; + virtual void AnimationCanceled(const gfx::Animation* animation) OVERRIDE; + + SystemTrayItem* owner_; + scoped_ptr<gfx::SlideAnimation> animation_; + views::Label* label_; + views::ImageView* image_view_; + + DISALLOW_COPY_AND_ASSIGN(TrayItemView); +}; + +} // namespace internal +} // namespace ash + +#endif // ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_ |