<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>iphone/modules/UiModule/images/photoDefault.png</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -31,15 +31,22 @@
 	TitaniumImageView * imageView;
 	UIScrollView * scrollView;
 
-	TitaniumBlobWrapper * singleImageBlob;
+	NSURL *url;
+	UIImage *singleImageBlob;
 
 	CGSize imageSize;
 	BOOL scrollEnabled;
 	BOOL dirtyImage;
-//	NSArray * animatedImageUrls;
+	BOOL fetchRequired;
+	
+	UIImage* imageDefault;
 }
-@property(nonatomic,readwrite,retain)	TitaniumBlobWrapper * singleImageBlob;
+
+@property(nonatomic,readwrite,retain) UIImage * singleImageBlob;
+@property(nonatomic,readwrite,retain) UIImage* imageDefault;
+
 - (void) setUrl: (NSURL *) newUrl;
 - (UIImage *) singleImage;
+- (void)fetchImage;
 
 @end</diff>
      <filename>iphone/Classes/TitaniumImageViewController.h</filename>
    </modified>
    <modified>
      <diff>@@ -34,30 +34,46 @@
 
 
 @implementation TitaniumImageViewController
-@synthesize singleImageBlob;
+
+@synthesize singleImageBlob, imageDefault;
 
 - (void)didReceiveMemoryWarning {
 	// Releases the view if it doesn't have a superview.
     [super didReceiveMemoryWarning];
 	
 	// Release any cached data, images, etc that aren't in use.
+	[imageDefault release];
+	imageDefault=nil;
 }
 
-- (void)dealloc {
+- (void)dealloc 
+{
+	[singleImageBlob release];
+	[imageDefault release];
 	[imageView release];
+	[url release];
     [super dealloc];
 }
 
 - (void) readState: (id) inputState relativeToUrl: (NSURL *) baseUrl;
 {
 	if(![inputState isKindOfClass:[NSDictionary class]])return;
-	
+		
 	TitaniumBlobWrapper * newImageBlob = [inputState objectForKey:@&quot;image&quot;];
-	if([newImageBlob isKindOfClass:[TitaniumBlobWrapper class]]){
-		[self setSingleImageBlob:newImageBlob];
-	} else {
+	if([newImageBlob isKindOfClass:[TitaniumBlobWrapper class]])
+	{
+		[self setSingleImageBlob:[newImageBlob imageBlob]];
+	} 
+	else 
+	{
+		// set the default image while fetching
+		UIImage* iconImage = [UIImage imageNamed:@&quot;modules/ui/images/photoDefault.png&quot;];
+		[self setImageDefault:iconImage];
+
 		id imageUrlObject = [inputState objectForKey:@&quot;url&quot;];
-		if([imageUrlObject isKindOfClass:[NSString class]]){
+		if([imageUrlObject isKindOfClass:[NSString class]])
+		{
+			// will automatically put on new thread
 			NSURL * singleImageUrl = [NSURL URLWithString:imageUrlObject relativeToURL:baseUrl];
 			[self setUrl:singleImageUrl];
 		}
@@ -70,16 +86,11 @@
 #pragma mark Accessors
 - (UIImage *) singleImage;
 {
-	UIImage * result = [singleImageBlob imageBlob];
-	
-	if(result == nil){
-		//Add listener!
-	}
-	
-	if(imageSize.width &gt; 1.0){
-		//Reshape!
+	if (imageDefault!=nil)
+	{
+		return imageDefault;
 	}
-	return result;
+	return singleImageBlob;
 }
 
 
@@ -88,11 +99,28 @@
 	CGRect viewFrame;
 	viewFrame.origin = CGPointZero;
 	viewFrame.size = preferredViewSize;
+	
 	if(imageView==nil){
 		imageView = [[TitaniumImageView alloc] initWithFrame:viewFrame];
 		[imageView setDelegate:self];
+		[imageView setOpaque:NO];
+		[imageView setBackgroundColor:[UIColor clearColor]];
 		[imageView setImage:[self singleImage]];
+		if (imageDefault!=nil)
+		{
+			[imageView setContentMode:UIViewContentModeCenter];
+		}
+		else 
+		{
+			[imageView setContentMode:UIViewContentModeScaleToFill];
+		}
 	}
+
+	if (singleImageBlob==nil)
+	{
+		[self fetchImage];
+	}
+	
 	if(!scrollEnabled){
 		[imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
 		return imageView;
@@ -109,6 +137,7 @@
 		[scrollView setDelegate:self];
 	}
 	
+	
 	return scrollView;
 }
 
@@ -126,8 +155,14 @@
 
 - (void)updateLayout: (BOOL)animated;
 {
-	if(dirtyImage){
+	if(dirtyImage)
+	{
+		// force image view to nil so it will display our loaded image
+		[imageDefault release];
+		imageDefault = nil;
+		
 		UIImage * newImage = [self singleImage];
+		[imageView setContentMode:UIViewContentModeScaleToFill];
 		[imageView setImage:newImage];
 		
 		if(scrollEnabled){
@@ -173,18 +208,45 @@
 	return imageView;
 }
 
+- (void)fetchImage
+{
+	// this should always run on separate thread
+	if ([NSThread isMainThread])
+	{
+		[NSThread detachNewThreadSelector:@selector(fetchImage) toTarget:self withObject:nil];
+		return;
+	}
+	
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+	
+	NSData * data = [NSData dataWithContentsOfURL:url];
+	
+	[self setSingleImageBlob:[UIImage imageWithData:data]];
+	
+	fetchRequired = NO;
+	dirtyImage = YES;
+
+	[self performSelectorOnMainThread:@selector(updateLayout:) withObject:nil waitUntilDone:NO];
+	
+	[pool release];
+}
+
 #pragma mark Javascript entrances
 
 - (void) setUrl: (NSURL *) newUrl;
 {
-	[self setSingleImageBlob:[[TitaniumHost sharedHost] blobForUrl:newUrl]];
-	if(imageView != nil){
-		dirtyImage = YES;
-		if(![NSThread isMainThread]){
-			[self performSelectorOnMainThread:@selector(updateLayout:) withObject:nil waitUntilDone:NO];
-		} else {
-			[self updateLayout:NO];
-		}
+	BOOL doFetch = NO;
+	if (url!=nil)
+	{
+		// we need to refetch on new image
+		[url release];
+		doFetch = YES;
+	}
+	url = [newUrl retain];
+	fetchRequired = YES;
+	if (doFetch)
+	{
+		[self fetchImage];
 	}
 }
 </diff>
      <filename>iphone/Classes/TitaniumImageViewController.m</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>85a751c8be52b052fdb68ea7d9ec1a5112a58179</id>
    </parent>
  </parents>
  <author>
    <name>Jeff Haynie</name>
    <email>jhaynie@gmail.com</email>
  </author>
  <url>http://github.com/appcelerator/titanium_mobile/commit/a8e1de1d1e325ff65c33c38c3f9f9035baa83349</url>
  <id>a8e1de1d1e325ff65c33c38c3f9f9035baa83349</id>
  <committed-date>2009-11-10T01:43:37-08:00</committed-date>
  <authored-date>2009-11-10T01:43:37-08:00</authored-date>
  <message>added default loading image in image view</message>
  <tree>ad29c89a21910cb8d3a469a94e4d4622800e51c2</tree>
  <committer>
    <name>Jeff Haynie</name>
    <email>jhaynie@gmail.com</email>
  </committer>
</commit>
