| Index: chrome/browser/cocoa/status_bubble_mac.h
|
| ===================================================================
|
| --- chrome/browser/cocoa/status_bubble_mac.h (revision 28701)
|
| +++ chrome/browser/cocoa/status_bubble_mac.h (working copy)
|
| @@ -8,7 +8,9 @@
|
| #include <string>
|
|
|
| #import <Cocoa/Cocoa.h>
|
| +#import <QuartzCore/QuartzCore.h>
|
|
|
| +#include "base/task.h"
|
| #include "chrome/browser/status_bubble.h"
|
|
|
| class GURL;
|
| @@ -16,6 +18,17 @@
|
|
|
| class StatusBubbleMac : public StatusBubble {
|
| public:
|
| + // The various states that a status bubble may be in. Public for delegate
|
| + // access (for testing).
|
| + enum StatusBubbleState {
|
| + kBubbleHidden, // Fully hidden
|
| + kBubbleShowingTimer, // Waiting to fade in
|
| + kBubbleShowingFadeIn, // In a fade-in transition
|
| + kBubbleShown, // Fully visible
|
| + kBubbleHidingTimer, // Waiting to fade out
|
| + kBubbleHidingFadeOut // In a fade-out transition
|
| + };
|
| +
|
| StatusBubbleMac(NSWindow* parent, id delegate);
|
| virtual ~StatusBubbleMac();
|
|
|
| @@ -31,18 +44,54 @@
|
| // exist.
|
| void UpdateSizeAndPosition();
|
|
|
| + // Delegate method called when a fade-in or fade-out transition has
|
| + // completed. This is public so that it may be visible to the CAAnimation
|
| + // delegate, which is an Objective-C object.
|
| + void AnimationDidStop(CAAnimation* animation, bool finished);
|
| +
|
| private:
|
| friend class StatusBubbleMacTest;
|
|
|
| - void SetStatus(NSString* status, bool is_url);
|
| + // Setter for state_. Use this instead of writing to state_ directly so
|
| + // that state changes can be observed by unit tests.
|
| + void SetState(StatusBubbleState state);
|
|
|
| + // Sets the bubble text for SetStatus and SetURL.
|
| + void SetText(const std::wstring& text, bool is_url);
|
| +
|
| // Construct the window/widget if it does not already exist. (Safe to call if
|
| // it does.)
|
| void Create();
|
|
|
| - void FadeIn();
|
| - void FadeOut();
|
| + // Attaches the status bubble window to its parent window.
|
| + void Attach();
|
|
|
| + // Begins fading the status bubble window in or out depending on the value
|
| + // of |show|. This must be called from the appropriate fade state,
|
| + // kBubbleShowingFadeIn or kBubbleHidingFadeOut, or from the appropriate
|
| + // fully-shown/hidden state, kBubbleShown or kBubbleHidden. This may be
|
| + // called at any point during a fade-in or fade-out; it is even possible to
|
| + // reverse a transition before it has completed.
|
| + void Fade(bool show);
|
| +
|
| + // One-shot timer operations to manage the delays associated with the
|
| + // kBubbleShowingTimer and kBubbleHidingTimer states. StartTimer and
|
| + // TimerFired must be called from one of these states. StartTimer may be
|
| + // called while the timer is still running; in that case, the timer will be
|
| + // reset. CancelTimer may be called from any state.
|
| + void StartTimer(int64 time_ms);
|
| + void CancelTimer();
|
| + void TimerFired();
|
| +
|
| + // Begin the process of showing or hiding the status bubble. These may be
|
| + // called from any state, and will take the appropriate action to initiate
|
| + // any state changes that may be needed.
|
| + void StartShowing();
|
| + void StartHiding();
|
| +
|
| + // The timer factory used for show and hide delay timers.
|
| + ScopedRunnableMethodFactory<StatusBubbleMac> timer_factory_;
|
| +
|
| // Calculate the appropriate frame for the status bubble window.
|
| NSRect CalculateWindowFrame();
|
|
|
| @@ -61,15 +110,26 @@
|
| // The url we want to display when there is no status text to display.
|
| NSString* url_text_;
|
|
|
| - // How vertically offset the bubble is from its root position.
|
| - int offset_;
|
| + // The status bubble's current state. Do not write to this field directly;
|
| + // use SetState().
|
| + StatusBubbleState state_;
|
| +
|
| + // True if operations are to be performed immediately rather than waiting
|
| + // for delays and transitions. Normally false, this should only be set to
|
| + // true for testing.
|
| + bool immediate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StatusBubbleMac);
|
| };
|
|
|
| -// Delegate interface that allows the StatusBubble to query its delegate about
|
| -// the vertical offset (if any) that should be applied to the StatusBubble's
|
| -// position.
|
| +// Delegate interface
|
| @interface NSObject(StatusBubbleDelegate)
|
| +// Called to query the delegate about the vertical offset (if any) that should
|
| +// be applied to the StatusBubble's position.
|
| - (float)verticalOffsetForStatusBubble;
|
| +
|
| +// Called from SetState to notify the delegate of state changes.
|
| +- (void)statusBubbleWillEnterState:(StatusBubbleMac::StatusBubbleState)state;
|
| @end
|
|
|
| #endif // #ifndef CHROME_BROWSER_COCOA_STATUS_BUBBLE_MAC_H_
|
|
|