X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/daa3d05d095cb6ff6038a9c1ed9ccd0e15ef468e..b25a3298676bd85e313a4707b6cc3051405bbcfd:/ITTransientStatusWindow.m?ds=sidebyside diff --git a/ITTransientStatusWindow.m b/ITTransientStatusWindow.m index b06fb3a..6eedb93 100755 --- a/ITTransientStatusWindow.m +++ b/ITTransientStatusWindow.m @@ -19,6 +19,7 @@ backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType; - (void)rebuildWindow; - (void)startVanishTimer; +- (void)stopVanishTimer; @end @@ -73,7 +74,7 @@ static ITTransientStatusWindow *staticWindow = nil; backing:NSBackingStoreBuffered defer:NO] ) ) { - _visibilityState = ITTransientStatusWindowHiddenState; + _visibilityState = ITWindowHiddenState; _exitMode = exitMode; _exitDelay = DEFAULT_EXIT_DELAY; _backgroundType = backgroundType; @@ -84,7 +85,7 @@ static ITTransientStatusWindow *staticWindow = nil; _entryEffect = nil; _exitEffect = nil; _reallyIgnoresEvents = YES; - _delayTimer = nil; + _exitTimer = nil; // if ( _backgroundType == ITTransientStatusWindowRounded ) { // _contentSubView = contentView; @@ -154,49 +155,31 @@ static ITTransientStatusWindow *staticWindow = nil; - (IBAction)appear:(id)sender { - if ( _visibilityState == ITTransientStatusWindowHiddenState ) { + if ( _visibilityState == ITWindowHiddenState ) { // Window is hidden. Appear as normal, and start the timer. - if ( _entryEffect == nil ) { - [self orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [_entryEffect performAppear]; - } - [self startVanishTimer]; - } else if ( _visibilityState == ITTransientStatusWindowVisibleState ) { + [_entryEffect performAppear]; + } else if ( _visibilityState == ITWindowVisibleState ) { // Window is completely visible. Simply reset the timer. [self startVanishTimer]; - } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) { + } else if ( _visibilityState == ITWindowAppearingState ) { // Window is on its way in. Do nothing. - } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) { + } else if ( _visibilityState == ITWindowVanishingState ) { // Window is on its way out. Cancel the vanish. - if ( _exitEffect == nil ) { - [self orderFront:self]; - _visibilityState = ITTransientStatusWindowVisibleState; - } else { - [_exitEffect cancelVanish]; - } - [self startVanishTimer]; + [_exitEffect cancelVanish]; } } - (IBAction)vanish:(id)sender { - if ( _visibilityState == ITTransientStatusWindowVisibleState ) { + if ( _visibilityState == ITWindowVisibleState ) { // Window is totally visible. Perform exit effect. - if ( _exitEffect == nil ) { - [self orderOut:self]; - _visibilityState = ITTransientStatusWindowHiddenState; - } else { - [_exitEffect performVanish]; - } - [self startVanishTimer]; - } else if ( _visibilityState == ITTransientStatusWindowHiddenState ) { + [_exitEffect performVanish]; + } else if ( _visibilityState == ITWindowHiddenState ) { // Window is hidden. Do nothing. - } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) { + } else if ( _visibilityState == ITWindowAppearingState ) { // Window is on its way in. Cancel appear. [_entryEffect cancelAppear]; - } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) { + } else if ( _visibilityState == ITWindowVanishingState ) { // Window is on its way out. Do nothing. } } @@ -209,6 +192,12 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setVisibilityState:(ITWindowVisibilityState)newState { _visibilityState = newState; + + if ( _visibilityState == ITWindowVisibleState ) { + [self startVanishTimer]; + } else if ( (_visibilityState == ITWindowVanishingState) || (_visibilityState == ITWindowHiddenState) ) { + [self stopVanishTimer]; + } } - (ITTransientStatusWindowExitMode)exitMode @@ -219,6 +208,14 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setExitMode:(ITTransientStatusWindowExitMode)newMode { _exitMode = newMode; + + if ( _visibilityState == ITWindowVisibleState ) { + if ( _exitMode == ITTransientStatusWindowExitOnCommand ) { + [self stopVanishTimer]; + } else if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) { + [self startVanishTimer]; + } + } } - (float)exitDelay @@ -264,6 +261,16 @@ static ITTransientStatusWindow *staticWindow = nil; _horizontalPosition = newPosition; } +- (float)effectProgress +{ + return _effectProgress; +} + +- (void)setEffectProgress:(float)newProgress +{ + _effectProgress = newProgress; +} + - (float)screenPadding { return _screenPadding; @@ -291,7 +298,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setEntryEffect:(ITWindowEffect *)newEffect { - [_entryEffect autorelease]; + [_entryEffect releaseWhenIdle]; _entryEffect = [newEffect retain]; } @@ -302,7 +309,7 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)setExitEffect:(ITWindowEffect *)newEffect { - [_exitEffect autorelease]; + [_exitEffect releaseWhenIdle]; _exitEffect = [newEffect retain]; } @@ -332,7 +339,28 @@ static ITTransientStatusWindow *staticWindow = nil; - (void)startVanishTimer { + if ( _exitMode == ITTransientStatusWindowExitAfterDelay) { + [self stopVanishTimer]; + _exitTimer = [NSTimer scheduledTimerWithTimeInterval:_exitDelay + target:self + selector:@selector(doDelayedExit) + userInfo:nil + repeats:NO]; + } +} + +- (void)doDelayedExit +{ + [self vanish:self]; + _exitTimer = nil; +} +- (void)stopVanishTimer +{ + if ( _exitTimer ) { + [_exitTimer invalidate]; + _exitTimer = nil; + } } @end