Intermediary checkin for effect list... more coming.
[ITKit.git] / ITWindowEffect.m
index d485df5..2b1d4fe 100755 (executable)
 
 @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];