39 unsigned _predicateOptions;
40 unsigned _predicateModifier;
41 unsigned _leftAttributeType;
42 unsigned _rightAttributeType;
44 BOOL _rightIsWildcard;
83 - (id)initWithLeftExpressions:(
CPArray)leftExpressions rightExpressions:(
CPArray)rightExpressions modifier:(
int)modifier operators:(
CPArray)operators options:(
int)options
90 _rightIsWildcard = NO;
91 _leftAttributeType = 0;
92 _rightAttributeType = 0;
93 _predicateModifier = modifier;
94 _predicateOptions = options;
96 var leftView = [
self _viewFromExpressions:leftExpressions],
97 rightView = [
self _viewFromExpressions:rightExpressions],
98 middleView = [
self _viewFromOperatorTypes:operators];
100 _views = [[
CPArray alloc] initWithObjects:leftView, middleView, rightView];
120 var leftView = [
self _viewFromExpressions:leftExpressions],
121 middleView = [
self _viewFromOperatorTypes:operators],
122 rightView = [
self _viewFromAttributeType:attributeType];
125 _leftIsWildcard = NO;
126 _rightIsWildcard = YES;
127 _leftAttributeType = 0;
128 _rightAttributeType = attributeType;
129 _predicateModifier = modifier;
130 _predicateOptions = options;
131 _views = [[
CPArray alloc] initWithObjects:leftView, middleView, rightView];
143 - (id)initWithCompoundTypes:(
CPArray )compoundTypes
148 var leftView = [
self _viewFromCompoundTypes:compoundTypes],
151 [rightView addItemWithTitle:@"of the following are true"];
154 _leftIsWildcard = NO;
155 _rightIsWildcard = NO;
156 _rightAttributeType = 0;
157 _views = [[
CPArray alloc] initWithObjects:leftView, rightView];
177 if ([[
self compoundTypes] containsObject:[predicate compoundPredicateType]])
182 if (!_leftIsWildcard && ![[
self leftExpressions] containsObject:[predicate leftExpression]])
185 if (![[
self operators] containsObject:[predicate predicateOperatorType]])
188 if (!_rightIsWildcard && ![[
self rightExpressions] containsObject:[predicate rightExpression]])
216 if (_templateType == 2)
217 [
self _setCompoundPredicate:predicate];
219 [
self _setComparisonPredicate:predicate];
232 var subpredicates = [predicate subpredicates];
233 if ([subpredicates count] == 0)
236 return subpredicates;
252 if (_templateType == 2)
254 var type = [[_views[0] selectedItem] representedObject];
258 if (_templateType == 1)
260 var lhs = [
self _leftExpression],
261 rhs = [
self _rightExpression],
262 operator = [[_views[1] selectedItem] representedObject];
284 if (_templateType == 1 && !_leftIsWildcard)
286 var view = [_views objectAtIndex:0];
287 return [[view itemArray] valueForKey:@"representedObject"];
299 if (_templateType == 1 && !_rightIsWildcard)
301 var view = [_views objectAtIndex:2];
302 return [[view itemArray] valueForKey:@"representedObject"];
314 if (_templateType == 2)
316 var view = [_views objectAtIndex:0];
317 return [[view itemArray] valueForKey:@"representedObject"];
329 if (_templateType == 1)
330 return _predicateModifier;
341 if (_templateType == 1)
343 var view = [_views objectAtIndex:1];
344 return [[view itemArray] valueForKey:@"representedObject"];
356 if (_templateType == 1)
357 return _predicateOptions;
366 - (CPAttributeType)rightExpressionAttributeType
368 return _rightAttributeType;
375 - (CPAttributeType)leftExpressionAttributeType
377 return _leftAttributeType;
381 + (id)_bestMatchForPredicate:(
CPPredicate)predicate inTemplates:(
CPArray)templates quality:(
double)quality
383 var count = [templates
count],
388 for (i = 0; i < count; i++)
391 amatch = [template matchForPredicate:predicate];
393 if (amatch > match_value)
396 match_value = amatch;
411 var left = [_views objectAtIndex:0],
413 index = [left indexOfItemWithRepresentedObject:type];
415 [left selectItemAtIndex:index];
420 var left = [_views objectAtIndex:0],
421 middle = [_views objectAtIndex:1],
422 right = [_views objectAtIndex:2],
428 [left setObjectValue:[leftExpression constantValue]];
431 var index = [left indexOfItemWithRepresentedObject:leftExpression];
432 [left selectItemAtIndex:index];
435 var op_index = [middle indexOfItemWithRepresentedObject:operator];
436 [middle selectItemAtIndex:op_index];
438 if (_rightIsWildcard)
439 [right setObjectValue:[rightExpression constantValue]];
442 var index = [right indexOfItemWithRepresentedObject:rightExpression];
443 [right selectItemAtIndex:index];
449 return [
self _expressionFromView:_views[0] forAttributeType:_leftAttributeType];
454 return [
self _expressionFromView:_views[2] forAttributeType:_rightAttributeType];
457 - (
CPExpression)_expressionFromView:(
CPView)aView forAttributeType:(CPAttributeType)attributeType
459 if (attributeType == 0)
460 return [[aView selectedItem] representedObject];
464 value = [aView intValue];
466 value = [aView state];
468 value = [aView stringValue];
475 return (_templateType - 1);
483 + (id)_operatorsForAttributeType:(CPAttributeType)attributeType
487 switch (attributeType)
507 default : CPLogConsole(
"Cannot create operators for an CPAttributeType " + attributeType);
511 return operators_array;
516 return _templateType;
519 - (id)_displayValueForPredicateOperator:(
int)operator
551 default : CPLogConsole(
@"unknown predicate operator %d" +
operator);
557 - (id)_displayValueForCompoundPredicateType:(
unsigned int)predicateType
560 switch (predicateType)
574 - (id)_displayValueForConstantValue:(
id)value
576 return [value description];
579 - (id)_displayValueForKeyPath:(
CPString)keyPath
587 count = [expressions
count];
589 for (var i = 0; i < count; i++)
591 var exp = expressions[i],
592 type = [exp expressionType],
606 [item setRepresentedObject:exp];
607 [popup addItem:item];
618 count = [operators
count];
620 for (var i = 0; i < count; i++)
622 var op = operators[i],
623 title = [
self _displayValueForPredicateOperator:op],
626 [item setRepresentedObject:op];
627 [popup addItem:item];
638 count = [compoundTypes
count];
640 for (var i = 0; i < count; i++)
642 var type = compoundTypes[i],
643 title = [
self _displayValueForCompoundPredicateType:type],
646 [item setRepresentedObject:type];
647 [popup addItem:item];
655 - (
CPView)_viewFromAttributeType:(CPAttributeType)attributeType
661 view = [
self _textFieldWithFrame:CGRectMake(0, 0, 50, 26)];
665 view = [
self _textFieldWithFrame:CGRectMake(0, 0, 150, 26)];
672 view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0, 0, 150, 26)];
676 [view setTag:attributeType];
684 [textField setBezeled:YES];
685 [textField setBezelStyle:CPTextFieldSquareBezel];
686 [textField setBordered:YES];
687 [textField setEditable:YES];
689 [textField setSendsActionOnEndEditing:YES];
694 - (void)_setOptions:(
unsigned int)options
696 _predicateOptions = options;
699 - (void)_setModifier:(
unsigned int)modifier
701 _predicateModifier = modifier;
706 if (_templateType == 2)
707 return [
CPString stringWithFormat:
@"<%@ %p %@>",[
self className],
self,[[
self compoundTypes] componentsJoinedByString:
@", "]];
708 else if (_templateType == 1 && _rightIsWildcard)
709 return [
CPString stringWithFormat:
@"<%@ %p [%@] [%@] %d>",[
self className],
self,[[
self leftExpressions] componentsJoinedByString:
@", "],[[
self operators] componentsJoinedByString:
@", "],[
self rightExpressionAttributeType]];
711 return [
CPString stringWithFormat:@"<%@ %p [%@] [%@] [%@]>",[
self className],self,[[
self leftExpressions] componentsJoinedByString:@", "],[[
self operators] componentsJoinedByString:@", "],[[
self rightExpressions] componentsJoinedByString:@", "]];
730 var CPPredicateTemplateTypeKey =
@"CPPredicateTemplateType",
731 CPPredicateTemplateOptionsKey =
@"CPPredicateTemplateOptions",
732 CPPredicateTemplateModifierKey =
@"CPPredicateTemplateModifier",
733 CPPredicateTemplateLeftAttributeTypeKey =
@"CPPredicateTemplateLeftAttributeType",
734 CPPredicateTemplateRightAttributeTypeKey =
@"CPPredicateTemplateRightAttributeType",
735 CPPredicateTemplateLeftIsWildcardKey =
@"CPPredicateTemplateLeftIsWildcard",
736 CPPredicateTemplateRightIsWildcardKey =
@"CPPredicateTemplateRightIsWildcard",
737 CPPredicateTemplateViewsKey =
@"CPPredicateTemplateViews";
741 - (id)initWithCoder:(
CPCoder)coder
746 _templateType = [coder decodeIntForKey:CPPredicateTemplateTypeKey];
747 _predicateOptions = [coder decodeIntForKey:CPPredicateTemplateOptionsKey];
748 _predicateModifier = [coder decodeIntForKey:CPPredicateTemplateModifierKey];
749 _leftAttributeType = [coder decodeIntForKey:CPPredicateTemplateLeftAttributeTypeKey];
750 _rightAttributeType = [coder decodeIntForKey:CPPredicateTemplateRightAttributeTypeKey];
751 _leftIsWildcard = [coder decodeBoolForKey:CPPredicateTemplateLeftIsWildcardKey];
752 _rightIsWildcard = [coder decodeBoolForKey:CPPredicateTemplateRightIsWildcardKey];
753 _views = [coder decodeObjectForKey:CPPredicateTemplateViewsKey];
757 if (_templateType == 1 && _leftIsWildcard == NO)
759 var itemArray = [_views[0] itemArray],
760 count = [itemArray count];
762 for (var i = 0; i < count; i++)
764 var item = itemArray[i];
765 if ([item representedObject] == nil)
768 [item setRepresentedObject:exp];
777 - (void)encodeWithCoder:(
CPCoder)coder
779 [coder encodeInt:_templateType forKey:CPPredicateTemplateTypeKey];
780 [coder encodeInt:_predicateOptions forKey:CPPredicateTemplateOptionsKey];
781 [coder encodeInt:_predicateModifier forKey:CPPredicateTemplateModifierKey];
782 [coder encodeInt:_leftAttributeType forKey:CPPredicateTemplateLeftAttributeTypeKey];
783 [coder encodeInt:_rightAttributeType forKey:CPPredicateTemplateRightAttributeTypeKey];
784 [coder encodeBool:_leftIsWildcard forKey:CPPredicateTemplateLeftIsWildcardKey];
785 [coder encodeBool:_rightIsWildcard forKey:CPPredicateTemplateRightIsWildcardKey];
786 [coder encodeObject:_views forKey:CPPredicateTemplateViewsKey];
799 return _templateType;
805 - (void)_setTemplateType:(
int)aValue
807 _templateType = aValue;
813 - (void)_setOptions:(
unsigned)aValue
815 _predicateOptions = aValue;
821 - (void)_setModifier:(
unsigned)aValue
823 _predicateModifier = aValue;
829 - (unsigned)leftAttributeType
831 return _leftAttributeType;
837 - (void)_setLeftAttributeType:(
unsigned)aValue
839 _leftAttributeType = aValue;
845 - (unsigned)rightAttributeType
847 return _rightAttributeType;
853 - (void)_setRightAttributeType:(
unsigned)aValue
855 _rightAttributeType = aValue;
861 - (BOOL)leftIsWildcard
863 return _leftIsWildcard;
869 - (void)setLeftIsWildcard:(BOOL)aValue
871 _leftIsWildcard = aValue;
877 - (BOOL)rightIsWildcard
879 return _rightIsWildcard;
885 - (void)setRightIsWildcard:(BOOL)aValue
887 _rightIsWildcard = aValue;
893 - (void)setTemplateViews:(
CPArray)aValue