NSLog(@"ITDissolveWindowEffect does not implement performVanish.");
}
+- (void)cancelAppear
+{
+ NSLog(@"ITWindowEffect does not implement cancelAppear.");
+}
+
+- (void)cancelVanish
+{
+ NSLog(@"ITDissolveWindowEffect does not implement cancelVanish.");
+}
+
@end
#import "ITPivotWindowEffect.h"
#import "ITCoreGraphicsHacks.h"
+@interface ITPivotWindowEffect (Private)
+- (void)setPivot:(float)angle;
+- (void)pivotFinish;
+@end
+
@implementation ITPivotWindowEffect
- (void)performAppear
{
- NSLog(@"ITPivotWindowEffect does not implement performAppear.");
+ [self setPivot:315.0];
+ _effectProgress = 0.0;
+ [_window setAlphaValue:0.0];
+ [_window orderFront:self];
+ _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS)
+ target:self
+ selector:@selector(appearStep)
+ userInfo:nil
+ repeats:YES];
}
- (void)performVanish
{
- NSLog(@"ITPivotWindowEffect does not implement performVanish.");
+ [self setPivot:0.0];
+ _effectProgress = 1.0;
+ [_window setAlphaValue:1.0];
+ [_window orderFront:self];
+ _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS)
+ target:self
+ selector:@selector(vanishStep)
+ userInfo:nil
+ repeats:YES];
+}
+
+- (void)cancelAppear
+{
+ [self pivotFinish];
+ [_window orderOut:self];
+ [self setPivot:0.0];
+ [_window setAlphaValue:1.0];
}
-- (void)pivotEffect
+- (void)cancelVanish
{
- if ( YES ) {
- [self setPivot:315.0];
- _effectProgress = 0.0;
- [_window setAlphaValue:0.0];
- [_window orderFront:self];
- _effectTimer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / EFFECT_FPS)
- target:self
- selector:@selector(pivotStep)
- userInfo:nil
- repeats:YES];
- } else {
- [_window orderOut:self];
+ [self pivotFinish];
+ [self setPivot:0.0];
+ [_window setAlphaValue:1.0];
+ [_window orderFront:self];
+ [_window display];
+}
+
+- (void)appearStep
+{
+ float interPivot = 0.0;
+ _effectProgress += (1.0 / (EFFECT_FPS * _effectTime));
+ _effectProgress = (_effectProgress < 1.0 ? _effectProgress : 1.0);
+ interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2);
+ [self setPivot:((interPivot * 45) + 315)];
+ [_window setAlphaValue:interPivot];
+
+ if ( _effectProgress >= 1.0 ) {
+ [self pivotFinish];
}
}
-- (void)pivotStep
+- (void)vanishStep
{
- if ( YES ) {
- float interPivot = 0.0;
- _effectProgress += (1.0 / (EFFECT_FPS * _effectTime));
- _effectProgress = (_effectProgress < 1.0 ? _effectProgress : 1.0);
- interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2);
- [self setPivot:((interPivot * 45) + 315)];
- [_window setAlphaValue:interPivot];
- if ( _effectProgress >= 1.0 ) {
- [self pivotFinish];
- }
- } else {
- //backwards
+ float interPivot = 1.0;
+ _effectProgress -= (1.0 / (EFFECT_FPS * _effectTime));
+ _effectProgress = (_effectProgress > 0.0 ? _effectProgress : 0.0);
+ interPivot = (( sin((_effectProgress * pi) - (pi / 2)) + 1 ) / 2);
+ [self setPivot:((interPivot * 45) + 315)];
+ [_window setAlphaValue:interPivot];
+
+ if ( _effectProgress <= 0.0 ) {
+ [self pivotFinish];
}
}
- (void)pivotFinish
{
- if ( YES ) {
- [_effectTimer invalidate];
- _effectTimer = nil;
- _effectProgress = 0.0;
- } else {
- //backwards
- }
+ [_effectTimer invalidate];
+ _effectTimer = nil;
}
float degAngle = (angle * (pi / 180));
CGAffineTransform transform = CGAffineTransformMakeRotation(degAngle);
- // Set pivot point
+ // Set pivot rotation point
transform.tx = -32.0;
transform.ty = [_window frame].size.height + 32.0;
NSLog(@"ITSlideHorizontallyWindowEffect does not implement performVanish.");
}
+- (void)cancelAppear
+{
+ NSLog(@"ITSlideHorizontallyWindowEffect does not implement cancelAppear.");
+}
+
+- (void)cancelVanish
+{
+ NSLog(@"ITSlideHorizontallyWindowEffect does not implement cancelVanish.");
+}
+
@end
NSLog(@"ITSlideVerticallyWindowEffect does not implement performVanish.");
}
+- (void)cancelAppear
+{
+ NSLog(@"ITSlideVerticallyWindowEffect does not implement cancelAppear.");
+}
+
+- (void)cancelVanish
+{
+ NSLog(@"ITSlideVerticallyWindowEffect does not implement cancelVanish.");
+}
+
@end
* NSWindow subclass for quick display of status information.
* Similar to volume/brightness/eject bezel key windows.
*
- * Original Author : Kent Sutherland <joseph.spiros@ithinksw.com>
* Original Author : Matt Judy <mjudy@ithinksw.com>
* Responsibility : Matt Judy <mjudy@ithinksw.com>
* Responsibility : Joseph Spiros <joseph.spiros@ithinksw.com>
+ * Contributor : Kent Sutherland <joseph.spiros@ithinksw.com>
*
* Copyright (c) 2002 - 2003 iThink Software.
* All Rights Reserved
#import <Cocoa/Cocoa.h>
#import "ITWindowPositioning.h"
-
+#import "ITWindowEffect.h"
#define DEFAULT_EXIT_DELAY 3.0
typedef enum {
- ITTransientStatusWindowHiddenState,
- ITTransientStatusWindowAppearingState,
- ITTransientStatusWindowVisibleState,
- ITTransientStatusWindowVanishingState
-} ITTransientStatusWindowVisibilityState;
-
-typedef enum {
- ITTransientStatusWindowExitOnOrderOut,
+ ITTransientStatusWindowExitOnCommand,
ITTransientStatusWindowExitAfterDelay,
} ITTransientStatusWindowExitMode;
+
typedef enum {
ITTransientStatusWindowNoBackground,
ITTransientStatusWindowRounded,
ITTransientStatusWindowAquaUtility
} ITTransientStatusWindowBackgroundType;
-@interface ITTransientStatusWindow : NSWindow <ITWindowPositioning> {
- ITTransientStatusWindowVisibilityState _visibilityState;
+@interface ITTransientStatusWindow : NSWindow <ITWindowPositioning , ITWindowVisibility> {
+
+ ITWindowVisibilityState _visibilityState;
ITTransientStatusWindowExitMode _exitMode;
float _exitDelay;
ITTransientStatusWindowBackgroundType _backgroundType;
exitMode:(ITTransientStatusWindowExitMode)exitMode
backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType;
-- (ITTransientStatusWindowVisibilityState)visibilityState;
+- (void)appear:(id)sender;
+- (void)vanish:(id)sender;
+
+- (ITWindowVisibilityState)visibilityState;
+- (void)setVisibilityState:(ITWindowVisibilityState)newState;
- (ITTransientStatusWindowExitMode)exitMode;
- (void)setExitMode:(ITTransientStatusWindowExitMode)newMode;
exitMode:(ITTransientStatusWindowExitMode)exitMode
backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType;
- (void)rebuildWindow;
-// - (void)performEffect;
+- (void)startVanishTimer;
@end
_reallyIgnoresEvents = flag;
}
-/*
-
-- (void)orderFront:(id)sender
-{
- if ( _entryEffect == nil ) {
- [super orderFront:sender];
- _visibilityState = ITTransientStatusWindowVisibleState;
- } else {
- [self performEffect];
- }
- if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) {
- // set the timer, and orderOut: when it lapses.
- }
-}
-
-- (void)makeKeyAndOrderFront:(id)sender
-{
- if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) {
- // set the timer, and orderOut: when it lapses.
- }
- if ( _entryEffect == nil ) {
- [super makeKeyAndOrderFront:sender];
- _visibilityState = ITTransientStatusWindowVisibleState;
- } else {
- [self performEffect];
- [self makeKeyWindow];
- }
-}
-
-- (void)orderOut:(id)sender
-{
- if ( _entryEffect == nil ) {
- [super orderOut:sender];
- _visibilityState = ITTransientStatusWindowHiddenState;
- } else {
- [self performEffect];
- }
-}
-
-- (NSTimeInterval)animationResizeTime:(NSRect)newFrame
-{
- return _resizeTime;
-}
+/*
- (id)contentView
{
*/
-- (void)appear
-{
- if ( _entryEffect == nil ) {
- [self orderFront:self];
- _visibilityState = ITTransientStatusWindowVisibleState;
- } else {
- _visibilityState = ITTransientStatusWindowAppearingState;
- [_entryEffect performAppear];
- _visibilityState = ITTransientStatusWindowVisibleState;
+ - (IBAction)appear:(id)sender
+ {
+ NSLog(@"%i", _visibilityState);
+ if ( _visibilityState == ITTransientStatusWindowHiddenState ) {
+ // Window is hidden. Appear as normal, and start the timer.
+ if ( _entryEffect == nil ) {
+ [self orderFront:self];
+ _visibilityState = ITTransientStatusWindowVisibleState;
+ } else {
+ _visibilityState = ITTransientStatusWindowAppearingState;
+ [_entryEffect performAppear];
+ _visibilityState = ITTransientStatusWindowVisibleState;
+ }
+ [self startVanishTimer];
+ } else if ( _visibilityState == ITTransientStatusWindowVisibleState ) {
+ // Window is completely visible. Simply reset the timer.
+ [self startVanishTimer];
+ } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) {
+ // Window is appearing. Do nothing.
+ } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) {
+ NSLog(@"%i", _visibilityState);
+ if ( _exitEffect == nil ) {
+ [self orderFront:self];
+ _visibilityState = ITTransientStatusWindowVisibleState;
+ } else {
+ _visibilityState = ITTransientStatusWindowAppearingState;
+ [_exitEffect cancelVanish];
+ _visibilityState = ITTransientStatusWindowVisibleState;
+ }
+ [self startVanishTimer];
}
- if ( _exitMode == ITTransientStatusWindowExitAfterDelay ) {
- // set the timer, and vanish when it lapses.
+ }
+
+- (IBAction)vanish:(id)sender
+{
+ if ( _visibilityState == ITTransientStatusWindowVisibleState ) {
+ // Window is totally visible. Perform exit effect.
+ if ( _exitEffect == nil ) {
+ [self orderOut:self];
+ _visibilityState = ITTransientStatusWindowHiddenState;
+ } else {
+ _visibilityState = ITTransientStatusWindowVanishingState;
+ NSLog(@"%i", _visibilityState);
+ [_exitEffect performVanish];
+ NSLog(@"%i", _visibilityState);
+ _visibilityState = ITTransientStatusWindowHiddenState;
+ NSLog(@"%i", _visibilityState);
+ }
+ [self startVanishTimer];
+ } else if ( _visibilityState == ITTransientStatusWindowHiddenState ) {
+ // Window is hidden. Do nothing.
+ } else if ( _visibilityState == ITTransientStatusWindowAppearingState ) {
+ // Window is on its way in. Cancel appear.
+ [_entryEffect cancelAppear];
+ _visibilityState = ITTransientStatusWindowHiddenState;
+ } else if ( _visibilityState == ITTransientStatusWindowVanishingState ) {
+ // Window is on its way out. Do nothing.
}
}
-- (void)vanish
+- (ITWindowVisibilityState)visibilityState
{
- if ( _entryEffect == nil ) {
- [self orderOut:self];
- _visibilityState = ITTransientStatusWindowHiddenState;
- } else {
- [_exitEffect performVanish];
- _visibilityState = ITTransientStatusWindowHiddenState;
- }
+ return _visibilityState;
}
-- (ITTransientStatusWindowVisibilityState)visibilityState
+- (void)setVisibilityState:(ITWindowVisibilityState)newState
{
- return _visibilityState;
+ _visibilityState = newState;
}
- (ITTransientStatusWindowExitMode)exitMode
}
}
-/*
-
-- (void)performEffect
+- (void)startVanishTimer
{
- if ( _visibilityState == ITTransientStatusWindowHiddenState ) {
- _visibilityState = ITTransientStatusWindowEnteringState;
- } else if ( _visibilityState == ITTransientStatusWindowVisibleState ) {
- _visibilityState = ITTransientStatusWindowExitingState;
- } else {
- return;
- }
-
- if ( _entryEffect == ITTransientStatusWindowEffectDissolve ) {
- [self dissolveEffect];
- } else if ( _entryEffect == ITTransientStatusWindowEffectSlideVertically ) {
- [self slideVerticalEffect];
- } else if ( _entryEffect == ITTransientStatusWindowEffectSlideHorizontally ) {
- [self slideHorizontalEffect];
- } else if ( _entryEffect == ITTransientStatusWindowEffectPivot ) {
- [self pivotEffect];
- }
-}
-
-*/
+}
@end
#define DEFAULT_EFFECT_TIME 0.75
-@protocol ITWindowEffect
+typedef enum {
+ ITTransientStatusWindowHiddenState,
+ ITTransientStatusWindowAppearingState,
+ ITTransientStatusWindowVisibleState,
+ ITTransientStatusWindowVanishingState
+} ITWindowVisibilityState;
+
+@protocol ITWindowEffect
- (void)performAppear;
- (void)performVanish;
+- (void)cancelAppear;
+- (void)cancelVanish;
+@end
+
+@protocol ITWindowVisibility
+- (ITWindowVisibilityState)visibilityState;
+- (void)setVisibilityState:(ITWindowVisibilityState)newState;
@end
- (NSWindow *)window;
-// setWindow: does not retain or release its window. It simply references it.
- (void)setWindow:(NSWindow *)newWindow;
+- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState;
+
@end
#import "ITWindowEffect.h"
+#import "ITTransientStatusWindow.h"
@implementation ITWindowEffect
_effectTimer = nil;
if ( [window conformsToProtocol:@protocol(ITWindowPositioning)] ) {
- _verticalPosition = (ITVerticalWindowPosition)[window verticalPosition];
- _horizontalPosition = (ITHorizontalWindowPosition)[window horizontalPosition];
+ // Casts so the compiler won't gripe
+ _verticalPosition = (ITVerticalWindowPosition)[(ITTransientStatusWindow *)window verticalPosition];
+ _horizontalPosition = (ITHorizontalWindowPosition)[(ITTransientStatusWindow *)window horizontalPosition];
} else {
NSLog(@"ITWindowEffect - initWithWindow: - window does not conform to ITWindowPositioning.");
_verticalPosition = ITWindowPositionBottom;
- (void)setWindow:(NSWindow *)newWindow
{
- _window = newWindow;
+ [_window autorelease];
+ _window = [newWindow retain];
+}
+
+- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState
+{
+ if ( [_window conformsToProtocol:@protocol(ITWindowVisibility)] ) {
+ // Cast so the compiler won't gripe
+ [(ITTransientStatusWindow *)_window setVisibilityState:visibilityState];
+ } else {
+ NSLog(@"ITWindowEffect - setWindowVisibility: - window does not conform to ITWindowVisibility.");
+ }
}
- (void)performAppear
NSLog(@"ITWindowEffect does not implement performVanish.");
}
+- (void)cancelAppear
+{
+ NSLog(@"ITWindowEffect does not implement cancelAppear.");
+}
+
+- (void)cancelVanish
+{
+ NSLog(@"ITWindowEffect does not implement cancelVanish.");
+}
+
- (void)dealloc
{
[_window release];
#import "Controller.h"
#import "ITTransientStatusWindow.h"
#import "ITTextField.h"
+#import "ITPivotWindowEffect.h"
#define SW_PAD 24.0
#define SW_SPACE 24.0
[[statusWindow contentView] addSubview:textField];
[[statusWindow contentView] setNeedsDisplay:YES];
+
+ [statusWindow setEntryEffect:[[ITPivotWindowEffect alloc] initWithWindow:statusWindow]];
+ [statusWindow setExitEffect:[[ITPivotWindowEffect alloc] initWithWindow:statusWindow]];
}
- (IBAction)showStatusWindow:(id)sender
NSHeight([statusWindow frame]) )
display:YES];
*/
- [statusWindow orderFront:self];
+ [statusWindow appear:self];
/*
[statusWindow setFrame:NSMakeRect( SW_BORDER,
SW_BORDER,
- (IBAction)hideStatusWindow:(id)sender
{
- [statusWindow orderOut:self];
+ [statusWindow vanish:self];
}
- (IBAction)setRotation:(id)sender
{
- [statusWindow setPivot:[sender floatValue]];
+ NSLog(@"no longer supported");
}
/*************************************************************************/
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
- <string>3 3 356 240 0 0 1152 746 </string>
+ <string>3 3 356 240 0 0 1056 770 </string>
<key>IBEditorPositions</key>
<dict>
<key>197</key>
<string>69 252 75 120 0 0 1056 770 </string>
<key>29</key>
- <string>43 283 349 44 0 0 1152 746 </string>
+ <string>38 293 349 44 0 0 1056 770 </string>
</dict>
<key>IBFramework Version</key>
- <string>291.0</string>
+ <string>286.0</string>
<key>IBOpenObjects</key>
<array>
<integer>21</integer>
<integer>29</integer>
</array>
<key>IBSystem Version</key>
- <string>6G30</string>
+ <string>6I32</string>
</dict>
</plist>