Checking in improvements to the effect availability heuristic.
[ITKit.git] / ITWindowEffect.m
index 5c32fb4..5745bd7 100755 (executable)
@@ -1,20 +1,42 @@
-//
-//  ITWindowEffect.m
-//  ITKit
-//
-//  Created by Matt L. Judy on Sat Mar 01 2003.
-//  Copyright (c) 2003 NibFile.com. All rights reserved.
-//
-
 #import "ITWindowEffect.h"
+#import "ITTransientStatusWindow.h"
 
 
 @implementation ITWindowEffect
 
++ (NSArray *)effectClasses
+{
+    NSArray *classes = [NSArray arrayWithObjects:
+        NSClassFromString(@"ITCutWindowEffect"),
+        NSClassFromString(@"ITDissolveWindowEffect"),
+        NSClassFromString(@"ITSlideHorizontallyWindowEffect"),
+        NSClassFromString(@"ITSlideVerticallyWindowEffect"),
+        NSClassFromString(@"ITPivotWindowEffect"),
+        nil];
+        
+    return classes;
+}
 
 - (id)initWithWindow:(NSWindow *)window
 {
-    _window = window;
+    if ( (self = [super init]) ) {
+        _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
+            _verticalPosition   = (ITVerticalWindowPosition)[(ITTransientStatusWindow *)window verticalPosition];
+            _horizontalPosition = (ITHorizontalWindowPosition)[(ITTransientStatusWindow *)window horizontalPosition];
+        } else {
+            NSLog(@"ITWindowEffect - initWithWindow: - window does not conform to ITWindowPositioning.");
+            _verticalPosition   = ITWindowPositionBottom;
+            _horizontalPosition = ITWindowPositionLeft;
+        }
+    }
+    return self;
 }
 
 - (NSWindow *)window
 
 - (void)setWindow:(NSWindow *)newWindow
 {
-    _window = newWindow;
+    [_window autorelease];
+    _window = [newWindow retain];
+}
+
+- (void)setWindowVisibility:(ITWindowVisibilityState)visibilityState
+{
+    if ( [_window conformsToProtocol:@protocol(ITWindowMotility)] ) {
+       // Cast so the compiler won't gripe
+        [(ITTransientStatusWindow *)_window setVisibilityState:visibilityState];
+    } else {
+        NSLog(@"ITWindowEffect - setWindowVisibility: - window does not conform to ITWindowVisibility.");
+    }
+}
+
+- (float)effectTime
+{
+    return _effectTime;
+}
+
+- (void)setEffectTime:(float)newTime
+{
+    _effectTime = newTime;
+}
+
++ (NSString *)effectName
+{
+    NSLog(@"ITWindowEffect does not implement +effectName.");
+    return nil;
+}
+
++ (NSDictionary *)supportedPositions
+{
+    NSLog(@"ITWindowEffect does not implement +supportedPositions.");
+    
+//  Below is an example dictionary.  Modify it appropriately when subclassing.
+    return [NSDictionary dictionaryWithObjectsAndKeys:
+        [NSDictionary dictionaryWithObjectsAndKeys:
+            [NSNumber numberWithBool:NO], @"Left",
+            [NSNumber numberWithBool:NO], @"Center",
+            [NSNumber numberWithBool:NO], @"Right", nil] , @"Top" ,
+        [NSDictionary dictionaryWithObjectsAndKeys:
+            [NSNumber numberWithBool:NO], @"Left",
+            [NSNumber numberWithBool:NO], @"Center",
+            [NSNumber numberWithBool:NO], @"Right", nil] , @"Middle" ,
+        [NSDictionary dictionaryWithObjectsAndKeys:
+            [NSNumber numberWithBool:NO], @"Left",
+            [NSNumber numberWithBool:NO], @"Center",
+            [NSNumber numberWithBool:NO], @"Right", nil] , @"Bottom" , nil];
+}
+
++ (unsigned int)listOrder
+{
+    NSLog(@"ITWindowEffect does not implement +listOrder.");
+    return 0;
 }
 
 - (void)performAppear
 {
-    NSLog("ITWindowEffect does not implement performAppear.");
+    NSLog(@"ITWindowEffect does not implement -performAppear.");
 }
 
 - (void)performVanish
 {
-    NSLog("ITWindowEffect does not implement performVanish.");
+    NSLog(@"ITWindowEffect does not implement -performVanish.");
+}
+
+- (void)cancelAppear
+{
+    NSLog(@"ITWindowEffect does not implement -cancelAppear.");
+}
+
+- (void)cancelVanish
+{
+    NSLog(@"ITWindowEffect does not implement -cancelVanish.");
+}
+
+- (void)releaseWhenIdle;
+{
+    if ( __idle ) {
+        [self release];
+    } else {
+        __shouldReleaseWhenIdle = YES;
+    }
+}
+
+- (void)dealloc
+{
+       [_window release];
+       [super dealloc];
 }