Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMRule.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 143 - (hide annotations) (download)
Sun Dec 13 14:41:42 2009 UTC (14 years, 4 months ago) by masaki
Original Path: XspfManager/XspfMRuleEditorRow.m
File size: 12484 byte(s)
[???] NSRuleEditorテスト中
criterion用クラスを破棄。
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 masaki 143 @implementation XspfMCompound
12     - (NSInteger)numberOfChildrenForChild:(id)child
13 masaki 120 {
14 masaki 143 if(!child) return 2;
15     if([child isEqualToString:@"All"] || [child isEqualToString:@"Any"]) return 1;
16     return 0;
17 masaki 120 }
18 masaki 143 - (id)childForChild:(id)child atIndex:(NSInteger)index
19 masaki 120 {
20 masaki 143 if(!child) {
21     if(index == 0) return @"All";
22     if(index == 1) return @"Any";
23     }
24     return @"of the following are true";
25 masaki 120 }
26 masaki 143 - (id)displayValueForChild:(id)child
27 masaki 120 {
28 masaki 143 return child;
29 masaki 120 }
30 masaki 143 - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value
31 masaki 122 {
32 masaki 143 NSDictionary *result = nil;
33 masaki 122
34 masaki 143 NSUInteger type = 9999;
35     if([child isEqualToString:@"All"]) {
36     type = NSAndPredicateType;
37     } else if([child isEqualToString:@"Any"]) {
38     type = NSOrPredicateType;
39     }
40     if(type < 10) {
41     result = [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:type]
42     forKey:NSRuleEditorPredicateCompoundType];
43     }
44    
45     return result;
46 masaki 122 }
47 masaki 120 @end
48    
49 masaki 143 @interface XspfMKeyValueHolder : NSObject
50 masaki 120 {
51 masaki 143 id key;
52     id value;
53 masaki 120 }
54 masaki 143 @property (retain) id key;
55     @property (retain) id value;
56     + (id)holderWithValue:(id)value forKey:(id)key;
57     - (id)initWithValue:(id)value forKey:(id)key;
58     @end
59     @implementation XspfMKeyValueHolder
60     @synthesize key;
61     @synthesize value;
62     + (id)holderWithValue:(id)inValue forKey:(id)inKey
63 masaki 120 {
64 masaki 143 return [[[self alloc] initWithValue:inValue forKey:inKey] autorelease];
65 masaki 120 }
66 masaki 143 - (id)initWithValue:(id)inValue forKey:(id)inKey
67 masaki 120 {
68 masaki 143 [super init];
69     self.value = inValue;
70     self.key = inKey;
71 masaki 142
72 masaki 143 return self;
73 masaki 142 }
74 masaki 143 - (void)dealloc
75 masaki 120 {
76 masaki 143 self.value = nil;
77     self.key = nil;
78     [super dealloc];
79 masaki 120 }
80    
81 masaki 143 - (NSUInteger)hash
82 masaki 142 {
83 masaki 143 NSLog(@"hash wad called.");
84     exit(-1234);
85 masaki 142 }
86 masaki 143 - (BOOL)isEqual:(id)object
87 masaki 120 {
88 masaki 143 if([super isEqual:object]) return YES;
89     XspfMKeyValueHolder *obj = object;
90     if(![self.key isEqual:obj.key]) return NO;
91     if(![self.value isEqual:obj.value]) return NO;
92 masaki 120
93     return YES;
94     }
95     - (id)description
96     {
97 masaki 143 return [NSString stringWithFormat:@"(%@ = %@;)", self.key, self.value];
98 masaki 120 }
99     @end
100    
101    
102 masaki 143 @implementation XspfMSimple
103     @synthesize keyPath;
104    
105     - (NSInteger)numberOfChildrenForChild:(id)child {return 0;}
106     - (id)childForChild:(id)child atIndex:(NSInteger)index {return nil;}
107     - (id)displayValueForChild:(id)child {return nil;}
108     - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value {return nil;}
109     + (id)simpleWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
110 masaki 120 {
111 masaki 143 return [[[self alloc] initWithKeyPath:inKeyPath rightType:type operator:operator] autorelease];
112 masaki 120 }
113 masaki 143 - (id)initWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
114 masaki 120 {
115 masaki 143 [super init];
116     self.keyPath = inKeyPath;
117     [self setup];
118 masaki 120
119     return self;
120     }
121 masaki 143 - (void)dealloc
122 masaki 120 {
123 masaki 143 self.keyPath = nil;
124     [super dealloc];
125 masaki 120 }
126 masaki 143 - (NSUInteger)hash
127 masaki 120 {
128 masaki 143 return [keyPath hash];
129 masaki 120 }
130 masaki 143 - (BOOL)isEqual:(id)object
131 masaki 120 {
132 masaki 143 XspfMSimple *obj = object;
133     if([super isEqual:object]) return YES;
134     return [self.keyPath isEqualToString:obj.keyPath];
135 masaki 120 }
136 masaki 143 - (void)setup {}
137     - (BOOL)isMyChild:(id)child
138 masaki 120 {
139 masaki 143 // if(!child) return YES;
140     // child = [self myChildFromChild:child];
141     // return child != nil;
142     return YES;
143 masaki 120 }
144 masaki 143 - (id)myChildFromChild:(id)child
145 masaki 120 {
146 masaki 143 // XspfMKeyValueHolder *holder = child;
147     // if([holder.key isEqual:self]) return holder.value;
148     // return nil;
149     return child;
150 masaki 120 }
151 masaki 143 - (id)childFromMyChild:(id)myChild
152 masaki 120 {
153 masaki 143 // return [XspfMKeyValueHolder holderWithValue:myChild forKey:self];
154     return myChild;
155 masaki 120 }
156     @end
157    
158 masaki 142
159 masaki 143 static NSString *XspfMStringPredicateLeftExpression = @"left";
160     static NSString *XspfMStringPredicateRightExpression = @"field";
161     static NSString *XspfMStringPredicateIsEqualOperator = @"is";
162     static NSString *XspfMStringPredicateIsNotEqualOperator = @"is not";
163     static NSString *XspfMStringPredicateContainsOperator = @"contains";
164     static NSString *XspfMStringPredicateBeginsWithOperator = @"begins with";
165     static NSString *XspfMStringPredicateEndsWithOperator = @"ends with";
166    
167     @implementation XspfMStringPredicate
168     @synthesize fieldValue;
169     - (void)setup
170 masaki 123 {
171 masaki 143 self.fieldValue = @"";
172 masaki 140 }
173 masaki 143 - (id)textField
174 masaki 140 {
175 masaki 143 id text = [[[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
176     [[text cell] setControlSize:NSSmallControlSize];
177     [text setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
178     [text setStringValue:@"0123456"];
179     [text sizeToFit];
180     [text setStringValue:self.fieldValue];
181     [text setDelegate:self];
182 masaki 139
183 masaki 143 return text;
184 masaki 123 }
185 masaki 143 - (void)controlTextDidChange:(NSNotification *)obj
186 masaki 142 {
187 masaki 143 self.fieldValue = [[obj object] stringValue];
188 masaki 142 }
189 masaki 143 - (NSInteger)numberOfChildrenForChild:(id)child
190 masaki 123 {
191 masaki 143 if(!child) return 1;
192    
193     child = [self myChildFromChild:child];
194     if(!child) return 0;
195    
196     if([child isEqualToString:XspfMStringPredicateLeftExpression]) return 5;
197     if([child isEqualToString:XspfMStringPredicateRightExpression]) return 0;
198    
199     return 1;
200 masaki 123 }
201 masaki 143 - (id)childForChild:(id)child atIndex:(NSInteger)index
202 masaki 123 {
203 masaki 143 if(!child) return [self childFromMyChild:XspfMStringPredicateLeftExpression];
204    
205     child = [self myChildFromChild:child];
206     if(!child) return nil;
207    
208     if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
209     switch(index) {
210     case 0:
211     return [self childFromMyChild:XspfMStringPredicateIsEqualOperator];
212     case 1:
213     return [self childFromMyChild:XspfMStringPredicateIsNotEqualOperator];
214     case 2:
215     return [self childFromMyChild:XspfMStringPredicateContainsOperator];
216     case 3:
217     return [self childFromMyChild:XspfMStringPredicateBeginsWithOperator];
218     case 4:
219     return [self childFromMyChild:XspfMStringPredicateEndsWithOperator];
220     }
221     } else {
222     return [self childFromMyChild:XspfMStringPredicateRightExpression];
223     }
224    
225 masaki 139 return nil;
226 masaki 123 }
227 masaki 143 - (id)displayValueForChild:(id)child
228 masaki 120 {
229 masaki 143 if(!child) return nil;
230     child = [self myChildFromChild:child];
231     if(!child) return nil;
232 masaki 122
233 masaki 143 if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
234     if(1) {
235     return self.keyPath;
236     } else {
237     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
238     return item;
239     }
240     }
241 masaki 122
242 masaki 143 if([child isEqualToString:XspfMStringPredicateRightExpression]) {
243     id text = [self textField];
244    
245     return text;
246     }
247 masaki 142
248 masaki 143 while(0){
249     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
250     return item;
251     }
252    
253     return child;
254 masaki 142 }
255 masaki 143 - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value
256 masaki 142 {
257 masaki 143 NSMutableDictionary *result = nil;
258 masaki 142
259 masaki 143 child = [self myChildFromChild:child];
260     if(!child) return nil;
261 masaki 142
262 masaki 143 if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
263     id exp = [NSExpression expressionForKeyPath:self.keyPath];
264     result = [NSDictionary dictionaryWithObject:exp forKey:NSRuleEditorPredicateLeftExpression];
265     } else if([child isEqualToString:XspfMStringPredicateRightExpression]) {
266     id exp = [NSExpression expressionForConstantValue:[value stringValue]];
267     result = [NSDictionary dictionaryWithObject:exp forKey:NSRuleEditorPredicateRightExpression];
268     } else {
269     NSPredicateOperatorType type = 9999;
270     if([child isEqualToString:XspfMStringPredicateIsEqualOperator]) {
271     type = NSEqualToPredicateOperatorType;
272     } else if([child isEqualToString:XspfMStringPredicateIsNotEqualOperator]) {
273     type = NSNotEqualToPredicateOperatorType;
274     } else if([child isEqualToString:XspfMStringPredicateContainsOperator]) {
275     type = NSContainsPredicateOperatorType;
276     } else if([child isEqualToString:XspfMStringPredicateBeginsWithOperator]) {
277     type = NSBeginsWithPredicateOperatorType;
278     } else if([child isEqualToString:XspfMStringPredicateEndsWithOperator]) {
279     type = NSEndsWithPredicateOperatorType;
280     }
281    
282     if(type < 999) {
283     result = [NSDictionary dictionaryWithObjectsAndKeys:
284     [NSNumber numberWithUnsignedInt:type],
285     NSRuleEditorPredicateOperatorType,
286     [NSNumber numberWithInt:NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption],
287     NSRuleEditorPredicateOptions,
288     nil];
289     }
290     }
291    
292     return result;
293 masaki 142 }
294 masaki 122
295 masaki 143 @end
296    
297     static NSString *XspfMAbDatePredicateLeftExpression = @"left";
298     static NSString *XspfMAbDatePredicatePicker01 = @"date";
299     static NSString *XspfMAbDatePredicatePicker02 = @"beginDate";
300     static NSString *XspfMAbDatePredicatePicker03 = @"endDate";
301     static NSString *XspfMAbDatePredicateIsEqualOperator = @"is the date";
302     static NSString *XspfMAbDatePredicateLessThanOperator = @"is after the date";
303     static NSString *XspfMAbDatePredicateGreaterThanOperator = @"is before the date";
304     static NSString *XspfMAbDatePredicateBetweenOperator = @"is in the range";
305     static NSString *XspfMAbDatePredicateAndField = @"andField";
306    
307     @implementation XspfMAbsoluteDatePredicate
308     @synthesize firstValue;
309     @synthesize secondValue;
310    
311     - (void)setup
312 masaki 123 {
313 masaki 143 self.firstValue = self.secondValue = [NSDate dateWithTimeIntervalSinceNow:0.0];
314 masaki 123 }
315 masaki 120 - (NSView *)datePicker
316     {
317     id date = [[[NSDatePicker alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
318     [[date cell] setControlSize:NSSmallControlSize];
319     [date setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
320     [date setDatePickerElements:NSYearMonthDayDatePickerElementFlag];
321     [date setDrawsBackground:YES];
322     [date setDateValue:[NSDate dateWithTimeIntervalSinceNow:0.0]];
323     [date sizeToFit];
324 masaki 123 [date setDelegate:self];
325 masaki 120
326     return date;
327     }
328 masaki 143 - (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell
329     validateProposedDateValue:(NSDate **)proposedDateValue
330     timeInterval:(NSTimeInterval *)proposedTimeInterval
331 masaki 123 {
332 masaki 143 switch([aDatePickerCell tag]) {
333     case 1000:
334     self.firstValue = [aDatePickerCell dateValue];
335 masaki 123 break;
336 masaki 143 case 2000:
337     self.secondValue = [aDatePickerCell dateValue];
338 masaki 123 break;
339     }
340     }
341 masaki 143
342     - (NSInteger)numberOfChildrenForChild:(id)child
343 masaki 120 {
344 masaki 143 if(!child) return 1;
345 masaki 142
346 masaki 143 child = [self myChildFromChild:child];
347     if(!child) return 0;
348 masaki 142
349 masaki 143 if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) return 4;
350     if([child isEqualToString:XspfMAbDatePredicateBetweenOperator]) return 1;
351     if([child isEqualToString:XspfMAbDatePredicatePicker02]) return 1;
352     if([child isEqualToString:XspfMAbDatePredicateAndField]) return 1;
353     if([child isEqualToString:XspfMAbDatePredicatePicker03]) return 0;
354     if([child isEqualToString:XspfMAbDatePredicatePicker01]) return 0;
355    
356     return 1;
357 masaki 142 }
358 masaki 143 - (id)childForChild:(id)child atIndex:(NSInteger)index
359 masaki 120 {
360 masaki 143 if(!child) return [self childFromMyChild:XspfMAbDatePredicateLeftExpression];
361 masaki 120
362 masaki 143 child = [self myChildFromChild:child];
363     if(!child) return nil;
364    
365     if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) {
366     switch(index) {
367     case 0:
368     return [self childFromMyChild:XspfMAbDatePredicateIsEqualOperator];
369     case 1:
370     return [self childFromMyChild:XspfMAbDatePredicateLessThanOperator];
371     case 2:
372     return [self childFromMyChild:XspfMAbDatePredicateGreaterThanOperator];
373     case 3:
374     return [self childFromMyChild:XspfMAbDatePredicateBetweenOperator];
375 masaki 120 }
376 masaki 143 } else if([child isEqualToString:XspfMAbDatePredicateBetweenOperator]) {
377     return [self childFromMyChild:XspfMAbDatePredicatePicker02];
378     } else if([child isEqualToString:XspfMAbDatePredicatePicker02]) {
379     return [self childFromMyChild:XspfMAbDatePredicateAndField];
380     } else if([child isEqualToString:XspfMAbDatePredicateAndField]) {
381     return [self childFromMyChild:XspfMAbDatePredicatePicker03];
382     } else {
383     return [self childFromMyChild:XspfMAbDatePredicatePicker01];
384 masaki 120 }
385    
386 masaki 143 return nil;
387 masaki 120 }
388 masaki 143 - (id)displayValueForChild:(id)child
389 masaki 120 {
390 masaki 143 if(!child) return nil;
391     child = [self myChildFromChild:child];
392     if(!child) return nil;
393 masaki 142
394 masaki 143 if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) {
395     if(1) {
396     return self.keyPath;
397     } else {
398     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
399     return item;
400 masaki 142 }
401     }
402    
403 masaki 143 if([child isEqualToString:XspfMAbDatePredicatePicker01]) {
404     id date = [self datePicker];
405     [date setTag:1000];
406     [date setDateValue:self.firstValue];
407    
408     return date;
409 masaki 142 }
410 masaki 143 if([child isEqualToString:XspfMAbDatePredicatePicker02]) {
411     id date = [self datePicker];
412     [date setTag:1000];
413     [date setDateValue:self.firstValue];
414    
415     return date;
416     }
417     if([child isEqualToString:XspfMAbDatePredicatePicker03]) {
418     id date = [self datePicker];
419     [date setTag:2000];
420     [date setDateValue:self.secondValue];
421    
422     return date;
423     }
424     if([child isEqualToString:XspfMAbDatePredicateAndField]) {
425     return @"to";
426     }
427 masaki 142
428 masaki 143 while(0){
429     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
430     return item;
431 masaki 142 }
432    
433 masaki 143 return child;
434 masaki 142 }
435 masaki 120 @end

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