1 // Copyright (c) 2011 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 CHROME_BROWSER_CHROMEOS_SETTING_LEVEL_BUBBLE_H_ 6 #define CHROME_BROWSER_CHROMEOS_SETTING_LEVEL_BUBBLE_H_ 7 #pragma once 8 9 #include "base/basictypes.h" 10 #include "base/timer.h" 11 #include "chrome/browser/ui/views/bubble/bubble.h" 12 #include "ui/base/animation/animation_delegate.h" 13 #include "ui/base/animation/slide_animation.h" 14 15 class SkBitmap; 16 17 namespace chromeos { 18 19 class SettingLevelBubbleView; 20 21 // Singleton class controlling a bubble displaying a level-based setting like 22 // volume or brightness. 23 class SettingLevelBubble : public BubbleDelegate, 24 public ui::AnimationDelegate { 25 public: 26 void ShowBubble(int percent); 27 void HideBubble(); 28 29 // Update the bubble's current level without showing the bubble onscreen. 30 // We _do_ still animate the level moving to |percent| in case the bubble is 31 // still visible from a previous call to ShowBubble(). 32 // 33 // This can be used when the setting has been changed automatically and we 34 // want to make sure that it's animated from the correct position the next 35 // time that the bubble is shown. For example: 36 // 37 // 1. Brightness is at 50%. 38 // 2. Power manager dims brightness to 25% automatically. 39 // 3. User hits the "increase brightness" button, setting brightness to 30%. 40 // 41 // If we didn't update our internal state to 25% after 2), then the animation 42 // displayed in response to 3) would show the bubble animating from 50% down 43 // to 30%, rather than from 25% up to 30%. 44 void UpdateWithoutShowingBubble(int percent); 45 46 protected: 47 explicit SettingLevelBubble(SkBitmap* increase_icon, 48 SkBitmap* decrease_icon, 49 SkBitmap* zero_icon); ~SettingLevelBubble()50 virtual ~SettingLevelBubble() {} 51 52 private: 53 void OnTimeout(); 54 55 // Overridden from BubbleDelegate. 56 virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape); CloseOnEscape()57 virtual bool CloseOnEscape() { return true; } FadeInOnShow()58 virtual bool FadeInOnShow() { return false; } 59 60 // Overridden from ui::AnimationDelegate. 61 virtual void AnimationEnded(const ui::Animation* animation); 62 virtual void AnimationProgressed(const ui::Animation* animation); 63 64 // Previous and current percentages, or -1 if not yet shown. 65 int previous_percent_; 66 int current_percent_; 67 68 // Icons displayed in the bubble when increasing or decreasing the level or 69 // setting it to zero. Not owned by us. 70 SkBitmap* increase_icon_; 71 SkBitmap* decrease_icon_; 72 SkBitmap* zero_icon_; 73 74 // Currently shown bubble or NULL. 75 Bubble* bubble_; 76 77 // Its contents view, owned by Bubble. 78 SettingLevelBubbleView* view_; 79 80 ui::SlideAnimation animation_; 81 base::OneShotTimer<SettingLevelBubble> timeout_timer_; 82 83 DISALLOW_COPY_AND_ASSIGN(SettingLevelBubble); 84 }; 85 86 } // namespace chromeos 87 88 #endif // CHROME_BROWSER_CHROMEOS_SETTING_LEVEL_BUBBLE_H_ 89