Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMRule.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 120 - (hide annotations) (download)
Sun Nov 29 11:32:41 2009 UTC (14 years, 4 months ago) by masaki
Original Path: XspfManager/XspfMRuleEditorRow.m
File size: 7426 byte(s)
[Mod] NSRuleEditor テスト中 :-)
1 masaki 120 //
2     // XspfMRuleEditorRow.m
3     // XspfManager
4     //
5     // Created by Hori,Masaki on 09/11/29.
6     // Copyright 2009 masakih. All rights reserved.
7     //
8    
9     #import "XspfMRuleEditorRow.h"
10    
11     @implementation XspfMCompound
12     - (NSInteger)numberOfChildrenForChild:(id)child
13     {
14     if(!child) return 2;
15     if([child isEqualToString:@"All"] || [child isEqualToString:@"Any"]) return 1;
16     return 0;
17     }
18     - (id)childForChild:(id)child atIndex:(NSInteger)index
19     {
20     if(!child) {
21     if(index == 0) return @"All";
22     if(index == 1) return @"Any";
23     }
24     return @"of the following are true";
25     }
26     - (id)displayValueForChild:(id)child
27     {
28     return child;
29     }
30     @end
31    
32     @interface XspfMKeyValueHolder : NSObject
33     {
34     id key;
35     id value;
36     }
37     @property (retain) id key;
38     @property (retain) id value;
39     + (id)holderWithValue:(id)value forKey:(id)key;
40     - (id)initWithValue:(id)value forKey:(id)key;
41     @end
42     @implementation XspfMKeyValueHolder
43     @synthesize key;
44     @synthesize value;
45     + (id)holderWithValue:(id)inValue forKey:(id)inKey
46     {
47     return [[[self alloc] initWithValue:inValue forKey:inKey] autorelease];
48     }
49     - (id)initWithValue:(id)inValue forKey:(id)inKey
50     {
51     [super init];
52     self.value = inValue;
53     self.key = inKey;
54    
55     return self;
56     }
57     - (void)dealloc
58     {
59     self.value = nil;
60     self.key = nil;
61     [super dealloc];
62     }
63    
64     - (NSUInteger)hash
65     {
66     NSLog(@"hash wad called.");
67     exit(-1234);
68     }
69     - (BOOL)isEqual:(id)object
70     {
71     if([super isEqual:object]) return YES;
72     XspfMKeyValueHolder *obj = object;
73     if(![self.key isEqual:obj.key]) return NO;
74     if(![self.value isEqual:obj.value]) return NO;
75    
76     return YES;
77     }
78     - (id)description
79     {
80     return [NSString stringWithFormat:@"(%@ = %@;)", self.key, self.value];
81     }
82     @end
83    
84    
85     @implementation XspfMSimple
86     @synthesize keyPath;
87    
88     - (NSInteger)numberOfChildrenForChild:(id)child {return 0;}
89     - (id)childForChild:(id)child atIndex:(NSInteger)index {return nil;}
90     - (id)displayValueForChild:(id)child {return nil;}
91    
92     + (id)simpleWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
93     {
94     return [[[self alloc] initWithKeyPath:inKeyPath rightType:type operator:operator] autorelease];
95     }
96     - (id)initWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
97     {
98     [super init];
99     self.keyPath = inKeyPath;
100    
101     return self;
102     }
103     - (void)dealloc
104     {
105     self.keyPath = nil;
106     [super dealloc];
107     }
108     - (NSUInteger)hash
109     {
110     return [keyPath hash];
111     }
112     - (BOOL)isEqual:(id)object
113     {
114     XspfMSimple *obj = object;
115     if([super isEqual:object]) return YES;
116     return [self.keyPath isEqualToString:obj.keyPath];
117     }
118     - (BOOL)isMyChild:(id)child
119     {
120     if(!child) return YES;
121     child = [self myChildFromChild:child];
122     return child != nil;
123     }
124     - (id)myChildFromChild:(id)child
125     {
126     XspfMKeyValueHolder *holder = child;
127     // if(holder.key == self) return holder.value;
128     if([holder.key isEqual:self]) return holder.value;
129     return nil;
130     }
131     - (id)childFromMyChild:(id)myChild
132     {
133     return [XspfMKeyValueHolder holderWithValue:myChild forKey:self];
134     }
135     @end
136    
137    
138     @implementation XspfMStringPredicate
139    
140     - (NSInteger)numberOfChildrenForChild:(id)child
141     {
142     if(!child) return 1;
143    
144     child = [self myChildFromChild:child];
145     if(!child) return 0;
146    
147     if([child isEqualToString:@"left"]) return 5;
148     if([child isEqualToString:@"field"]) return 0;
149    
150     return 1;
151     }
152     - (id)childForChild:(id)child atIndex:(NSInteger)index
153     {
154     if(!child) return [self childFromMyChild:@"left"];
155    
156     child = [self myChildFromChild:child];
157     if(!child) return nil;
158    
159     if([child isEqualToString:@"left"]) {
160     switch(index) {
161     case 0:
162     return [self childFromMyChild:@"is"];
163     case 1:
164     return [self childFromMyChild:@"is not"];
165     case 2:
166     return [self childFromMyChild:@"contains"];
167     case 3:
168     return [self childFromMyChild:@"begins with"];
169     case 4:
170     return [self childFromMyChild:@"ends with"];
171     }
172     } else {
173     return [self childFromMyChild:@"field"];
174     }
175    
176     return nil;
177     }
178     - (id)displayValueForChild:(id)child
179     {
180     if(!child) return nil;
181     child = [self myChildFromChild:child];
182     if(!child) return nil;
183    
184     if([child isEqualToString:@"left"]) {
185     if(1) {
186     return self.keyPath;
187     } else {
188     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
189     return item;
190     }
191     }
192    
193     if([child isEqualToString:@"field"]) {
194     id text = [[[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
195     [[text cell] setControlSize:NSSmallControlSize];
196     [text setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
197     [text setStringValue:@"0123456"];
198     [text sizeToFit];
199     [text setStringValue:@""];
200    
201     return text;
202     }
203    
204     while(0){
205     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
206     return item;
207     }
208    
209     return child;
210     }
211     @end
212    
213     @implementation XspfMAbsoluteDatePredicate
214     - (NSView *)datePicker
215     {
216     id date = [[[NSDatePicker alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
217     [[date cell] setControlSize:NSSmallControlSize];
218     [date setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
219     [date setDatePickerElements:NSYearMonthDayDatePickerElementFlag];
220     [date setDrawsBackground:YES];
221     [date setDateValue:[NSDate dateWithTimeIntervalSinceNow:0.0]];
222     [date sizeToFit];
223    
224     return date;
225     }
226     - (NSInteger)numberOfChildrenForChild:(id)child
227     {
228     if(!child) return 1;
229    
230     child = [self myChildFromChild:child];
231     if(!child) return 0;
232    
233     if([child isEqualToString:@"left"]) return 5;
234     if([child isEqualToString:@"between"]) return 1;
235     if([child isEqualToString:@"beginDate"]) return 1;
236     if([child isEqualToString:@"andField"]) return 1;
237     if([child isEqualToString:@"endDate"]) return 0;
238     if([child isEqualToString:@"date"]) return 0;
239    
240     return 1;
241     }
242     - (id)childForChild:(id)child atIndex:(NSInteger)index
243     {
244     if(!child) return [self childFromMyChild:@"left"];
245    
246     child = [self myChildFromChild:child];
247     if(!child) return nil;
248    
249     if([child isEqualToString:@"left"]) {
250     switch(index) {
251     case 0:
252     return [self childFromMyChild:@"is"];
253     case 1:
254     return [self childFromMyChild:@"is not"];
255     case 2:
256     return [self childFromMyChild:@"is less than"];
257     case 3:
258     return [self childFromMyChild:@"is greater than"];
259     case 4:
260     return [self childFromMyChild:@"between"];
261     }
262     } else if([child isEqualToString:@"between"]) {
263     return [self childFromMyChild:@"beginDate"];
264     } else if([child isEqualToString:@"beginDate"]) {
265     return [self childFromMyChild:@"andField"];
266     } else if([child isEqualToString:@"andField"]) {
267     return [self childFromMyChild:@"endDate"];
268     } else {
269     return [self childFromMyChild:@"date"];
270     }
271    
272     return nil;
273     }
274     - (id)displayValueForChild:(id)child
275     {
276     if(!child) return nil;
277     child = [self myChildFromChild:child];
278     if(!child) return nil;
279    
280     if([child isEqualToString:@"left"]) {
281     if(1) {
282     return self.keyPath;
283     } else {
284     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
285     return item;
286     }
287     }
288    
289     if([child isEqualToString:@"date"]) {
290     id date = [self datePicker];
291    
292     return date;
293     }
294     if([child isEqualToString:@"beginDate"]) {
295     id date = [self datePicker];
296    
297     return date;
298     }
299     if([child isEqualToString:@"endDate"]) {
300     id date = [self datePicker];
301    
302     return date;
303     }
304     if([child isEqualToString:@"andField"]) {
305     return @"and";
306     }
307    
308     while(0){
309     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
310     return item;
311     }
312    
313     return child;
314     }
315     @end

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26