view dstep/appkit/NSAnimation.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents
children b9de51448c6b
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Sep 24, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.appkit.NSAnimation;

import dstep.appkit.AppKitDefines;
import dstep.appkit.NSGraphicsContext;
import dstep.foundation.NSArray;
import dstep.foundation.NSCoder;
import dstep.foundation.NSDictionary;
import dstep.foundation.NSObjCRuntime;
import dstep.foundation.NSObject;
import dstep.foundation.NSString;
import dstep.foundation.NSTimer;
import dstep.foundation.NSString;
import dstep.foundation.NSZone;
import dstep.objc.bridge.Bridge;
import dstep.objc.objc;

import bindings = dstep.appkit.NSAnimation_bindings;

alias NSUInteger NSAnimationCurve;
alias NSUInteger NSAnimationBlockingMode;
alias float NSAnimationProgress;

private
{
	NSString NSAnimationProgressMarkNotification_;
	NSString NSAnimationProgressMark_;
	NSString NSViewAnimationTargetKey_;
	NSString NSViewAnimationStartFrameKey_;
	NSString NSViewAnimationEndFrameKey_;
	NSString NSViewAnimationEffectKey_;
	NSString NSViewAnimationFadeInEffect_;
	NSString NSViewAnimationFadeOutEffect_;
	NSString NSAnimationTriggerOrderIn_;
	NSString NSAnimationTriggerOrderOut_;
}

NSString NSAnimationProgressMarkNotification ()
{
	if (NSAnimationProgressMarkNotification_)
		return NSAnimationProgressMarkNotification_;

	return NSAnimationProgressMarkNotification_ = new NSString(bindings.NSAnimationProgressMarkNotification);
}

NSString NSAnimationProgressMark ()
{
	if (NSAnimationProgressMark_)
		return NSAnimationProgressMark_;

	return NSAnimationProgressMark_ = new NSString(bindings.NSAnimationProgressMark);
}

NSString NSViewAnimationTargetKey ()
{
	if (NSViewAnimationTargetKey_)
		return NSViewAnimationTargetKey_;

	return NSViewAnimationTargetKey_ = new NSString(bindings.NSViewAnimationTargetKey);
}

NSString NSViewAnimationStartFrameKey ()
{
	if (NSViewAnimationStartFrameKey_)
		return NSViewAnimationStartFrameKey_;

	return NSViewAnimationStartFrameKey_ = new NSString(bindings.NSViewAnimationStartFrameKey);
}

NSString NSViewAnimationEndFrameKey ()
{
	if (NSViewAnimationEndFrameKey_)
		return NSViewAnimationEndFrameKey_;

	return NSViewAnimationEndFrameKey_ = new NSString(bindings.NSViewAnimationEndFrameKey);
}

NSString NSViewAnimationEffectKey ()
{
	if (NSViewAnimationEffectKey_)
		return NSViewAnimationEffectKey_;

	return NSViewAnimationEffectKey_ = new NSString(bindings.NSViewAnimationEffectKey);
}

NSString NSViewAnimationFadeInEffect ()
{
	if (NSViewAnimationFadeInEffect_)
		return NSViewAnimationFadeInEffect_;

	return NSViewAnimationFadeInEffect_ = new NSString(bindings.NSViewAnimationFadeInEffect);
}

NSString NSViewAnimationFadeOutEffect ()
{
	if (NSViewAnimationFadeOutEffect_)
		return NSViewAnimationFadeOutEffect_;

	return NSViewAnimationFadeOutEffect_ = new NSString(bindings.NSViewAnimationFadeOutEffect);
}

NSString NSAnimationTriggerOrderIn ()
{
	if (NSAnimationTriggerOrderIn_)
		return NSAnimationTriggerOrderIn_;

	return NSAnimationTriggerOrderIn_ = new NSString(bindings.NSAnimationTriggerOrderIn);
}

NSString NSAnimationTriggerOrderOut ()
{
	if (NSAnimationTriggerOrderOut_)
		return NSAnimationTriggerOrderOut_;

	return NSAnimationTriggerOrderOut_ = new NSString(bindings.NSAnimationTriggerOrderOut);
}

enum
{
	NSAnimationEaseInOut,
	NSAnimationEaseIn,
	NSAnimationEaseOut,
	NSAnimationLinear
}

enum
{
	NSAnimationBlocking,
	NSAnimationNonblocking,
	NSAnimationNonblockingThreaded
}

class NSAnimation : NSObject, INSCopying, INSCoding
{
	mixin (ObjcWrap);
	
	this (NSCoder aDecoder)
	{
		super(typeof(this).alloc.initWithCoder(aDecoder).objcObject);
	}
	
	void encodeWithCoder (NSCoder aCoder)
	{
		return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder);
	}
	
	typeof(this) initWithCoder (NSCoder aDecoder)
	{
		return invokeObjcSelf!(typeof(this), "initWithCoder:", NSCoder)(aDecoder);
	}
	
	typeof(this) copyWithZone (NSZone* zone)
	{
		return invokeObjcSelf!(typeof(this), "copyWithZone:", NSZone*)(zone);
	}

	NSAnimation initWithDuration (double duration, uint animationCurve)
	{
		id result = invokeObjcSelf!(id, "initWithDuration:animationCurve:", double, uint)(duration, animationCurve);
		return result is this.objcObject ? this : (result !is null ? new NSAnimation(result) : null);
	}

	this (double duration, uint animationCurve)
	{
		super(NSAnimation.alloc.initWithDuration(duration, animationCurve).objcObject);
	}

	void startAnimation ()
	{
		return invokeObjcSelf!(void, "startAnimation");
	}

	void stopAnimation ()
	{
		return invokeObjcSelf!(void, "stopAnimation");
	}

	bool isAnimating ()
	{
		return invokeObjcSelf!(bool, "isAnimating");
	}

	float currentProgress ()
	{
		return invokeObjcSelf!(float, "currentProgress");
	}

	void setCurrentProgress (float progress)
	{
		return invokeObjcSelf!(void, "setCurrentProgress:", float)(progress);
	}

	void setDuration (double duration)
	{
		return invokeObjcSelf!(void, "setDuration:", double)(duration);
	}

	double duration ()
	{
		return invokeObjcSelf!(double, "duration");
	}

	uint animationBlockingMode ()
	{
		return invokeObjcSelf!(uint, "animationBlockingMode");
	}

	void setAnimationBlockingMode (uint animationBlockingMode)
	{
		return invokeObjcSelf!(void, "setAnimationBlockingMode:", uint)(animationBlockingMode);
	}

	void setFrameRate (float framesPerSecond)
	{
		return invokeObjcSelf!(void, "setFrameRate:", float)(framesPerSecond);
	}

	float frameRate ()
	{
		return invokeObjcSelf!(float, "frameRate");
	}

	void setAnimationCurve (uint curve)
	{
		return invokeObjcSelf!(void, "setAnimationCurve:", uint)(curve);
	}

	uint animationCurve ()
	{
		return invokeObjcSelf!(uint, "animationCurve");
	}

	float currentValue ()
	{
		return invokeObjcSelf!(float, "currentValue");
	}

	void setDelegate (Object delegate_)
	{
		return invokeObjcSelf!(void, "setDelegate:", Object)(delegate_);
	}

	Object delegate_ ()
	{
		return invokeObjcSelf!(Object, "delegate");
	}

	NSArray progressMarks ()
	{
		return invokeObjcSelf!(NSArray, "progressMarks");
	}

	void setProgressMarks (NSArray progressMarks)
	{
		return invokeObjcSelf!(void, "setProgressMarks:", NSArray)(progressMarks);
	}

	void addProgressMark (float progressMark)
	{
		return invokeObjcSelf!(void, "addProgressMark:", float)(progressMark);
	}

	void removeProgressMark (float progressMark)
	{
		return invokeObjcSelf!(void, "removeProgressMark:", float)(progressMark);
	}

	void startWhenAnimation (NSAnimation animation, float startProgress)
	{
		return invokeObjcSelf!(void, "startWhenAnimation:reachesProgress:", NSAnimation, float)(animation, startProgress);
	}

	void stopWhenAnimation (NSAnimation animation, float stopProgress)
	{
		return invokeObjcSelf!(void, "stopWhenAnimation:reachesProgress:", NSAnimation, float)(animation, stopProgress);
	}

	void clearStartAnimation ()
	{
		return invokeObjcSelf!(void, "clearStartAnimation");
	}

	void clearStopAnimation ()
	{
		return invokeObjcSelf!(void, "clearStopAnimation");
	}

	NSArray runLoopModesForAnimating ()
	{
		return invokeObjcSelf!(NSArray, "runLoopModesForAnimating");
	}

}

class NSViewAnimation : NSAnimation
{
	mixin (ObjcWrap);

	NSViewAnimation initWithViewAnimations (NSArray viewAnimations)
	{
		id result = invokeObjcSelf!(id, "initWithViewAnimations:", NSArray)(viewAnimations);
		return result is this.objcObject ? this : (result !is null ? new NSViewAnimation(result) : null);
	}

	this (NSArray viewAnimations)
	{
		super(NSViewAnimation.alloc.initWithViewAnimations(viewAnimations).objcObject);
	}

	NSArray viewAnimations ()
	{
		return invokeObjcSelf!(NSArray, "viewAnimations");
	}

	void setViewAnimations (NSArray viewAnimations)
	{
		return invokeObjcSelf!(void, "setViewAnimations:", NSArray)(viewAnimations);
	}
}

interface INSAnimatablePropertyContainer
{
	Object animator ();
	NSDictionary animations ();
	void setAnimations (NSDictionary dict);
	Object animationForKey (NSString key);
	static Object defaultAnimationForKey (NSString key);
}

const TNSAnimationDelegate = `

	bool animationShouldStart (NSAnimation animation)
	{
		return invokeObjcSelf!(bool, "animationShouldStart:", NSAnimation)(animation);
	}

	void animationDidStop (NSAnimation animation)
	{
		return invokeObjcSelf!(void, "animationDidStop:", NSAnimation)(animation);
	}

	void animationDidEnd (NSAnimation animation)
	{
		return invokeObjcSelf!(void, "animationDidEnd:", NSAnimation)(animation);
	}

	float animation (NSAnimation animation, float progress)
	{
		return invokeObjcSelf!(float, "animation:valueForProgress:", NSAnimation, float)(animation, progress);
	}

	void animation (NSAnimation animation, float progress)
	{
		return invokeObjcSelf!(void, "animation:didReachProgressMark:", NSAnimation, float)(animation, progress);
	}

	//mixin ObjcBindMethod!(animationShouldStart, "animationShouldStart:");
	//mixin ObjcBindMethod!(animationDidStop, "animationDidStop:");
	//mixin ObjcBindMethod!(animationDidEnd, "animationDidEnd:");
	//mixin ObjcBindMethod!(animation, "animation:valueForProgress:");
	//mixin ObjcBindMethod!(animation, "animation:didReachProgressMark:");

`;