diff dstep/foundation/NSURL.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 7ff919f595d5
children b9de51448c6b
line wrap: on
line diff
--- a/dstep/foundation/NSURL.d	Mon Aug 03 15:31:48 2009 +0200
+++ b/dstep/foundation/NSURL.d	Sun Jan 03 22:06:11 2010 +0100
@@ -6,28 +6,44 @@
  */
 module dstep.foundation.NSURL;
 
+import dstep.foundation.NSCoder;
 import dstep.foundation.NSData;
 import dstep.foundation.NSDictionary;
-import dstep.foundation.NSNumber;
 import dstep.foundation.NSObject;
 import dstep.foundation.NSString;
 import dstep.foundation.NSURLHandle;
+import dstep.foundation.NSValue;
+import dstep.foundation.NSZone;
 import dstep.objc.bridge.Bridge;
-import dstep.objc.objc : id;
+import dstep.objc.objc;
+
+
 
 import bindings = dstep.foundation.NSURL_bindings;
 
-NSString NSURLFileScheme;
+private NSString NSURLFileScheme_;
 
-static this ()
+NSString NSURLFileScheme ()
 {
-	NSURLFileScheme = new NSString(bindings.NSURLFileScheme);
+	if (NSURLFileScheme_)
+		return NSURLFileScheme_;
+	
+	return NSURLFileScheme_ = new NSString(bindings.NSURLFileScheme);
 }
 
 class NSURL : NSObject, INSCoding, INSCopying, INSURLHandleClient
 {
-	mixin ObjcWrap;
-	mixin TNSURLLoading;
+	mixin (ObjcWrap);
+	
+	this ()
+	{
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
+	}
 
 	Object initWithScheme (NSString scheme, NSString host, NSString path)
 	{
@@ -36,13 +52,7 @@
 
 	this (NSString scheme, NSString host, NSString path)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithScheme:host:path:", NSString, NSString, NSString)(objcObject, scheme, host, path);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithScheme(scheme, host, path);
 	}
 
 	Object initFileURLWithPath (NSString path, bool isDir)
@@ -52,13 +62,7 @@
 
 	this (NSString path, bool isDir)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initFileURLWithPath:isDirectory:", NSString, bool)(objcObject, path, isDir);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initFileURLWithPath(path, isDir);
 	}
 
 	Object initFileURLWithPath (NSString path)
@@ -66,25 +70,14 @@
 		return invokeObjcSelf!(Object, "initFileURLWithPath:", NSString)(path);
 	}
 
-	this (NSString path)
-	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initFileURLWithPath:", NSString)(objcObject, path);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
-	}
-
 	static Object fileURLWithPath (NSString path, bool isDir)
 	{
-		return invokeObjcSelfClass!(Object, "fileURLWithPath:isDirectory:", NSString, bool)(path, isDir);
+		return invokeObjcSuperClass!(Object, "fileURLWithPath:isDirectory:", NSString, bool)(path, isDir);
 	}
 
 	static Object fileURLWithPath (NSString path)
 	{
-		return invokeObjcSelfClass!(Object, "fileURLWithPath:", NSString)(path);
+		return invokeObjcSuperClass!(Object, "fileURLWithPath:", NSString)(path);
 	}
 
 	Object initWithString (NSString URLString)
@@ -94,13 +87,7 @@
 
 	this (NSString URLString)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithString:", NSString)(objcObject, URLString);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithString(URLString);
 	}
 
 	Object initWithString (NSString URLString, NSURL baseURL)
@@ -110,23 +97,17 @@
 
 	this (NSString URLString, NSURL baseURL)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithString:relativeToURL:", NSString, NSURL)(objcObject, URLString, baseURL);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithString(URLString, baseURL);
 	}
 
 	static Object URLWithString (NSString URLString)
 	{
-		return invokeObjcSelfClass!(Object, "URLWithString:", NSString)(URLString);
+		return invokeObjcSuperClass!(Object, "URLWithString:", NSString)(URLString);
 	}
 
 	static Object URLWithString (NSString URLString, NSURL baseURL)
 	{
-		return invokeObjcSelfClass!(Object, "URLWithString:relativeToURL:", NSString, NSURL)(URLString, baseURL);
+		return invokeObjcSuperClass!(Object, "URLWithString:relativeToURL:", NSString, NSURL)(URLString, baseURL);
 	}
 
 	NSString absoluteString ()
@@ -229,13 +210,7 @@
 
 	this (NSCoder aDecoder)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithCoder:", NSCoder)(objcObject, aDecoder);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithCoder(aDecoder);
 	}
 
 	Object copyWithZone (NSZone* zone)
@@ -267,10 +242,41 @@
 	{
 		return invokeObjcSelf!(void, "URLHandle:resourceDidFailLoadingWithReason:", NSURLHandle, NSString)(sender, reason);
 	}
+	
+	// TNSURLLoading
+	NSData resourceDataUsingCache (bool shouldUseCache)
+	{
+		return invokeObjcSelf!(NSData, "resourceDataUsingCache:", bool)(shouldUseCache);
+	}
+	
+	void loadResourceDataNotifyingClient (Object client, bool shouldUseCache)
+	{
+		return invokeObjcSelf!(void, "loadResourceDataNotifyingClient:usingCache:", Object, bool)(client, shouldUseCache);
+	}
+	
+	Object propertyForKey (NSString propertyKey)
+	{
+		return invokeObjcSelf!(Object, "propertyForKey:", NSString)(propertyKey);
+	}
+	
+	bool setResourceData (NSData data)
+	{
+		return invokeObjcSelf!(bool, "setResourceData:", NSData)(data);
+	}
+	
+	bool setProperty (Object property, NSString propertyKey)
+	{
+		return invokeObjcSelf!(bool, "setProperty:forKey:", Object, NSString)(property, propertyKey);
+	}
+	
+	NSURLHandle URLHandleUsingCache (bool shouldUseCache)
+	{
+		return invokeObjcSelf!(NSURLHandle, "URLHandleUsingCache:", bool)(shouldUseCache);
+	}
 }
 
-template TNSURLLoading ()
-{
+const TNSURLLoading = `
+
 	NSData resourceDataUsingCache (bool shouldUseCache)
 	{
 		return invokeObjcSelf!(NSData, "resourceDataUsingCache:", bool)(shouldUseCache);
@@ -300,18 +306,38 @@
 	{
 		return invokeObjcSelf!(NSURLHandle, "URLHandleUsingCache:", bool)(shouldUseCache);
 	}
-}
+`;
+
+const TNSURLClient = `
 
-template TNSURLClient ()
-{
-	void URL (NSURL sender, NSData newBytes);
-	void URLResourceDidFinishLoading (NSURL sender);
-	void URLResourceDidCancelLoading (NSURL sender);
-	void URL (NSURL sender, NSString reason);
-}
+	void URL (NSURL sender, NSData newBytes)
+	{
+		return invokeObjcSelf!(void, "URL:resourceDataDidBecomeAvailable:", NSURL, NSData)(sender, newBytes);
+	}
+			
+	void URLResourceDidFinishLoading (NSURL sender)
+	{
+		return invokeObjcSelf!(void, "URLResourceDidFinishLoading:", NSURL)(sender);
+	}
+	
+	void URLResourceDidCancelLoading (NSURL sender)
+	{
+		return invokeObjcSelf!(void, "URLResourceDidCancelLoading:", NSURL)(sender);
+	}
+	
+	void URL (NSURL sender, NSString reason)
+	{
+		return invokeObjcSelf!(void, "URL:resourceDidFailLoadingWithReason:", NSURL, NSString)(sender, reason);
+	}
+	
+	//mixin ObjcBindMethod!(URL, "URL:resourceDataDidBecomeAvailable:");
+	//mixin ObjcBindMethod!(URLResourceDidFinishLoading, "URLResourceDidFinishLoading:");
+	//mixin ObjcBindMethod!(URLResourceDidCancelLoading, "URLResourceDidCancelLoading:");
+	//mixin ObjcBindMethod!(URL, "URL:resourceDidFailLoadingWithReason:");
+`;
 
-template TNSURLUtilities ()
-{
+const TNSURLUtilities = `
+
 	NSString stringByAddingPercentEscapesUsingEncoding (uint enc)
 	{
 		return invokeObjcSelf!(NSString, "stringByAddingPercentEscapesUsingEncoding:", uint)(enc);
@@ -321,5 +347,4 @@
 	{
 		return invokeObjcSelf!(NSString, "stringByReplacingPercentEscapesUsingEncoding:", uint)(enc);
 	}
-}
-
+`;
\ No newline at end of file