Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /XspfManager/XspfMRule.m

Parent Directory Parent Directory | Revision Log Revision Log


Revision 122 - (hide annotations) (download)
Sun Nov 29 15:39:45 2009 UTC (14 years, 4 months ago) by masaki
Original Path: XspfManager/XspfMRuleEditorRow.m
File size: 11519 byte(s)
[Mod] ルールの表示をMail.appに合わせた。
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 masaki 122 - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value
31     {
32     NSDictionary *result = nil;
33    
34     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     }
47 masaki 120 @end
48    
49     @interface XspfMKeyValueHolder : NSObject
50     {
51     id key;
52     id value;
53     }
54     @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     {
64     return [[[self alloc] initWithValue:inValue forKey:inKey] autorelease];
65     }
66     - (id)initWithValue:(id)inValue forKey:(id)inKey
67     {
68     [super init];
69     self.value = inValue;
70     self.key = inKey;
71    
72     return self;
73     }
74     - (void)dealloc
75     {
76     self.value = nil;
77     self.key = nil;
78     [super dealloc];
79     }
80    
81     - (NSUInteger)hash
82     {
83     NSLog(@"hash wad called.");
84     exit(-1234);
85     }
86     - (BOOL)isEqual:(id)object
87     {
88     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    
93     return YES;
94     }
95     - (id)description
96     {
97     return [NSString stringWithFormat:@"(%@ = %@;)", self.key, self.value];
98     }
99     @end
100    
101    
102     @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 masaki 122 - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value {return nil;}
109 masaki 120 + (id)simpleWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
110     {
111     return [[[self alloc] initWithKeyPath:inKeyPath rightType:type operator:operator] autorelease];
112     }
113     - (id)initWithKeyPath:(NSString *)inKeyPath rightType:(XspfMRightType)type operator:(NSPredicateOperatorType)operator
114     {
115     [super init];
116     self.keyPath = inKeyPath;
117    
118     return self;
119     }
120     - (void)dealloc
121     {
122     self.keyPath = nil;
123     [super dealloc];
124     }
125     - (NSUInteger)hash
126     {
127     return [keyPath hash];
128     }
129     - (BOOL)isEqual:(id)object
130     {
131     XspfMSimple *obj = object;
132     if([super isEqual:object]) return YES;
133     return [self.keyPath isEqualToString:obj.keyPath];
134     }
135 masaki 122 - (void)setOwner:(NSRuleEditor *)editor
136     {
137     owner = editor;
138     }
139 masaki 120 - (BOOL)isMyChild:(id)child
140     {
141     if(!child) return YES;
142     child = [self myChildFromChild:child];
143     return child != nil;
144     }
145     - (id)myChildFromChild:(id)child
146     {
147     XspfMKeyValueHolder *holder = child;
148     // if(holder.key == self) return holder.value;
149     if([holder.key isEqual:self]) return holder.value;
150     return nil;
151     }
152     - (id)childFromMyChild:(id)myChild
153     {
154     return [XspfMKeyValueHolder holderWithValue:myChild forKey:self];
155     }
156     @end
157    
158    
159 masaki 122 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 masaki 120 @implementation XspfMStringPredicate
168    
169     - (NSInteger)numberOfChildrenForChild:(id)child
170     {
171     if(!child) return 1;
172    
173     child = [self myChildFromChild:child];
174     if(!child) return 0;
175    
176 masaki 122 if([child isEqualToString:XspfMStringPredicateLeftExpression]) return 5;
177     if([child isEqualToString:XspfMStringPredicateRightExpression]) return 0;
178 masaki 120
179     return 1;
180     }
181     - (id)childForChild:(id)child atIndex:(NSInteger)index
182     {
183 masaki 122 if(!child) return [self childFromMyChild:XspfMStringPredicateLeftExpression];
184 masaki 120
185     child = [self myChildFromChild:child];
186     if(!child) return nil;
187    
188 masaki 122 if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
189 masaki 120 switch(index) {
190     case 0:
191 masaki 122 return [self childFromMyChild:XspfMStringPredicateIsEqualOperator];
192 masaki 120 case 1:
193 masaki 122 return [self childFromMyChild:XspfMStringPredicateIsNotEqualOperator];
194 masaki 120 case 2:
195 masaki 122 return [self childFromMyChild:XspfMStringPredicateContainsOperator];
196 masaki 120 case 3:
197 masaki 122 return [self childFromMyChild:XspfMStringPredicateBeginsWithOperator];
198 masaki 120 case 4:
199 masaki 122 return [self childFromMyChild:XspfMStringPredicateEndsWithOperator];
200 masaki 120 }
201     } else {
202 masaki 122 return [self childFromMyChild:XspfMStringPredicateRightExpression];
203 masaki 120 }
204    
205     return nil;
206     }
207     - (id)displayValueForChild:(id)child
208     {
209     if(!child) return nil;
210     child = [self myChildFromChild:child];
211     if(!child) return nil;
212    
213 masaki 122 if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
214 masaki 120 if(1) {
215     return self.keyPath;
216     } else {
217     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
218     return item;
219     }
220     }
221    
222 masaki 122 if([child isEqualToString:XspfMStringPredicateRightExpression]) {
223 masaki 120 id text = [[[NSTextField alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
224     [[text cell] setControlSize:NSSmallControlSize];
225     [text setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
226     [text setStringValue:@"0123456"];
227     [text sizeToFit];
228     [text setStringValue:@""];
229    
230     return text;
231     }
232    
233     while(0){
234     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
235     return item;
236     }
237    
238     return child;
239     }
240 masaki 122 - (NSDictionary *)predicateForChild:(id)child withDisplayValue:(id)value
241     {
242     NSMutableDictionary *result = nil;
243    
244     child = [self myChildFromChild:child];
245     if(!child) return nil;
246    
247     if([child isEqualToString:XspfMStringPredicateLeftExpression]) {
248     id exp = [NSExpression expressionForKeyPath:self.keyPath];
249     result = [NSDictionary dictionaryWithObject:exp forKey:NSRuleEditorPredicateLeftExpression];
250     } else if([child isEqualToString:XspfMStringPredicateRightExpression]) {
251     id exp = [NSExpression expressionForConstantValue:[value stringValue]];
252     result = [NSDictionary dictionaryWithObject:exp forKey:NSRuleEditorPredicateRightExpression];
253     } else {
254     NSPredicateOperatorType type = 9999;
255     if([child isEqualToString:XspfMStringPredicateIsEqualOperator]) {
256     type = NSEqualToPredicateOperatorType;
257     } else if([child isEqualToString:XspfMStringPredicateIsNotEqualOperator]) {
258     type = NSNotEqualToPredicateOperatorType;
259     } else if([child isEqualToString:XspfMStringPredicateContainsOperator]) {
260     type = NSContainsPredicateOperatorType;
261     } else if([child isEqualToString:XspfMStringPredicateBeginsWithOperator]) {
262     type = NSBeginsWithPredicateOperatorType;
263     } else if([child isEqualToString:XspfMStringPredicateEndsWithOperator]) {
264     type = NSEndsWithPredicateOperatorType;
265     }
266    
267     if(type < 999) {
268     result = [NSDictionary dictionaryWithObjectsAndKeys:
269     [NSNumber numberWithUnsignedInt:type],
270     NSRuleEditorPredicateOperatorType,
271     [NSNumber numberWithInt:NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption],
272     NSRuleEditorPredicateOptions,
273     nil];
274     }
275     }
276    
277     return result;
278     }
279    
280 masaki 120 @end
281    
282 masaki 122 static NSString *XspfMAbDatePredicateLeftExpression = @"left";
283     static NSString *XspfMAbDatePredicatePicker01 = @"date";
284     static NSString *XspfMAbDatePredicatePicker02 = @"beginDate";
285     static NSString *XspfMAbDatePredicatePicker03 = @"endDate";
286     static NSString *XspfMAbDatePredicateIsEqualOperator = @"is the date";
287     static NSString *XspfMAbDatePredicateLessThanOperator = @"is after the date";
288     static NSString *XspfMAbDatePredicateGreaterThanOperator = @"is before the date";
289     static NSString *XspfMAbDatePredicateBetweenOperator = @"is in the range";
290     static NSString *XspfMAbDatePredicateAndField = @"andField";
291    
292 masaki 120 @implementation XspfMAbsoluteDatePredicate
293     - (NSView *)datePicker
294     {
295     id date = [[[NSDatePicker alloc] initWithFrame:NSMakeRect(0,0,100,19)] autorelease];
296     [[date cell] setControlSize:NSSmallControlSize];
297     [date setFont:[NSFont controlContentFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
298     [date setDatePickerElements:NSYearMonthDayDatePickerElementFlag];
299     [date setDrawsBackground:YES];
300     [date setDateValue:[NSDate dateWithTimeIntervalSinceNow:0.0]];
301     [date sizeToFit];
302    
303     return date;
304     }
305     - (NSInteger)numberOfChildrenForChild:(id)child
306     {
307     if(!child) return 1;
308    
309     child = [self myChildFromChild:child];
310     if(!child) return 0;
311    
312 masaki 122 if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) return 4;
313     if([child isEqualToString:XspfMAbDatePredicateBetweenOperator]) return 1;
314     if([child isEqualToString:XspfMAbDatePredicatePicker02]) return 1;
315     if([child isEqualToString:XspfMAbDatePredicateAndField]) return 1;
316     if([child isEqualToString:XspfMAbDatePredicatePicker03]) return 0;
317     if([child isEqualToString:XspfMAbDatePredicatePicker01]) return 0;
318 masaki 120
319     return 1;
320     }
321     - (id)childForChild:(id)child atIndex:(NSInteger)index
322     {
323 masaki 122 if(!child) return [self childFromMyChild:XspfMAbDatePredicateLeftExpression];
324 masaki 120
325     child = [self myChildFromChild:child];
326     if(!child) return nil;
327    
328 masaki 122 if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) {
329 masaki 120 switch(index) {
330     case 0:
331 masaki 122 return [self childFromMyChild:XspfMAbDatePredicateIsEqualOperator];
332 masaki 120 case 1:
333 masaki 122 return [self childFromMyChild:XspfMAbDatePredicateLessThanOperator];
334 masaki 120 case 2:
335 masaki 122 return [self childFromMyChild:XspfMAbDatePredicateGreaterThanOperator];
336 masaki 120 case 3:
337 masaki 122 return [self childFromMyChild:XspfMAbDatePredicateBetweenOperator];
338 masaki 120 }
339 masaki 122 } else if([child isEqualToString:XspfMAbDatePredicateBetweenOperator]) {
340     return [self childFromMyChild:XspfMAbDatePredicatePicker02];
341     } else if([child isEqualToString:XspfMAbDatePredicatePicker02]) {
342     return [self childFromMyChild:XspfMAbDatePredicateAndField];
343     } else if([child isEqualToString:XspfMAbDatePredicateAndField]) {
344     return [self childFromMyChild:XspfMAbDatePredicatePicker03];
345 masaki 120 } else {
346 masaki 122 return [self childFromMyChild:XspfMAbDatePredicatePicker01];
347 masaki 120 }
348    
349     return nil;
350     }
351     - (id)displayValueForChild:(id)child
352     {
353     if(!child) return nil;
354     child = [self myChildFromChild:child];
355     if(!child) return nil;
356    
357 masaki 122 if([child isEqualToString:XspfMAbDatePredicateLeftExpression]) {
358 masaki 120 if(1) {
359     return self.keyPath;
360     } else {
361     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:self.keyPath action:Nil keyEquivalent:@""] autorelease];
362     return item;
363     }
364     }
365    
366 masaki 122 if([child isEqualToString:XspfMAbDatePredicatePicker01]) {
367 masaki 120 id date = [self datePicker];
368    
369     return date;
370     }
371 masaki 122 if([child isEqualToString:XspfMAbDatePredicatePicker02]) {
372 masaki 120 id date = [self datePicker];
373    
374     return date;
375     }
376 masaki 122 if([child isEqualToString:XspfMAbDatePredicatePicker03]) {
377 masaki 120 id date = [self datePicker];
378    
379     return date;
380     }
381 masaki 122 if([child isEqualToString:XspfMAbDatePredicateAndField]) {
382     return @"to";
383 masaki 120 }
384    
385     while(0){
386     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:child action:Nil keyEquivalent:@""] autorelease];
387     return item;
388     }
389    
390     return child;
391     }
392     @end

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