X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/956cd3a65d5db0783f21b732aba63316bfb77fbe..280d630740afd8d04195f16d70829cf639a69f30:/ITWindowEffect.m diff --git a/ITWindowEffect.m b/ITWindowEffect.m index d485df5..2b1d4fe 100755 --- a/ITWindowEffect.m +++ b/ITWindowEffect.m @@ -4,15 +4,143 @@ @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 @@ -40,7 +168,7 @@ - (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 { @@ -78,6 +206,15 @@ NSLog(@"ITWindowEffect does not implement cancelVanish."); } +- (void)releaseWhenIdle; +{ + if ( __idle ) { + [self release]; + } else { + __shouldReleaseWhenIdle = YES; + } +} + - (void)dealloc { [_window release];