@implementation ITWindowEffect
++ (NSArray *)effectsInfo
+{
+ int ce;
+ NSMutableArray *finalArray = [[[NSMutableArray alloc] initWithCapacity:5] autorelease];
+
+ NSArray *effectKeys = [NSArray arrayWithObjects:
+ @"Name",
+ @"Class",
+ @"Positions",
+ nil];
+
+ NSArray *effectNames = [NSArray arrayWithObjects:
+ @"Cut",
+ @"Dissolve",
+ @"Slide Horizontally",
+ @"Slide Vertically",
+ @"Pivot",
+ nil];
+
+ NSArray *classNames = [NSArray arrayWithObjects:
+ @"ITCutWindowEffect",
+ @"ITDissolveWindowEffect",
+ @"ITSlideHorizontallyWindowEffect",
+ @"ITSlideVerticallyWindowEffect",
+ @"ITPivotWindowEffect",
+ nil];
+
+ NSArray *positionKeys = [NSArray arrayWithObjects:
+ @"TopLeft",
+ @"TopCenter",
+ @"TopRight",
+ @"MiddleLeft",
+ @"MiddleCenter",
+ @"MiddleRight",
+ @"BottomLeft",
+ @"BottomCenter",
+ @"BottomRight",
+ nil];
+
+ NSArray *cutPositionValues = [NSArray arrayWithObjects:
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ nil];
+
+ NSArray *dissolvePositionValues = [NSArray arrayWithObjects:
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ nil];
+
+ NSArray *slideVerticallyPositionValues = [NSArray arrayWithObjects:
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ nil];
+
+ NSArray *slideHorizontallyPositionValues = [NSArray arrayWithObjects:
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ nil];
+
+ NSArray *pivotPositionValues = [NSArray arrayWithObjects:
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ [NSNumber numberWithBool:NO],
+ [NSNumber numberWithBool:YES],
+ nil];
+
+ NSArray *positionDicts = [NSArray arrayWithObjects:
+ [NSDictionary dictionaryWithObjects:cutPositionValues
+ forKeys:positionKeys],
+ [NSDictionary dictionaryWithObjects:dissolvePositionValues
+ forKeys:positionKeys],
+ [NSDictionary dictionaryWithObjects:slideVerticallyPositionValues
+ forKeys:positionKeys],
+ [NSDictionary dictionaryWithObjects:slideHorizontallyPositionValues
+ forKeys:positionKeys],
+ [NSDictionary dictionaryWithObjects:pivotPositionValues
+ forKeys:positionKeys],
+ nil];
+
+ for ( ce = 0 ; ce < [effectNames count] ; ce++ ) {
+
+ NSArray *entryValues = [NSArray arrayWithObjects:
+ [effectNames objectAtIndex:ce],
+ [classNames objectAtIndex:ce],
+ [positionDicts objectAtIndex:ce],
+ nil];
+
+ NSDictionary *entryDict = [NSDictionary dictionaryWithObjects:entryValues
+ forKeys:effectKeys];
+ [finalArray addObject:entryDict];
+ }
+
+ return finalArray;
+}
- (id)initWithWindow:(NSWindow *)window
{
if ( (self = [super init]) ) {
- _window = [window retain];
- _effectTime = DEFAULT_EFFECT_TIME;
- _effectProgress = 0.00;
- _effectTimer = nil;
+ _window = [window retain];
+ _effectTime = DEFAULT_EFFECT_TIME;
+ _effectTimer = nil;
+ __shouldReleaseWhenIdle = NO;
+ __idle = YES;
if ( [window conformsToProtocol:@protocol(ITWindowPositioning)] ) {
// Casts so the compiler won't gripe
- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState
{
- if ( [_window conformsToProtocol:@protocol(ITWindowVisibility)] ) {
+ if ( [_window conformsToProtocol:@protocol(ITWindowMotility)] ) {
// Cast so the compiler won't gripe
[(ITTransientStatusWindow *)_window setVisibilityState:visibilityState];
} else {
NSLog(@"ITWindowEffect does not implement cancelVanish.");
}
+- (void)releaseWhenIdle;
+{
+ if ( __idle ) {
+ [self release];
+ } else {
+ __shouldReleaseWhenIdle = YES;
+ }
+}
+
- (void)dealloc
{
[_window release];