-
Notifications
You must be signed in to change notification settings - Fork 33
/
JSONGUIPass.m
78 lines (67 loc) · 2.04 KB
/
JSONGUIPass.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#import "JSONGUIPass.h"
#import "JSONGUIPersistentBuffer.h"
#import "JSONGUITop.h"
@implementation JSONGUIPass
- (id) initWithDict:(NSDictionary *)n top:(JSONGUITop *)t {
self = [super init];
if (self != nil) {
dict = nil;
top = nil;
if (t==nil) {
[self release];
return nil;
}
dict = [[MutLockDict alloc] init];
[dict wrlock];
// add all the entries from the dict we were passed (which should be a dict from the PASSES array of an ISF dict)
[dict addEntriesFromDictionary:n];
[dict unlock];
top = [[ObjectHolder alloc] initWithZWRObject:t];
}
return self;
}
- (void) dealloc {
VVRELEASE(dict);
VVRELEASE(top);
[super dealloc];
}
- (id) objectForKey:(NSString *)k {
return [[[dict lockObjectForKey:k] retain] autorelease];
}
- (void) setObject:(id)n forKey:(NSString *)k {
//NSLog(@"%s ... %@, %@",__func__,n,k);
if (n==nil)
[dict lockRemoveObjectForKey:k];
else
[dict lockSetObject:n forKey:k];
//NSLog(@"\t\tafter, dict is %@",dict);
}
- (NSString *) description {
return [NSString stringWithFormat:@"<JSONGUIPass %p>",self];
}
- (JSONGUITop *) top {
return [top object];
}
- (NSMutableDictionary *) createExportDict {
//NSLog(@"%s ... %@",__func__,self);
if (dict==nil)
return nil;
// copy the entries from my dict into the dict i'll be returning
NSMutableDictionary *returnMe = MUTDICT;
[dict rdlock];
[returnMe addEntriesFromDictionary:[dict dict]];
[dict unlock];
// if i'm rendering into a persistent buffer, i shouldn't put any info about it in this dict (i'll let the persistent buffer do this)
NSString *targetName = [dict lockObjectForKey:@"TARGET"];
JSONGUIPersistentBuffer *pbuffer = (targetName==nil) ? nil : [[top object] getPersistentBufferNamed:targetName];
if (pbuffer != nil) {
[returnMe removeObjectForKey:@"WIDTH"];
[returnMe removeObjectForKey:@"HEIGHT"];
[returnMe removeObjectForKey:@"FLOAT"];
[returnMe setObject:NUMBOOL(YES) forKey:@"PERSISTENT"];
[returnMe addEntriesFromDictionary:[pbuffer createExportDict]];
}
//NSLog(@"\t\treturning %@",returnMe);
return returnMe;
}
@end