Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMRule.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 154 - (hide annotations) (download)
Fri Dec 18 12:38:12 2009 UTC (14 years, 4 months ago) by masaki
Original Path: XspfManager/XspfMRuleEditorRow.m
File size: 18093 byte(s)
[New] N[日|週|月|年]前を実装。
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 152
50     @interface XspfMRule (XspfMAccessor)
51     - (void)setChildren:(NSArray *)newChildren;
52     - (void)addChild:(XspfMRule *)child;
53     - (void)setPredicateParts:(NSDictionary *)parts;
54     - (void)setExpression:(id)expression forKey:(id)key;
55     - (void)setValue:(NSString *)newValue;
56     @end
57    
58     @interface XspfMRule (XspfMExpressionBuilder)
59     @end
60    
61     @implementation XspfMRule (XspfMAccessor)
62     - (void)setChildren:(NSArray *)newChildren
63 masaki 120 {
64 masaki 152 if(!newChildren) newChildren = [NSArray array];
65    
66     [children autorelease];
67     children = [newChildren mutableCopy];
68 masaki 120 }
69 masaki 152 - (void)addChild:(XspfMRule *)child
70     {
71     [children addObject:child];
72     }
73     - (void)setPredicateParts:(NSDictionary *)parts
74     {
75     [predicateHints autorelease];
76     predicateHints = [parts mutableCopy];
77     }
78     - (void)setExpression:(id)expression forKey:(id)key
79     {
80     [predicateHints setObject:expression forKey:key];
81     }
82     - (void)setValue:(NSString *)newValue
83     {
84 masaki 153 if([_value isEqualToString:newValue]) return;
85 masaki 152
86 masaki 153 [_value autorelease];
87     _value = [newValue copy];
88 masaki 152 }
89 masaki 153 - (NSString *)value { return _value; }
90 masaki 143 @end
91 masaki 152
92     @implementation XspfMRule
93     @dynamic value;
94    
95     - (NSInteger)numberOfChildren
96 masaki 120 {
97 masaki 152 return [children count];
98 masaki 120 }
99 masaki 152 - (id)childAtIndex:(NSInteger)index
100 masaki 120 {
101 masaki 152 return [children objectAtIndex:index];
102     }
103     - (id)displayValueForRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
104     {
105 masaki 153 return _value;
106 masaki 152 }
107     - (NSDictionary *)predicatePartsWithDisplayValue:(id)displayValue forRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
108     {
109     id result = [NSMutableDictionary dictionary];
110 masaki 142
111 masaki 152 NSRuleEditorRowType rowType = [ruleEditor rowTypeForRow:row];
112     if(rowType == NSRuleEditorRowTypeCompound) {
113     return predicateHints;
114     }
115    
116     if([predicateHints valueForKey:@"XspfMIgnoreExpression"]) return nil;
117    
118     id operatorType = [predicateHints valueForKey:@"NSRuleEditorPredicateOperatorType"];
119     id option = [predicateHints valueForKey:@"NSRuleEditorPredicateOptions"];
120     id leftExp = [predicateHints valueForKey:@"NSRuleEditorPredicateLeftExpression"];
121     id rightExp = [predicateHints valueForKey:@"NSRuleEditorPredicateRightExpression"];
122     id customRightExp = [predicateHints valueForKey:@"XspfMPredicateRightExpression"];
123    
124     if(operatorType) {
125     [result setValue:operatorType forKey:NSRuleEditorPredicateOperatorType];
126     }
127     if(option) {
128     [result setValue:option forKey:NSRuleEditorPredicateOptions];
129     }
130     if(leftExp) {
131     id exp = nil;
132     if([leftExp isEqual:@"value"]) {
133     exp = [NSExpression expressionForKeyPath:displayValue];
134     } else {
135     exp = [NSExpression expressionForKeyPath:leftExp];
136     }
137     if(exp) {
138     [result setValue:exp forKey:NSRuleEditorPredicateLeftExpression];
139     }
140     }
141     if(rightExp) {
142     SEL selector = NSSelectorFromString(rightExp);
143     id exp = nil;
144     if(selector) {
145     exp = [NSExpression expressionForConstantValue:[displayValue performSelector:selector]];
146     } else {
147     exp = [NSExpression expressionForConstantValue:rightExp];
148     }
149     if(exp) {
150     [result setValue:exp forKey:NSRuleEditorPredicateRightExpression];
151     }
152     }
153     if(customRightExp) {
154     SEL selector = NSSelectorFromString(customRightExp);
155     id arg01 = [predicateHints valueForKey:@"XspfMRightExpressionArg01"];
156     id arg02 = [predicateHints valueForKey:@"XspfMRightExpressionArg02"];
157    
158    
159     if(arg02 && arg01) {
160     if([arg01 isEqual:@"displayValues"]) {
161     arg01 = [ruleEditor displayValuesForRow:row];
162     }
163     if([arg02 isEqual:@"displayValues"]) {
164     arg02 = [ruleEditor displayValuesForRow:row];
165     }
166     id r = [self performSelector:selector withObject:arg01 withObject:arg02];
167     [result setValue:r forKey:NSRuleEditorPredicateRightExpression];
168     } else if(arg01) {
169     if([arg01 isEqual:@"displayValues"]) {
170     arg01 = [ruleEditor displayValuesForRow:row];
171     }
172     id r = [self performSelector:selector withObject:arg01];
173     [result setValue:r forKey:NSRuleEditorPredicateRightExpression];
174     } else {
175     id r = [self performSelector:selector];
176     [result setValue:r forKey:NSRuleEditorPredicateRightExpression];
177     }
178     }
179    
180     if([predicateHints valueForKey:@"XspfMCustomSelector"]) {
181 masaki 154 NSString *selName = [predicateHints valueForKey:@"XspfMCustomSelector"];
182     id args = nil;
183     NSString *argSelName = [predicateHints valueForKey:@"XspfMCustomSelectorArgumentsCteator"];
184     if(argSelName) {
185     SEL argSel = NSSelectorFromString(argSelName);
186     id argSelArg01 = [predicateHints valueForKey:@"XspfMCustomSelectorArgumentsCteatorArg01"];
187     if([argSelArg01 isEqual:@"displayValues"]) {
188     argSelArg01 = [ruleEditor displayValuesForRow:row];
189     }
190     id argSelArg02 = [predicateHints valueForKey:@"XspfMCustomSelectorArgumentsCteatorArg02"];
191     if([argSelArg02 isEqual:@"displayValues"]) {
192     argSelArg02 = [ruleEditor displayValuesForRow:row];
193     }
194     if(argSelArg02) {
195     args = [self performSelector:argSel withObject:argSelArg01 withObject:argSelArg02];
196     } else if(argSelArg01) {
197     args = [self performSelector:argSel withObject:argSelArg01];
198     } else {
199     args = [self performSelector:argSel];
200     }
201     } else {
202     id arg01 = [predicateHints valueForKey:@"XspfMCustomSelectorArg01"];
203     args = [NSArray arrayWithObjects:[NSExpression expressionForConstantValue:arg01], nil];
204     }
205 masaki 152
206     id exp03 = [NSExpression expressionForConstantValue:@"DATE_RANGE_CREATOR"];
207 masaki 154 id exp02 = [NSExpression expressionForFunction:exp03 selectorName:selName arguments:args];
208 masaki 152 [result setValue:exp02 forKey:@"NSRuleEditorPredicateRightExpression"];
209     }
210    
211     // NSLog(@"predicate\tcriterion -> %@, value -> %@, row -> %d, result -> %@", predicateHints, displayValue, row, result);
212    
213     return result;
214 masaki 142 }
215 masaki 152
216 masaki 153 - (id)displayValue { return _value; }
217 masaki 120
218 masaki 152 - (id)copyWithZone:(NSZone *)zone
219 masaki 142 {
220 masaki 152 XspfMRule *result = [[[self class] allocWithZone:zone] init];
221     result->children = [children copy];
222     result->predicateHints = [predicateHints copy];
223 masaki 153 result->_value = [_value copy];
224 masaki 152
225     return result;
226 masaki 142 }
227 masaki 152
228     - (BOOL)isEqual:(id)other
229 masaki 120 {
230 masaki 152 if([super isEqual:other]) return YES;
231     if(![other isKindOfClass:[XspfMRule class]]) return NO;
232 masaki 120
233 masaki 152 XspfMRule *o = other;
234 masaki 153 if(![_value isEqualToString:o->_value]) return NO;
235 masaki 152 // if(![children isEqual:o->children]) return NO;
236     // if(![predicateHints isEqual:o->predicateHints]) return NO;
237    
238 masaki 120 return YES;
239     }
240 masaki 152 - (NSUInteger)hash
241     {
242 masaki 153 return _value ? [_value hash] : [super hash];
243 masaki 152 }
244    
245 masaki 120 - (id)description
246     {
247 masaki 152 return [NSString stringWithFormat:@"%@ {\n\t%@ = %@;\n\t%@ = %@;\n\t%@ = %@;}",
248     NSStringFromClass([self class]),
249 masaki 153 @"value", _value,
250 masaki 152 @"hints", predicateHints,
251     @"children", children,
252     nil];
253 masaki 120 }
254     @end
255    
256 masaki 152 @implementation XspfMRule (XspfMCreation)
257 masaki 120
258 masaki 152 - (id)init
259 masaki 120 {
260 masaki 152 [super init];
261    
262     children = [[NSMutableArray array] retain];
263     predicateHints = [[NSMutableDictionary dictionary] retain];
264    
265     return self;
266 masaki 120 }
267 masaki 152
268     - (id)initWithValue:(NSString *)newValue children:(NSArray *)newChildren predicateHints:(NSDictionary *)parts
269 masaki 120 {
270 masaki 152 [self init];
271 masaki 120
272 masaki 152 if([newValue isEqualToString:@"separator"]) {
273     [self release];
274     return [[XspfMSeparatorRule alloc] initSparetorRule];
275     }
276    
277     NSInteger tag = XspfMDefaultTag;
278     XspfMFieldType type = XspfMUnknownType;
279     if([newValue hasPrefix:@"textField"]) {
280     type = XspfMTextFieldType;
281     } else if([newValue hasPrefix:@"dateField"]) {
282     type = XspfMDateFieldType;
283     if([newValue isEqualToString:@"dateField"]) {
284     tag = XspfMPrimaryDateFieldTag;
285     } else {
286     tag = XspfMSeconraryDateFieldTag;
287     }
288     } else if([newValue hasPrefix:@"rateField"]) {
289     type = XspfMRateFieldType;
290     } else if([newValue hasPrefix:@"numberField"]) {
291     type = XspfMNumberFieldType;
292     if([newValue isEqualToString:@"numberField"]) {
293     tag = XspfMPrimaryNumberFieldTag;
294     } else {
295     tag = XspfMSecondaryNumberFieldTag;
296     }
297     }
298     if(type != XspfMUnknownType) {
299     [self release];
300     self = [[XspfMFieldRule alloc] initWithFieldType:type tag:tag];
301     }
302    
303     [self setValue:newValue];
304     [self setChildren:newChildren];
305     [self setPredicateParts:parts];
306    
307 masaki 120 return self;
308     }
309 masaki 152 + (id)ruleWithValue:(NSString *)newValue children:(NSArray *)newChildren predicateHints:(NSDictionary *)parts
310 masaki 120 {
311 masaki 152 return [[[self alloc] initWithValue:newValue children:newChildren predicateHints:parts] autorelease];
312 masaki 120 }
313 masaki 152
314     + (NSArray *)compoundRule
315 masaki 120 {
316 masaki 152 id comp = [self ruleWithValue:@"of the following are true" children:nil predicateHints:[NSDictionary dictionary]];
317    
318     id allExp = [NSNumber numberWithUnsignedInt:NSAndPredicateType];
319     id all = [self ruleWithValue:@"All"
320     children:[NSArray arrayWithObject:comp]
321     predicateHints:[NSDictionary dictionaryWithObject:allExp forKey:NSRuleEditorPredicateCompoundType]];
322    
323     id anyExp = [NSNumber numberWithUnsignedInt:NSOrPredicateType];
324     id any = [self ruleWithValue:@"Any"
325     children:[NSArray arrayWithObject:comp]
326     predicateHints:[NSDictionary dictionaryWithObject:anyExp forKey:NSRuleEditorPredicateCompoundType]];
327    
328     return [NSArray arrayWithObjects:all, any, nil];
329 masaki 120 }
330 masaki 152
331     - (NSDictionary *)predicateHintsWithPlist:(NSDictionary *)plist
332 masaki 120 {
333 masaki 152 NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:plist];
334     [result removeObjectForKey:@"criteria"];
335     [result removeObjectForKey:@"value"];
336    
337     return result;
338 masaki 120 }
339 masaki 152
340     + (id)ruleWithPlist:(id)plist
341 masaki 120 {
342 masaki 152 return [[[self alloc] initWithPlist:plist] autorelease];
343 masaki 120 }
344 masaki 152 - (id)initWithPlist:(id)plist
345 masaki 120 {
346 masaki 152 if(![plist isKindOfClass:[NSDictionary class]]) {
347     [self init];
348     [self release];
349     return nil;
350     }
351    
352     id pValue = [plist valueForKey:@"value"];
353     id criteria = [plist valueForKey:@"criteria"];
354     id pChildren = [NSMutableArray array];
355     for(id criterion in criteria) {
356     id c = [[self class] ruleWithPlist:criterion];
357     if(c) [pChildren addObject:c];
358     }
359     id hints = [self predicateHintsWithPlist:plist];
360    
361     return [self initWithValue:pValue children:pChildren predicateHints:hints];
362 masaki 120 }
363 masaki 152
364     - (void)dealloc
365 masaki 120 {
366 masaki 152 [children release];
367     [predicateHints release];
368 masaki 153 [_value release];
369 masaki 152
370     [super dealloc];
371 masaki 120 }
372 masaki 152
373 masaki 120 @end
374    
375 masaki 153 @implementation XspfMRule (XspfMPrivate)
376 masaki 142
377 masaki 153 - (NSView *)textField
378     {
379     id text = [[[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
380     [[text cell] setControlSize:NSSmallControlSize];
381     [text setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
382     [text setStringValue:@"1234567890"];
383     [text sizeToFit];
384     [text setStringValue:@""];
385     [text setDelegate:self];
386    
387     return text;
388     }
389     - (NSView *)datePicker
390     {
391     id date = [[[NSDatePicker alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
392     [[date cell] setControlSize:NSSmallControlSize];
393     [date setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
394     [date setDatePickerElements:NSYearMonthDayDatePickerElementFlag];
395     [date setDrawsBackground:YES];
396     [date setDateValue:[NSDate dateWithTimeIntervalSinceNow:0.0]];
397     [date sizeToFit];
398     [date setDelegate:self];
399    
400     return date;
401     }
402     - (NSView *)ratingIndicator
403     {
404     id rate = [[[NSLevelIndicator alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
405     id cell = [rate cell];
406     [cell setControlSize:NSSmallControlSize];
407     [rate setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
408     [rate setMinValue:0];
409     [rate setMaxValue:5];
410     [cell setLevelIndicatorStyle:NSRatingLevelIndicatorStyle];
411     [cell setEditable:YES];
412     [rate sizeToFit];
413    
414     return rate;
415     }
416     - (NSView *)numberField
417     {
418     id text = [[[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
419     [[text cell] setControlSize:NSSmallControlSize];
420     [text setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
421     [text setStringValue:@"123"];
422     NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
423     [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
424     [formatter setMinimum:[NSNumber numberWithInt:0]];
425     [text setFormatter:formatter];
426     [text sizeToFit];
427     [text setStringValue:@"1"];
428     [text setDelegate:self];
429    
430     return text;
431     }
432     @end
433    
434 masaki 152 @implementation XspfMSeparatorRule
435     + (id)separatorRule
436 masaki 123 {
437 masaki 152 return [[[self alloc] initSparetorRule] autorelease];
438 masaki 140 }
439 masaki 152 - (id)initSparetorRule
440 masaki 140 {
441 masaki 152 [super init];
442 masaki 139
443 masaki 152 return self;
444 masaki 123 }
445 masaki 152 - (id)displayValue
446 masaki 142 {
447 masaki 152 return [NSMenuItem separatorItem];
448 masaki 142 }
449 masaki 152 - (id)displayValueForRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
450 masaki 123 {
451 masaki 152 return [NSMenuItem separatorItem];
452 masaki 123 }
453 masaki 152 - (NSDictionary *)predicatePartsWithDisplayValue:(id)value forRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
454 masaki 123 {
455 masaki 139 return nil;
456 masaki 123 }
457 masaki 152 @end
458    
459     @implementation XspfMFieldRule
460     + (id)ruleWithFieldType:(XspfMFieldType)aType
461 masaki 120 {
462 masaki 152 return [[[self alloc] initWithFieldType:aType tag:XspfMDefaultTag] autorelease];
463     }
464     - (id)initWithFieldType:(XspfMFieldType)aType
465     {
466     return [self initWithFieldType:aType tag:XspfMDefaultTag];
467     }
468     + (id)ruleWithFieldType:(XspfMFieldType)aType tag:(NSInteger)aTag
469     {
470     return [[[self alloc] initWithFieldType:aType tag:aTag] autorelease];
471     }
472     - (id)initWithFieldType:(XspfMFieldType)aType tag:(NSInteger)aTag
473     {
474     [super init];
475 masaki 122
476 masaki 152 type = aType;
477     tag = aTag;
478 masaki 122
479 masaki 152 return self;
480     }
481     - (id)copyWithZone:(NSZone *)zone
482     {
483     XspfMFieldRule *result = [super copyWithZone:zone];
484     result->type = type;
485     result->tag = tag;
486 masaki 142
487 masaki 152 return result;
488 masaki 142 }
489 masaki 152 - (void)dealloc
490 masaki 142 {
491 masaki 152 [field release];
492     [super dealloc];
493     }
494     - (BOOL)isEqual:(id)other
495     {
496     if(![super isEqual:other]) return NO;
497 masaki 142
498 masaki 152 XspfMFieldRule *o = other;
499     if(tag != o->tag) return NO;
500     if(type != o->type) return NO;
501 masaki 142
502 masaki 152 return YES;
503 masaki 142 }
504 masaki 122
505 masaki 152 - (Class)fieldClass
506     {
507     Class result = Nil;
508     switch(type) {
509     case XspfMTextFieldType:
510     case XspfMNumberFieldType:
511     result = [NSTextField class];
512 masaki 123 break;
513 masaki 152 case XspfMDateFieldType:
514     result = [NSDatePicker class];
515 masaki 123 break;
516 masaki 152 case XspfMRateFieldType:
517     result = [NSLevelIndicator class];
518     break;
519 masaki 123 }
520 masaki 152 return result;
521 masaki 123 }
522 masaki 152 - (SEL)fieldCreateSelector
523 masaki 120 {
524 masaki 152 SEL result = Nil;
525     switch(type) {
526     case XspfMTextFieldType:
527     result = @selector(textField);
528     break;
529     case XspfMNumberFieldType:
530     result = @selector(numberField);
531     break;
532     case XspfMDateFieldType:
533     result = @selector(datePicker);
534     break;
535     case XspfMRateFieldType:
536     result = @selector(ratingIndicator);
537     break;
538     }
539     return result;
540     }
541     - (id)displayValue
542     {
543     if(field) return field;
544 masaki 142
545 masaki 152 id res = [self performSelector:[self fieldCreateSelector]];
546     [res setTag:tag];
547 masaki 142
548 masaki 152 return res;
549 masaki 142 }
550 masaki 152 - (id)displayValueForRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
551 masaki 120 {
552 masaki 152 if(field) return field;
553 masaki 120
554 masaki 152 id displayValues = [ruleEditor displayValuesForRow:row];
555     Class fieldCalss = [self fieldClass];
556     for(id v in displayValues) {
557     if([v isKindOfClass:fieldCalss] && [v tag] == tag) {
558     field = [v retain];
559     break;
560 masaki 120 }
561     }
562 masaki 152 if(!field) field = [[self displayValue] retain];
563 masaki 120
564 masaki 152 return field;
565 masaki 120 }
566 masaki 152 //- (NSDictionary *)predicatePartsWithDisplayValue:(id)value forRuleEditor:(NSRuleEditor *)ruleEditor inRow:(NSInteger)row
567     //{
568     //#warning MUST IMPLEMENT
569     // return nil;
570     //}
571     @end
572    
573     @implementation XspfMRule (XspfMExpressionBuilder)
574 masaki 154 - (NSArray *)numberAndUnitArgs:(NSArray *)displayValues
575     {
576     id value03 = [displayValues objectAtIndex:2];
577     id arg01 = [NSNumber numberWithInt:[[value03 objectValue] intValue]];
578    
579     id value04 = [displayValues objectAtIndex:3];
580     id arg02 = nil;
581     if([value04 isEqualToString:@"Days"]) {
582     arg02 = [NSNumber numberWithInt:0];
583     } else if([value04 isEqualToString:@"Weeks"]) {
584     arg02 = [NSNumber numberWithInt:1];
585     } else if([value04 isEqualToString:@"Months"]) {
586     arg02 = [NSNumber numberWithInt:2];
587     } else if([value04 isEqualToString:@"Years"]) {
588     arg02 = [NSNumber numberWithInt:3];
589     }
590    
591     return [NSArray arrayWithObjects:[NSExpression expressionForConstantValue:arg01],
592     [NSExpression expressionForConstantValue:arg02], nil];
593     }
594 masaki 152 - (NSExpression *)rangeUnitFromDisplayValues:(NSArray *)displayValues option:(NSNumber *)optionValue
595 masaki 120 {
596 masaki 152 NSInteger option = [optionValue integerValue];
597 masaki 142
598 masaki 152 NSString *variable = nil;
599     id value02 = [displayValues objectAtIndex:2];
600     id value03 = [displayValues objectAtIndex:3];
601     id value04 = nil, value05 = nil;
602     switch(option) {
603     case 0:
604     variable = [NSString stringWithFormat:@"%d-%@-ago", [value02 intValue], value03];
605     break;
606     case 1:
607     variable = [NSString stringWithFormat:@"%d-%@", [value02 intValue], value03];
608     break;
609     case 2:
610     variable = [NSString stringWithFormat:@"not-%d-%@", [value02 intValue], value03];
611     break;
612     case 3:
613     value04 = [displayValues objectAtIndex:4];
614     value05 = [displayValues objectAtIndex:5];
615     variable = [NSString stringWithFormat:@"%d-%@-%d-%@", [value02 intValue], value03, [value04 intValue], value05];
616     break;
617 masaki 142 }
618    
619 masaki 152 return [NSExpression expressionForVariable:variable];
620     }
621     - (NSExpression *)rangeDateFromDisplayValues:(NSArray *)displayValues
622     {
623     id field01 = nil;
624     id field02 = nil;
625    
626     Class datepickerclass = [NSDatePicker class];
627     for(id v in displayValues) {
628     if([v isKindOfClass:datepickerclass]) {
629     if([v tag] == XspfMPrimaryDateFieldTag) {
630     field01 = v;
631     } else {
632     field02 = v;
633     }
634     }
635 masaki 142 }
636    
637 masaki 152 if(!field01 || !field02) return nil;
638    
639     id value01, value02;
640     value01 = [field01 dateValue]; value02 = [field02 dateValue];
641     if([value01 compare:value02] == NSOrderedDescending) {
642     id t = value02;
643     value02 = value01;
644     value01 = t;
645 masaki 142 }
646    
647 masaki 152 id expression01, expression02;
648     expression01 = [NSExpression expressionForConstantValue:value01];
649     expression02 = [NSExpression expressionForConstantValue:value02];
650    
651     return [NSExpression expressionForAggregate:[NSArray arrayWithObjects:expression01, expression02, nil]];
652 masaki 142 }
653 masaki 120 @end
654 masaki 152

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