00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import <Foundation/CPBundle.j>
00024 @import <Foundation/CPDictionary.j>
00025 @import <Foundation/CPString.j>
00026
00027
00028 var CPCibOwner = @"CPCibOwner";
00029
00030 @implementation CPObject (CPCibLoading)
00031
00032 - (void)awakeFromCib
00033 {
00034 }
00035
00036 @end
00037
00038 @implementation CPBundle (CPCibLoading)
00039
00040 + (void)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable
00041 {
00042 [[[CPCib alloc] initWithContentsOfURL:anAbsolutePath] instantiateCibWithExternalNameTable:aNameTable];
00043 }
00044
00045 + (void)loadCibNamed:(CPString)aName owner:(id)anOwner
00046 {
00047 if (![aName hasSuffix:@".cib"])
00048 aName = [aName stringByAppendingString:@".cib"];
00049
00050
00051 var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
00052 path = [bundle pathForResource:aName];
00053
00054 [self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner]];
00055 }
00056
00057 - (void)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable
00058 {
00059 [[[CPCib alloc] initWithContentsOfURL:aFileName] instantiateCibWithExternalNameTable:aNameTable];
00060 }
00061
00062 + (void)loadCibFile:(CPString)anAbsolutePath externalNameTable:(CPDictionary)aNameTable loadDelegate:aDelegate
00063 {
00064 [[CPCib alloc]
00065 initWithContentsOfURL:anAbsolutePath
00066 loadDelegate:[[_CPCibLoadDelegate alloc]
00067 initWithLoadDelegate:aDelegate
00068 externalNameTable:aNameTable]];
00069 }
00070
00071 + (void)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate
00072 {
00073 if (![aName hasSuffix:@".cib"])
00074 aName = [aName stringByAppendingString:@".cib"];
00075
00076
00077 var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
00078 path = [bundle pathForResource:aName];
00079
00080 [self loadCibFile:path externalNameTable:[CPDictionary dictionaryWithObject:anOwner forKey:CPCibOwner] loadDelegate:aDelegate];
00081 }
00082
00083 - (void)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable loadDelegate:(id)aDelegate
00084 {
00085 [[CPCib alloc]
00086 initWithCibNamed:aFileName
00087 bundle:self
00088 loadDelegate:[[_CPCibLoadDelegate alloc]
00089 initWithLoadDelegate:aDelegate
00090 externalNameTable:aNameTable]];
00091 }
00092
00093 @end
00094
00095 @implementation _CPCibLoadDelegate : CPObject
00096 {
00097 id _loadDelegate;
00098 CPDictionary _externalNameTable;
00099 }
00100
00101 - (id)initWithLoadDelegate:(id)aLoadDelegate externalNameTable:(id)anExternalNameTable
00102 {
00103 self = [self init];
00104
00105 if (self)
00106 {
00107 _loadDelegate = aLoadDelegate;
00108 _externalNameTable = anExternalNameTable;
00109 }
00110
00111 return self;
00112 }
00113
00114 - (void)cibDidFinishLoading:(CPCib)aCib
00115 {
00116 [aCib instantiateCibWithExternalNameTable:_externalNameTable];
00117
00118 [_loadDelegate cibDidFinishLoading:aCib];
00119 }
00120
00121 - (void)cibDidFailToLoad:(CPCib)aCib
00122 {
00123 [_loadDelegate cibDidFailToLoad:aCib];
00124 }
00125
00126 @end