- Fixed a bug where the right control was incorrectly recreated with a default value when switching operators.

- As per cocoa, the predicate is recomputed when you send the right control action, not when you change text.  Update-as-you-type can be turned ON by subclassing -_sendsActionOnIncompleteTextChange method. Default is NO.
- Rewrote _reconfigureSubviews method, should be faster.
This commit is contained in:
cacaodev
2011-05-23 10:59:44 +02:00
committed by Klaas Pieter Annema
parent ea660e3dd4
commit 2b52f7d8da
8 changed files with 778 additions and 417 deletions
+46 -32
View File
@@ -315,7 +315,9 @@
if (menuItemIndex == -1 || [[treeChild title] isEqual:[currentView titleOfSelectedItem]]) if (menuItemIndex == -1 || [[treeChild title] isEqual:[currentView titleOfSelectedItem]])
{ {
var node = [_CPPredicateEditorRowNode _rowNodeFromTree:treeChild withTemplate:aTemplate]; var node = [_CPPredicateEditorRowNode rowNodeFromTree:treeChild];
[node applyTemplate:aTemplate withViews:templateViews forOriginalTemplate:originalTemplate];
[criteria addObject:node]; [criteria addObject:node];
[values addObject:[node displayValue]]; [values addObject:[node displayValue]];
break; break;
@@ -334,9 +336,9 @@
- (void)_updatePredicate - (void)_updatePredicate
{ {
//[self willChangeValueForKey:@"objectValue"]; [self willChangeValueForKey:@"objectValue"];
[self _updatePredicateFromRows]; [self _updatePredicateFromRows];
//[self didChangeValueForKey:@"objectValue"]; [self didChangeValueForKey:@"objectValue"];
} }
- (void)_updatePredicateFromRows - (void)_updatePredicateFromRows
@@ -366,34 +368,41 @@
- (id)_predicateFromRowItem:(id)rowItem - (id)_predicateFromRowItem:(id)rowItem
{ {
var subpredicates = [CPArray array], var subpredicates = [CPArray array],
subrows = [rowItem valueForKey:[super subrowsKeyPath]], rowType = [rowItem valueForKey:_typeKeyPath];
if (rowType == CPRuleEditorRowTypeCompound)
{
var subrows = [rowItem valueForKey:_subrowsArrayKeyPath],
count = [subrows count]; count = [subrows count];
for (var i = 0; i < count; i++) for (var i = 0; i < count; i++)
{ {
var predicate = [self _predicateFromRowItem:subrows[i]]; var subrow = [subrows objectAtIndex:i];
[subpredicates addObject:predicate]; var predicate = [self _predicateFromRowItem:subrow];
[subpredicates addObject:predicate];
}
} }
var criteria = [rowItem valueForKey:[super criteriaKeyPath]], var criteria = [rowItem valueForKey:_itemsKeyPath],
displayValues = [rowItem valueForKey:[super displayValuesKeyPath]], displayValues = [rowItem valueForKey:_valuesKeyPath],
leftNode = [criteria objectAtIndex:0], count = [criteria count],
templateViews = [leftNode templateViews], lastItem = [criteria lastObject],
count = [criteria count]; template = [lastItem templateForRow],
templateViews = [template templateViews];
for (var j = 0; j < count; j++) for (var j = 0; j < count; j++)
{ {
var view = [templateViews objectAtIndex:j], var view = [templateViews objectAtIndex:j],
value = [displayValues objectAtIndex:j]; value = [displayValues objectAtIndex:j];
[[criteria objectAtIndex:j] setTemplateViews:templateViews];
if ([view respondsToSelector:@selector(selectItemWithTitle:)]) if ([view isKindOfClass:[CPPopUpButton class]])
[view selectItemWithTitle:value]; [view selectItemWithTitle:value];
else else if ([view respondsToSelector:@selector(setObjectValue:)])
[view setObjectValue:[value objectValue]]; [view setObjectValue:[value objectValue]];
} }
return [[leftNode templateForRow] predicateWithSubpredicates:subpredicates]; return [template predicateWithSubpredicates:subpredicates];
} }
- (CPCompoundPredicateType)_compoundPredicateTypeForRootRows - (CPCompoundPredicateType)_compoundPredicateTypeForRootRows
@@ -403,32 +412,39 @@
#pragma mark Control delegate #pragma mark Control delegate
- (void)_sendRuleAction
{
[self _updatePredicate];
[super _sendRuleAction];
}
- (BOOL)_sendsActionOnIncompleteTextChange
{
return NO;
}
/*
- (void)_setDefaultTargetAndActionOnView:(CPView)view - (void)_setDefaultTargetAndActionOnView:(CPView)view
{ {
if ([view isKindOfClass:[CPControl class]]) if ([view isKindOfClass:[CPControl class]])
{ {
[view setAction:@selector(_templateControlValueDidChange:)];
[view setTarget:self]; [view setTarget:self];
[view setAction:@selector(_templateControlValueDidChange:)];
} }
} }
- (void)controlTextDidEndEditing:(CPNotification)notification
{
[self _updatePredicate];
}
- (void)_templateControlValueDidChange:(id)sender - (void)_templateControlValueDidChange:(id)sender
{ {
//[self _updatePredicate];
} }
- (void)controlTextDidBeginEditing:(CPNotification)notification - (void)controlTextDidBeginEditing:(CPNotification)notification
{ {
} }
- (void)controlTextDidEndEditing:(CPNotification)notification
{
}
- (void)controlTextDidChange:(CPNotification)notification - (void)controlTextDidChange:(CPNotification)notification
{ {
} }
*/
#pragma mark RuleEditor delegate methods #pragma mark RuleEditor delegate methods
@@ -439,24 +455,22 @@
var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees; var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees;
return [trees count]; return [trees count];
} }
return [[rowItem children] count]; return [[rowItem children] count];
} }
- (id)_queryChild:(int)index ofItem:(id)rowItem withRowType:(int)type - (id)_queryChild:(int)childIndex ofItem:(id)rowItem withRowType:(int)type
{ {
if (rowItem == nil) if (rowItem == nil)
{ {
var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees; var trees = (type == CPRuleEditorRowTypeSimple) ? _rootTrees : _rootHeaderTrees;
return [_CPPredicateEditorRowNode rowNodeFromTree:trees[index]]; return [_CPPredicateEditorRowNode rowNodeFromTree:trees[childIndex]];
} }
return [[rowItem children] objectAtIndex:index]; return [[rowItem children] objectAtIndex:childIndex];
} }
- (id)_queryValueForItem:(id)rowItem inRow:(int)rowIndex - (id)_queryValueForItem:(id)rowItem inRow:(int)rowIndex
{ {
[rowItem copyTemplateIfNecessary];
return [rowItem displayValue]; return [rowItem displayValue];
} }
@@ -657,18 +657,18 @@ CPTransformableAttributeType = 1800;
if (attributeType >= CPInteger16AttributeType && attributeType <= CPFloatAttributeType) if (attributeType >= CPInteger16AttributeType && attributeType <= CPFloatAttributeType)
{ {
view = [self _textFieldWithFrame:CGRectMake(0,0,50,26)]; view = [self _textFieldWithFrame:CGRectMake(0, 0, 50, 26)];
} }
else if (attributeType == CPStringAttributeType) else if (attributeType == CPStringAttributeType)
{ {
view = [self _textFieldWithFrame:CGRectMake(0,0,150,26)]; view = [self _textFieldWithFrame:CGRectMake(0, 0, 150, 26)];
} }
else if (attributeType == CPBooleanAttributeType) else if (attributeType == CPBooleanAttributeType)
{ {
view = [[CPCheckBox alloc] initWithFrame:CGRectMake(0,0,50,26)]; view = [[CPCheckBox alloc] initWithFrame:CGRectMake(0, 0, 50, 26)];
} }
else if (attributeType == CPDateAttributeType) else if (attributeType == CPDateAttributeType)
view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0,0,150,26)]; view = [[CPDatePicker alloc] initWithFrame:CGRectMake(0, 0, 150, 26)];
else else
return nil; return nil;
+123 -58
View File
@@ -60,7 +60,7 @@ var itemsContext = "items",
/*! /*!
@ingroup appkit @ingroup appkit
@class CPRuleEditor @class CPRuleEditor
@brief A view for creating and configuring criteria. @brief A view for creating and configuring criteria.
A CPRuleEditor object is a view that allows the user to visually create and configure a list of options which are expressed by the rule editor as a predicate (see Predicate documentation). The view has a delegate which offers a tree of choices to the view. The choices are presented by the view to the user as a row of popup buttons, static text fields, and custom views. Each row in the list represents a particular path down the tree of choices. A CPRuleEditor object is a view that allows the user to visually create and configure a list of options which are expressed by the rule editor as a predicate (see Predicate documentation). The view has a delegate which offers a tree of choices to the view. The choices are presented by the view to the user as a row of popup buttons, static text fields, and custom views. Each row in the list represents a particular path down the tree of choices.
@@ -157,7 +157,6 @@ var itemsContext = "items",
[self setBoundArrayKeyPath:@"boundArray"]; [self setBoundArrayKeyPath:@"boundArray"];
_slicesHolder = [[_CPRuleEditorViewSliceHolder alloc] initWithFrame:[self bounds]]; _slicesHolder = [[_CPRuleEditorViewSliceHolder alloc] initWithFrame:[self bounds]];
[_slicesHolder setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
[self addSubview:_slicesHolder]; [self addSubview:_slicesHolder];
_boundArrayOwner = [[_CPRuleEditorViewUnboundRowHolder alloc] init]; _boundArrayOwner = [[_CPRuleEditorViewUnboundRowHolder alloc] init];
@@ -182,6 +181,8 @@ var itemsContext = "items",
var animation = [[CPViewAnimation alloc] initWithDuration:0.5 animationCurve:CPAnimationEaseInOut]; var animation = [[CPViewAnimation alloc] initWithDuration:0.5 animationCurve:CPAnimationEaseInOut];
[self setAnimation:animation]; [self setAnimation:animation];
[_slicesHolder setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
_dropLineView = [self _createSliceDropSeparator]; _dropLineView = [self _createSliceDropSeparator];
[_slicesHolder addSubview:_dropLineView]; [_slicesHolder addSubview:_dropLineView];
@@ -617,7 +618,7 @@ TODO: implement
if (lastSelected >= [self numberOfRows]) if (lastSelected >= [self numberOfRows])
[CPException raise:CPRangeException reason:@"row indexes " + indexes + " are out of range"]; [CPException raise:CPRangeException reason:@"row indexes " + indexes + " are out of range"];
if (!extend) if (!extend)
[self _deselectAll]; [self _deselectAll];
@@ -627,7 +628,7 @@ TODO: implement
rowIndex = [slice rowIndex], rowIndex = [slice rowIndex],
contains = [indexes containsIndex:rowIndex]; contains = [indexes containsIndex:rowIndex];
shouldSelect = (contains && !(extend && [slice _isSelected])); shouldSelect = (contains && !(extend && [slice _isSelected]));
if (contains) if (contains)
[slice _setSelected:shouldSelect]; [slice _setSelected:shouldSelect];
[slice _setLastSelected:(rowIndex == lastSelected)]; [slice _setLastSelected:(rowIndex == lastSelected)];
@@ -1053,7 +1054,7 @@ TODO: implement
@param rowType The type of the row. @param rowType The type of the row.
@return An object representing the requested child (or root) criterion. This object is used by the delegate to represent that position in the tree, and is passed as a parameter in subsequent calls to the delegate. @return An object representing the requested child (or root) criterion. This object is used by the delegate to represent that position in the tree, and is passed as a parameter in subsequent calls to the delegate.
@discussion This method is required. @discussion This method is required.
- (id)ruleEditor:(CPRuleEditor)editor child:(CPInteger)index forCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType - (id)ruleEditor:(CPRuleEditor)editor child:(CPInteger)index forCriterion:(id)criterion withRowType:(CPRuleEditorRowType)rowType
*/ */
@@ -1358,9 +1359,9 @@ TODO: implement
- (CPMutableArray)_getItemsAndValuesToAddForRow:(int)rowIndex ofType:(CPRuleEditorRowType)type - (CPMutableArray)_getItemsAndValuesToAddForRow:(int)rowIndex ofType:(CPRuleEditorRowType)type
{ {
var cachedItemsAndValues = _itemsAndValuesToAddForRowType[type]; //var cachedItemsAndValues = _itemsAndValuesToAddForRowType[type];
if (cachedItemsAndValues) //if (cachedItemsAndValues)
return cachedItemsAndValues; // return cachedItemsAndValues;
var itemsAndValues = [CPMutableArray array], var itemsAndValues = [CPMutableArray array],
items = [CPMutableArray array], items = [CPMutableArray array],
@@ -1513,41 +1514,38 @@ TODO: implement
} }
} }
- (void)_changedItem:(id)oldItem toItem:(id)newItem inRow:(int)rowIndex atCriteriaIndex:(int)indexInCriteria - (void)_changedItem:(id)fromItem toItem:(id)toItem inRow:(int)aRow atCriteriaIndex:(int)fromItemIndex
{ {
var criteria = [self criteriaForRow:rowIndex], var criteria = [self criteriaForRow:aRow],
values = [self displayValuesForRow:rowIndex], displayValues = [self displayValuesForRow:aRow],
type = [self rowTypeForRow:rowIndex], rowType = [self rowTypeForRow:aRow],
anItem = toItem;
//fromItemIndex = [criteria indexOfObjectIdenticalTo:fromItem];
itemToAdd = newItem, var items = [criteria subarrayWithRange:CPMakeRange(0, fromItemIndex)],
relativeIndexInCriteria = 0, values = [displayValues subarrayWithRange:CPMakeRange(0, fromItemIndex)];
num_childs = 1000,
remainingRange = CPMakeRange(0, indexInCriteria), _lastRow = aRow;
finalCriteria = [[CPMutableArray alloc] initWithArray:[criteria subarrayWithRange:remainingRange]],
finalValues = [[CPMutableArray alloc] initWithArray:[values subarrayWithRange:remainingRange]];
while (num_childs > 0) while (YES)
{ {
var displayvalue = [self _queryValueForItem:itemToAdd inRow:rowIndex]; [items addObject:anItem];
var value = [self _queryValueForItem:anItem inRow:aRow];
[values addObject:value];
[finalCriteria addObject:itemToAdd]; if (![self _queryNumberOfChildrenOfItem:anItem withRowType:rowType])
[finalValues addObject:displayvalue]; break;
num_childs = [self _queryNumberOfChildrenOfItem:itemToAdd withRowType:type]; anItem = [self _queryChild:0 ofItem:anItem withRowType:rowType];
if (num_childs > 0)
itemToAdd = [self _queryChild:0 ofItem:itemToAdd withRowType:type];
relativeIndexInCriteria++;
} }
var object = [[self _rowCacheForIndex:rowIndex] rowObject]; var object = [[self _rowCacheForIndex:aRow] rowObject];
[object setValue:finalCriteria forKey:_itemsKeyPath]; [object setValue:items forKey:_itemsKeyPath];
[object setValue:finalValues forKey:_valuesKeyPath]; [object setValue:values forKey:_valuesKeyPath];
[[_slices objectAtIndex:rowIndex] _reconfigureSubviews];
var slice = [_slices objectAtIndex:aRow];
[slice _reconfigureSubviews];
[self _sendRuleAction];
[self _postRuleOptionChangedNotification]; [self _postRuleOptionChangedNotification];
} }
@@ -1667,11 +1665,17 @@ TODO: implement
return; return;
} }
if ([observableController respondsToSelector:@selector(objectClass)])
_rowClass = [observableController objectClass];
if ([binding isEqualToString:@"rows"]) if ([binding isEqualToString:@"rows"])
[self _setBoundDataSource:observableController withKeyPath:keyPath options:options]; {
if ([observableController respondsToSelector:@selector(objectClass)])
_rowClass = [observableController objectClass];
[self _setBoundDataSource:observableController withKeyPath:keyPath options:options];
}
else if ([binding isEqualToString:CPValueBinding])
[super bind:binding toObject:observableController withKeyPath:keyPath options:options];
else
[CPException raise:CPInvalidArgumentException reason:"Keypath or bound object cannot be nil"];
} }
- (void)unbind:(id)object - (void)unbind:(id)object
@@ -1801,19 +1805,18 @@ TODO: implement
- (void)animationDidEnd:(CPViewAnimation)animation - (void)animationDidEnd:(CPViewAnimation)animation
{ {
var nextSimple = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeSimple], // var nextSimple = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeSimple],
nextCompound = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeCompound]; // nextCompound = [self _getItemsAndValuesToAddForRow:0 ofType:CPRuleEditorRowTypeCompound];
_itemsAndValuesToAddForRowType = {CPRuleEditorRowTypeSimple:nextSimple, CPRuleEditorRowTypeCompound:nextCompound}; // _itemsAndValuesToAddForRowType = {CPRuleEditorRowTypeSimple:nextSimple, CPRuleEditorRowTypeCompound:nextCompound};
} }
- (void)_updateSliceRows - (void)_updateSliceRows
{ {
var width = [self frame].size.width, var width = [self frame].size.width,
count = [_slices count], count = [_slices count];
i;
for (i = 0; i < count; i++) for (var i = 0; i < count; i++)
{ {
var slice = [_slices objectAtIndex:i], var slice = [_slices objectAtIndex:i],
targetRect = CGRectMake(0, i * _sliceHeight, width, _sliceHeight); targetRect = CGRectMake(0, i * _sliceHeight, width, _sliceHeight);
@@ -1937,7 +1940,7 @@ TODO: implement
var modifierFlags = [event modifierFlags], var modifierFlags = [event modifierFlags],
extend = (modifierFlags & CPCommandKeyMask) || (modifierFlags & CPShiftKeyMask), extend = (modifierFlags & CPCommandKeyMask) || (modifierFlags & CPShiftKeyMask),
rowIndexes = [CPIndexSet indexSetWithIndex:[slice rowIndex]]; rowIndexes = [CPIndexSet indexSetWithIndex:[slice rowIndex]];
[self selectRowIndexes:rowIndexes byExtendingSelection:extend]; [self selectRowIndexes:rowIndexes byExtendingSelection:extend];
} }
@@ -2091,7 +2094,7 @@ TODO: implement
if ([selected_indices containsIndex:mainRowIndex]) if ([selected_indices containsIndex:mainRowIndex])
[draggingRows addIndexes:selected_indices]; [draggingRows addIndexes:selected_indices];
_draggingRows = [self _includeSubslicesForSlicesAtIndexes:draggingRows]; _draggingRows = [self _includeSubslicesForSlicesAtIndexes:draggingRows];
var firstIndex = [_draggingRows firstIndex], var firstIndex = [_draggingRows firstIndex],
firstSlice = [_slices objectAtIndex:firstIndex], firstSlice = [_slices objectAtIndex:firstIndex],
dragview = [[CPView alloc] initWithFrame:[firstSlice frame]]; dragview = [[CPView alloc] initWithFrame:[firstSlice frame]];
@@ -2307,6 +2310,61 @@ TODO: implement
[self sendAction:[self action] to:[self target]]; [self sendAction:[self action] to:[self target]];
} }
- (BOOL)_sendsActionOnIncompleteTextChange
{
return YES;
}
- (void)_getAllAvailableItems:(id)items values:(id)values asChildrenOfItem:(id)parentItem inRow:(int)aRow
{
var type,
indexofCriterion,
numOfChildren;
var availItems = [CPMutableArray array],
availValues = [CPMutableArray array];
var criterion = nil,
value = nil;
_lastRow = aRow;
type = [self rowTypeForRow:aRow];
numOfChildren = [self _queryNumberOfChildrenOfItem:parentItem withRowType:type];
var criteria = [self criteriaForRow:aRow];
indexofCriterion = [criteria indexOfObject:criterion];
if (parentItem != nil
&& indexofCriterion != CPNotFound
&& indexofCriterion < [criteria count] - 1)
{
var next = indexofCriterion + 1;
criterion = [criteria objectAtIndex:next];
var values = [self displayValuesForRow:aRow];
value = [values objectAtIndex:next];
}
for (var i = 0; i < numOfChildren; ++i)
{
var aChild = [self _queryChild:i ofItem:parentItem withRowType:type];
var availChild = aChild,
availValue = value;
if ( criterion != aChild )
availValue = [self _queryValueForItem:aChild inRow:aRow];
if ( !availValue )
availValue = [self _queryValueForItem:availChild inRow:aRow];
[availItems addObject:availChild];
[availValues addObject:availValue];
}
[items addObjectsFromArray:availItems];
[values addObjectsFromArray:availValues];
}
@end @end
var CPRuleEditorAlignmentGridWidthKey = @"CPRuleEditorAlignmentGridWidth", var CPRuleEditorAlignmentGridWidthKey = @"CPRuleEditorAlignmentGridWidth",
@@ -2508,24 +2566,31 @@ var dropSeparatorColor = [CPColor colorWithHexString:@"4886ca"];
@end @end
@implementation CPControl (ToolTip) @implementation CPObject (CPRuleEditorSliceRow)
- (void)setToolTip:(CPString)aToolTip - (int)valueType
{ {
if (_toolTip == aToolTip) var result = 0;
return;
_toolTip = aToolTip; var isString = [self isKindOfClass:[CPString class]];
#if PLATFORM(DOM) if ( !isString )
_DOMElement.title = aToolTip; {
#endif var isView = [self isKindOfClass:[CPView class]];
} result = 1;
if ( !isView )
{
var ismenuItem = [self isKindOfClass:[CPMenuItem class]];
result = 2;
if ( !ismenuItem )
{
[CPException raise:CPGenericException reason:@"Unknown Type For " + self];
result = -1;
}
}
}
- (CPString)toolTip return result;
{
return _toolTip;
} }
@end @end
/*! @endcond */ /*! @endcond */
+63 -22
View File
@@ -12,60 +12,101 @@
CPArray children @accessors(copy); CPArray children @accessors(copy);
} }
- (BOOL)applyTemplate:(id)template withViews:(id)views forOriginalTemplate:(id)arg3
{
return YES; // not in use
}
+ (id)rowNodeFromTree:(id)aTree + (id)rowNodeFromTree:(id)aTree
{ {
return [_CPPredicateEditorRowNode _rowNodeFromTree:aTree withTemplate:[aTree template]]; var mapTable = {};
return [_CPPredicateEditorRowNode _rowNodeFromTree:aTree withTemplateTable:mapTable];
} }
+ (id)_rowNodeFromTree:(id)aTree withTemplate:(id)template + (id)_rowNodeFromTree:(id)aTree withTemplateTable:(id)templateTable
{ {
var nodeChildren = [CPArray array], var node,
views,
copiedContainer;
node = [[_CPPredicateEditorRowNode alloc] init];
node.tree = aTree;
var template = [aTree template],
uuid = [template UID];
var cachedNode = templateTable[uuid];
if (cachedNode == nil)
{
views = [CPMutableArray array];
copiedContainer = [CPMutableArray array];
templateTable[uuid] = node;
}
else
{
views = [cachedNode templateViews];
copiedContainer = [cachedNode copiedTemplateContainer];
}
node.templateViews = views;
node.copiedTemplateContainer = copiedContainer;
var nodeChildren = [CPMutableArray array],
treeChildren = [aTree children], treeChildren = [aTree children],
count = [treeChildren count]; count = [treeChildren count];
for (var i = 0; i < count; i++) for (var i = 0; i < count; i++)
{ {
var childnode = [self _rowNodeFromTree:treeChildren[i] withTemplate:template]; var treeChild = treeChildren[i],
[nodeChildren addObject:childnode]; child = [_CPPredicateEditorRowNode _rowNodeFromTree:treeChild withTemplateTable:templateTable];
[nodeChildren addObject:child];
} }
var node = [_CPPredicateEditorRowNode new];
[node setTree:aTree];
[node setCopiedTemplateContainer:[CPMutableArray arrayWithObject:template]];
[node setTemplateViews:[template templateViews]];
[node setChildren:nodeChildren]; [node setChildren:nodeChildren];
return node; return node;
} }
- (BOOL)applyTemplate:(id)template withViews:(id)views forOriginalTemplate:(id)originalTemplate
{
var t = [tree template];
if (t !== template)
{
[templateViews setArray:views];
[copiedTemplateContainer removeAllObjects];
[copiedTemplateContainer addObject:template];
}
var count = [children count];
for (var i; i < count; i++)
[children[i] applyTemplate:template withViews:views forOriginalTemplate:originalTemplate];
}
- (BOOL)isEqual:(id)node - (BOOL)isEqual:(id)node
{ {
return (self === node || tree === [node tree]); if (![node isKindOfClass:[_CPPredicateEditorRowNode class]])
return NO;
return (tree === [node tree]);
} }
- (void)copyTemplateIfNecessary - (void)copyTemplateIfNecessary
{ {
if ([[self templateForRow] rightIsWildcard]) if ([copiedTemplateContainer count] == 0)
{ {
CPLogConsole("COPYING TEMPLATE");
var copy = [[tree template] copy]; var copy = [[tree template] copy];
[self setCopiedTemplateContainer:[CPMutableArray arrayWithObject:copy]]; [copiedTemplateContainer addObject:copy];
[self setTemplateViews:[copy templateViews]]; [templateViews addObjectsFromArray:[copy templateViews]];
} }
} }
- (CPView)templateView - (CPView)templateView
{ {
[self copyTemplateIfNecessary];
return [templateViews objectAtIndex:[tree indexIntoTemplate]]; return [templateViews objectAtIndex:[tree indexIntoTemplate]];
} }
- (id)templateForRow - (id)templateForRow
{ {
[self copyTemplateIfNecessary];
return [copiedTemplateContainer lastObject]; return [copiedTemplateContainer lastObject];
} }
@@ -77,15 +118,15 @@
- (id)displayValue - (id)displayValue
{ {
var title = [self title]; var title = [self title];
if (title == nil) if (title != nil)
return [self templateView]; return title;
return title; return [self templateView];
} }
- (CPString)description - (CPString)description
{ {
return [CPString stringWithFormat:@"<%@ %@ %@ %p>", [self className], [self title], [self displayValue], self]; return [CPString stringWithFormat:@"<%@ %@ %@ tree:%@ tviews:%@", [self className],[self UID], [self title], [tree UID], [templateViews description]];
} }
@end @end
+152 -133
View File
@@ -41,8 +41,8 @@ var CONTROL_HEIGHT = 16.,
_addButton = [self _createAddRowButton]; _addButton = [self _createAddRowButton];
_subtractButton = [self _createDeleteRowButton]; _subtractButton = [self _createDeleteRowButton];
[_addButton setToolTip:[_ruleEditor _toolTipForAddSimpleRowButton]]; //[_addButton setToolTip:[_ruleEditor _toolTipForAddSimpleRowButton]];
[_subtractButton setToolTip:[_ruleEditor _toolTipForDeleteRowButton]]; //[_subtractButton setToolTip:[_ruleEditor _toolTipForDeleteRowButton]];
[_addButton setHidden:!editable]; [_addButton setHidden:!editable];
[_subtractButton setHidden:!editable]; [_subtractButton setHidden:!editable];
[self addSubview:_addButton]; [self addSubview:_addButton];
@@ -81,15 +81,16 @@ var CONTROL_HEIGHT = 16.,
- (CPMenuItem)_createMenuItemWithTitle:(CPString )title - (CPMenuItem)_createMenuItemWithTitle:(CPString )title
{ {
title = [[_ruleEditor standardLocalizer] localizedStringForString:title]; title = [[_ruleEditor standardLocalizer] localizedStringForString:title];
return [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]; var mItem = [[CPMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""];
return mItem;
} }
- (CPPopUpButton)_createPopUpButtonWithItems:(CPArray)itemsArray selectedItemIndex:(int)index - (CPPopUpButton)_createPopUpButtonWithItems:(CPArray)itemsArray selectedItemIndex:(int)index
{ {
var title = [[itemsArray objectAtIndex:index] title], var title = [[itemsArray objectAtIndex:index] title];
font = [_ruleEditor font], var font = [_ruleEditor font],
width = [title sizeWithFont:font].width + 20, width = [title sizeWithFont:font].width + 20,
rect = CGRectMake(0, ([_ruleEditor rowHeight] - CONTROL_HEIGHT)/2, (width - width % 40) + 80, CONTROL_HEIGHT); rect = CGRectMake(0, 0, (width - width % 40) + 80, CONTROL_HEIGHT);
var popup = [[_CPRuleEditorPopUpButton alloc] initWithFrame:rect]; var popup = [[_CPRuleEditorPopUpButton alloc] initWithFrame:rect];
[popup setValue:font forThemeAttribute:@"font"]; [popup setValue:font forThemeAttribute:@"font"];
@@ -143,10 +144,10 @@ var CONTROL_HEIGHT = 16.,
{ {
var layoutdict = [sender representedObject], var layoutdict = [sender representedObject],
newItem = [layoutdict objectForKey:@"item"], newItem = [layoutdict objectForKey:@"item"],
indexInCriteria = [[layoutdict objectForKey:@"indexInCriteria"] intValue], indexInCriteria = [layoutdict objectForKey:@"indexInCriteria"],
oldItem = [_correspondingRuleItems objectAtIndex:indexInCriteria]; oldItem = [_correspondingRuleItems objectAtIndex:indexInCriteria];
if (newItem != oldItem) if (![newItem isEqual:oldItem])
{ {
[_correspondingRuleItems replaceObjectAtIndex:indexInCriteria withObject:newItem]; [_correspondingRuleItems replaceObjectAtIndex:indexInCriteria withObject:newItem];
[_ruleEditor _changedItem:oldItem toItem:newItem inRow:_rowIndex atCriteriaIndex:indexInCriteria]; [_ruleEditor _changedItem:oldItem toItem:newItem inRow:_rowIndex atCriteriaIndex:indexInCriteria];
@@ -172,150 +173,189 @@ var CONTROL_HEIGHT = 16.,
- (void)_reconfigureSubviews - (void)_reconfigureSubviews
{ {
var numItems; var ruleItems,
currentItem = nil, criteria,
optionView = nil, repObject,
indexInCriteria = 0, menuItem,
ruleView,
criterion,
parent,
numberOfCriteria,
numberOfChildren,
firstResponderIndex;
rowtype = [_ruleEditor rowTypeForRow:_rowIndex], var ruleItems = [CPMutableArray array];
displayValues = [_ruleEditor displayValuesForRow:_rowIndex];
[self _emptyRulePartSubviews]; [self _emptyRulePartSubviews];
[_correspondingRuleItems removeAllObjects];
while ((numItems = [_ruleEditor _queryNumberOfChildrenOfItem:currentItem withRowType:rowtype]) > 0) criteria = [_ruleEditor criteriaForRow:_rowIndex];
numberOfCriteria = [criteria count];
firstResponderIndex = numberOfCriteria - 1;
var responder = [[self window] firstResponder];
if (responder)
firstResponderIndex = [_ruleOptionViews indexOfObjectIdenticalTo:responder];
for (var i = 0; i < numberOfCriteria; i++)
{ {
var isCustomRightControl = NO; ruleView = nil;
isStaticTextField = NO, parent = nil;
isPopupMenu = NO, criterion = [criteria objectAtIndex:i];
isMultiValue = numItems > 1,
selectedMenuItemIndex = 0,
selectedItem = nil,
current_display_value = nil,
itemsArray = [CPMutableArray array], if (i > 0)
display_value_cached = [displayValues objectAtIndex:indexInCriteria]; parent = [criteria objectAtIndex:i - 1];
for (var childIndex = 0; childIndex < numItems; childIndex++) var childItems = [],
childValues = [];
[_ruleEditor _getAllAvailableItems:childItems values:childValues asChildrenOfItem:parent inRow:_rowIndex];
numberOfChildren = [childItems count];
if (numberOfChildren > 1)
{ {
var childItem = [_ruleEditor _queryChild:childIndex ofItem:currentItem withRowType:rowtype]; var menuItems = [CPMutableArray arrayWithCapacity:numberOfChildren];
current_display_value = [_ruleEditor _queryValueForItem:childItem inRow:_rowIndex];
if (isMultiValue) var selectedIndex = [childItems indexOfObject:criterion];
if (selectedIndex == CPNotFound)
break;
for (var j = 0; j < numberOfChildren; ++j)
{ {
var menuItem; var childItem = [childItems objectAtIndex:j];
var childValue = [childValues objectAtIndex:j];
if ([current_display_value isKindOfClass:[CPString class]]) if ([childValue isKindOfClass:[CPMenuItem class]])
menuItem = [self _createMenuItemWithTitle:current_display_value];
else if ([current_display_value isKindOfClass:[CPMenuItem class]])
menuItem = current_display_value;
else
[CPException raise:CPInternalInconsistencyException reason:@"Display value must be a string or a menu item"];
var layoutDictionary = [CPDictionary dictionaryWithObjectsAndKeys:childItem, @"item", indexInCriteria, @"indexInCriteria"];
[menuItem setAction:@selector(_ruleOptionPopupChangedAction:)];
[menuItem setTarget:self];
[menuItem setRepresentedObject:layoutDictionary];
[menuItem setTag:indexInCriteria];
[itemsArray addObject:menuItem];
isPopupMenu = YES;
if ((childIndex == numItems - 1 && selectedItem == nil)
|| ([current_display_value isEqual:display_value_cached])
|| ([current_display_value isKindOfClass:[CPView class]]
&& [[current_display_value objectValue] isEqualTo:[display_value_cached objectValue]]))
{ {
selectedItem = childItem; [[childValue menu] removeItem:childValue];
selectedMenuItemIndex = childIndex; menuItem = childValue;
} }
else
{
if ([childValue isEqualToString:@""])
menuItem = [self _createMenuSeparatorItem];
else
{
menuItem = [self _createMenuItemWithTitle:childValue];
[menuItem setTarget:self];
[menuItem setAction:@selector(_ruleOptionPopupChangedAction:)];
}
}
repObject = [CPDictionary dictionaryWithObjectsAndKeys:childItem, @"item", childValue, @"value", i, @"indexInCriteria"];
[menuItem setRepresentedObject:repObject];
[menuItems addObject:menuItem];
} }
else if ([current_display_value isKindOfClass:[CPString class]])
ruleView = [self _createPopUpButtonWithItems:menuItems selectedItemIndex:selectedIndex];
}
else
{
var value = [childValues objectAtIndex:0];
var type = [value valueType];
if (type === 0)
ruleView = [self _createStaticTextFieldWithStringValue:value];
else
{ {
isStaticTextField = YES; if (type !== 1)
selectedItem = childItem; {
selectedMenuItemIndex =0; [CPException raise:CPInternalInconsistencyException reason:@"Display value must be a string or a menu item"];
continue;
}
ruleView = value;
[ruleView setTarget:self];
[ruleView setAction:@selector(_sendRuleAction:)];
if ([ruleView respondsToSelector:@selector(setDelegate:)])
[ruleView setDelegate:self];
} }
else if ([current_display_value isKindOfClass:[CPView class]])
{
isCustomRightControl = YES;
selectedItem = childItem;
selectedMenuItemIndex = 0;
} else
[CPException raise:CPInternalInconsistencyException reason:@"Display value must be a string or a custom control"];
} }
if (isPopupMenu) if (ruleView != nil)
{ {
optionView = [self _createPopUpButtonWithItems:itemsArray selectedItemIndex:selectedMenuItemIndex]; [_ruleOptionViews addObject:ruleView];
} var frame = [ruleView frame];
else if (isStaticTextField) [_ruleOptionInitialViewFrames addObject:frame];
{ [_ruleOptionFrames addObject:frame];
optionView = [self _createStaticTextFieldWithStringValue:[current_display_value description]];
}
else if (isCustomRightControl)
{
optionView = display_value_cached; //display_value_cached
[optionView setTarget:self];
[optionView setAction:@selector(_sendRuleAction:)];
if ([optionView respondsToSelector:@selector(setEditable:)])
[optionView setEditable:editable];
}
if (optionView) if (!criterion)
{ criterion = [CPNull null];
[_ruleOptionViews addObject:optionView];
[_ruleOptionInitialViewFrames addObject:[optionView frame]];
[_ruleOptionFrames addObject:[optionView frame]];
}
[_correspondingRuleItems addObject:selectedItem]; [ruleItems addObject:criterion];
currentItem = selectedItem; }
indexInCriteria++;
} }
[self _relayoutSubviewsWidthChanged:(CGRectGetWidth([self frame]) != [_ruleEditor rowHeight])]; [_correspondingRuleItems setArray:ruleItems];
if (!editable)
[self _updateEnabledStateForSubviews];
[self _relayoutSubviewsWidthChanged:YES];
if (firstResponderIndex != CPNotFound)
{
var aView = [_ruleOptionViews objectAtIndex:firstResponderIndex];
[[self window] makeFirstResponder:aView]; // This is not working. bug in CPPopUpButton firstResponder ?
}
//[self setNeedsDisplay:YES];
}
- (void)_updateEnabledStateForSubviews
{
[_ruleOptionViews makeObjectsPerformSelector:@selector(setEnabled:) withObject:NO];
} }
- (void)layoutSubviews - (void)layoutSubviews
{ {
// CPLogConsole(_cmd);
[self _relayoutSubviewsWidthChanged:YES]; [self _relayoutSubviewsWidthChanged:YES];
} }
- (void)_relayoutSubviewsWidthChanged:(BOOL)widthChanged - (void)_relayoutSubviewsWidthChanged:(BOOL)widthChanged
{ {
var optionViewOriginX, var optionViewOriginX,
leftHorizontalPadding,
leftButtonMinX,
rowHeight = [_ruleEditor rowHeight], rowHeight = [_ruleEditor rowHeight],
count = [_ruleOptionViews count], count = [_ruleOptionViews count],
sliceFrame = [self frame]; sliceFrame = [self frame];
if (widthChanged)
optionViewOriginX = [self _leftmostViewFixedHorizontalPadding] + [self _indentationHorizontalPadding]*[self indentation];
for (var i = 0; i < count; i++)
{
var ruleOptionView = _ruleOptionViews[i],
optionFrame = _ruleOptionFrames[i],
initialFrame = _ruleOptionInitialViewFrames[i];
optionFrame.origin.y = (rowHeight - CGRectGetHeight(optionFrame))/2 - 2;
if (widthChanged)
{
optionFrame.origin.x = optionViewOriginX;
optionFrame.size.width = MIN(CGRectGetMinX(optionFrame) + CGRectGetWidth(initialFrame), CGRectGetMinX([_subtractButton frame]) - [self _rowButtonsLeftHorizontalPadding]) - CGRectGetMinX(optionFrame);
}
[ruleOptionView setFrame:optionFrame];
[self addSubview:ruleOptionView];
if (widthChanged)
optionViewOriginX += CGRectGetWidth(optionFrame) + [self _interviewHorizontalPadding];
}
var buttonFrame = CGRectMake(CGRectGetWidth(sliceFrame) - BUTTON_HEIGHT - [self _rowButtonsRightHorizontalPadding], ([_ruleEditor rowHeight] - BUTTON_HEIGHT)/2 - 2, BUTTON_HEIGHT, BUTTON_HEIGHT); var buttonFrame = CGRectMake(CGRectGetWidth(sliceFrame) - BUTTON_HEIGHT - [self _rowButtonsRightHorizontalPadding], ([_ruleEditor rowHeight] - BUTTON_HEIGHT)/2 - 2, BUTTON_HEIGHT, BUTTON_HEIGHT);
[_addButton setFrame:buttonFrame]; [_addButton setFrame:buttonFrame];
buttonFrame.origin.x -= BUTTON_HEIGHT + [self _rowButtonsInterviewHorizontalPadding]; buttonFrame.origin.x -= BUTTON_HEIGHT + [self _rowButtonsInterviewHorizontalPadding];
[_subtractButton setFrame:buttonFrame]; [_subtractButton setFrame:buttonFrame];
if (widthChanged)
{
optionViewOriginX = [self _leftmostViewFixedHorizontalPadding] + [self _indentationHorizontalPadding] * _indentation;
leftHorizontalPadding = [self _rowButtonsLeftHorizontalPadding];
leftButtonMinX = CGRectGetMinX(buttonFrame);
}
for (var i = 0; i < count; i++)
{
var ruleOptionView = _ruleOptionViews[i],
optionFrame = _ruleOptionFrames[i];
optionFrame.origin.y = (rowHeight - CGRectGetHeight(optionFrame))/2 - 2;
if (widthChanged)
{
optionFrame.origin.x = optionViewOriginX;
if (i == count - 1 && ![self _isRulePopup:ruleOptionView])
{
var initialFrame = _ruleOptionInitialViewFrames[i];
optionFrame.size.width = MIN(CGRectGetWidth(initialFrame), leftButtonMinX - leftHorizontalPadding - optionViewOriginX);
}
}
[ruleOptionView setFrame:optionFrame];
[self addSubview:ruleOptionView];
if (widthChanged)
optionViewOriginX += CGRectGetWidth(optionFrame) + [self _interviewHorizontalPadding];
}
} }
- (void)_updateButtonVisibilities - (void)_updateButtonVisibilities
@@ -438,31 +478,10 @@ var CONTROL_HEIGHT = 16.,
- (void)_textDidChange:(CPNotification)aNotif - (void)_textDidChange:(CPNotification)aNotif
{ {
if ([[aNotif object] superview] == self) if ([[aNotif object] superview] == self && [_ruleEditor _sendsActionOnIncompleteTextChange])
[_ruleEditor _sendRuleAction]; [_ruleEditor _sendRuleAction];
} }
/*
- (BOOL)_dropsIndentWhenImmediatelyBelow
{
}
- (double)_minWidthForPass:(int)pass forView:(id)view withProposedMinWidth:(double)minWidth
{
}
- (id)_sortOptionDictionariesByLayoutOrder:(id)fp8
{
}
- (void)_setHideNonPartDrawing:(BOOL)value
{
}
- (void)_tightenResizables:(id)fp8 intoGivenWidth:(double)fp12
{
}
- (void)_updateEnabledStateForSubviews
{
}
*/
@end @end
@implementation _CPRuleEditorTextField : CPTextField @implementation _CPRuleEditorTextField : CPTextField
@@ -490,4 +509,4 @@ var CONTROL_HEIGHT = 16.,
return [self superview]; return [self superview];
} }
@end @end
@@ -11,7 +11,7 @@
@implementation AppController : CPObject @implementation AppController : CPObject
{ {
CPWindow window; CPWindow window;
CPRuleEditor predicateEditor; CPPredicateEditor predicateEditor;
CPTextField predicateField; CPTextField predicateField;
CPTableView leftTable; CPTableView leftTable;
@@ -33,6 +33,9 @@
[templateBox setCornerRadius:10]; [templateBox setCornerRadius:10];
[self updateAddTemplateButton]; [self updateAddTemplateButton];
[predicateEditor setAction:@selector(predicateEditorAction:)];
[predicateEditor setTarget:self];
[window setBackgroundColor:[CPColor colorWithHexString:@"f3f4f5"]]; [window setBackgroundColor:[CPColor colorWithHexString:@"f3f4f5"]];
[window setFullBridge:YES]; [window setFullBridge:YES];
@@ -47,13 +50,13 @@
- (IBAction)predicateEditorAction:(id)sender - (IBAction)predicateEditorAction:(id)sender
{ {
[predicateEditor reloadPredicate]; // CPLogConsole(_cmd + [predicateEditor displayValuesForRow:1]);
[predicateField setStringValue:[[predicateEditor objectValue] predicateFormat]]; [predicateField setStringValue:[[predicateEditor objectValue] predicateFormat]];
} }
- (void)ruleEditorRowsDidChange:(CPNotification)notification - (void)ruleEditorRowsDidChange:(CPNotification)notification
{ {
CPLogConsole(_cmd);
} }
// Templates maker // Templates maker
File diff suppressed because one or more lines are too long
@@ -1151,11 +1151,12 @@
<string key="NSFrame">{{20, 476}, {611, 22}}</string> <string key="NSFrame">{{20, 476}, {611, 22}}</string>
<reference key="NSSuperview" ref="439893737"/> <reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="869316024"/>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1062851196"> <object class="NSTextFieldCell" key="NSCell" id="1062851196">
<int key="NSCellFlags">-1804468671</int> <int key="NSCellFlags">-1804468671</int>
<int key="NSCellFlags2">268436480</int> <int key="NSCellFlags2">268436480</int>
<string key="NSContents">string ENDSWITH "foo"</string> <string key="NSContents">string MATCHES "foo"</string>
<reference key="NSSupport" ref="112893232"/> <reference key="NSSupport" ref="112893232"/>
<reference key="NSControlView" ref="884566601"/> <reference key="NSControlView" ref="884566601"/>
<bool key="NSDrawsBackground">YES</bool> <bool key="NSDrawsBackground">YES</bool>
@@ -1195,17 +1196,17 @@
<reference key="NSNextResponder" ref="407607490"/> <reference key="NSNextResponder" ref="407607490"/>
<int key="NSvFlags">274</int> <int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSRuleEditorViewSliceRow" id="939521342"> <object class="NSRuleEditorViewSliceRow" id="356804940">
<reference key="NSNextResponder" ref="211063809"/> <reference key="NSNextResponder" ref="211063809"/>
<int key="NSvFlags">290</int> <int key="NSvFlags">290</int>
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="261593316"> <object class="NSButton" id="163892837">
<reference key="NSNextResponder" ref="939521342"/> <reference key="NSNextResponder" ref="356804940"/>
<int key="NSvFlags">257</int> <int key="NSvFlags">257</int>
<string key="NSFrame">{{581, 4}, {18, 18}}</string> <string key="NSFrame">{{581, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="939521342"/> <reference key="NSSuperview" ref="356804940"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="838952732"/> <reference key="NSNextKeyView" ref="460920540"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell"> <object class="NSRuleEditorButtonCell" key="NSCell">
@@ -1223,9 +1224,9 @@
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/> <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary> </dictionary>
</array> </array>
<reference key="NSControlView" ref="261593316"/> <reference key="NSControlView" ref="163892837"/>
<string key="NSAction">_addOption:</string> <string key="NSAction">_addOption:</string>
<reference key="NSTarget" ref="939521342"/> <reference key="NSTarget" ref="356804940"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
<object class="NSFont" key="NSAlternateImage" id="28"> <object class="NSFont" key="NSAlternateImage" id="28">
@@ -1238,13 +1239,13 @@
<int key="NSPeriodicInterval">75</int> <int key="NSPeriodicInterval">75</int>
</object> </object>
</object> </object>
<object class="NSButton" id="81758585"> <object class="NSButton" id="870073061">
<reference key="NSNextResponder" ref="939521342"/> <reference key="NSNextResponder" ref="356804940"/>
<int key="NSvFlags">257</int> <int key="NSvFlags">-2147483391</int>
<string key="NSFrame">{{561, 4}, {18, 18}}</string> <string key="NSFrame">{{561, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="939521342"/> <reference key="NSSuperview" ref="356804940"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="261593316"/> <reference key="NSNextKeyView" ref="163892837"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell"> <object class="NSRuleEditorButtonCell" key="NSCell">
@@ -1258,9 +1259,9 @@
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/> <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary> </dictionary>
</array> </array>
<reference key="NSControlView" ref="81758585"/> <reference key="NSControlView" ref="870073061"/>
<string key="NSAction">_deleteOption:</string> <string key="NSAction">_deleteOption:</string>
<reference key="NSTarget" ref="939521342"/> <reference key="NSTarget" ref="356804940"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="28"/> <reference key="NSAlternateImage" ref="28"/>
@@ -1270,10 +1271,10 @@
</object> </object>
</object> </object>
<object class="NSPopUpButton" id="862982389"> <object class="NSPopUpButton" id="862982389">
<reference key="NSNextResponder" ref="939521342"/> <reference key="NSNextResponder" ref="356804940"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">256</int>
<string key="NSFrame">{{7, 4}, {58, 19}}</string> <string key="NSFrame">{{7, 4}, {58, 19}}</string>
<reference key="NSSuperview" ref="939521342"/> <reference key="NSSuperview" ref="356804940"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="735996687"/> <reference key="NSNextKeyView" ref="735996687"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
@@ -1338,12 +1339,12 @@
</object> </object>
</object> </object>
<object class="NSPopUpButton" id="735996687"> <object class="NSPopUpButton" id="735996687">
<reference key="NSNextResponder" ref="939521342"/> <reference key="NSNextResponder" ref="356804940"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">256</int>
<string key="NSFrame">{{71, 4}, {167, 19}}</string> <string key="NSFrame">{{71, 4}, {167, 19}}</string>
<reference key="NSSuperview" ref="939521342"/> <reference key="NSSuperview" ref="356804940"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="81758585"/> <reference key="NSNextKeyView" ref="870073061"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="740771535"> <object class="NSPopUpButtonCell" key="NSCell" id="740771535">
@@ -1400,7 +1401,7 @@
<string key="NSRuleOptionFrames.0">{{7, 4}, {58, 19}}</string> <string key="NSRuleOptionFrames.0">{{7, 4}, {58, 19}}</string>
<string key="NSRuleOptionFrames.1">{{71, 4}, {167, 19}}</string> <string key="NSRuleOptionFrames.1">{{71, 4}, {167, 19}}</string>
<array class="NSMutableArray" key="NSRuleOptionItems"> <array class="NSMutableArray" key="NSRuleOptionItems">
<dictionary class="NSMutableDictionary" id="677427269"> <dictionary class="NSMutableDictionary" id="244855320">
<integer value="1" key="depth"/> <integer value="1" key="depth"/>
<object class="NSPredicateEditorRowTemplate" key="pattern" id="171372468"> <object class="NSPredicateEditorRowTemplate" key="pattern" id="171372468">
<int key="NSPredicateTemplateType">2</int> <int key="NSPredicateTemplateType">2</int>
@@ -1416,7 +1417,7 @@
<bool key="NSPredicateTemplateRightIsWildcard">NO</bool> <bool key="NSPredicateTemplateRightIsWildcard">NO</bool>
</object> </object>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary" id="489242046"> <dictionary class="NSMutableDictionary" id="430874292">
<integer value="2" key="depth"/> <integer value="2" key="depth"/>
<reference key="pattern" ref="171372468"/> <reference key="pattern" ref="171372468"/>
</dictionary> </dictionary>
@@ -1424,23 +1425,23 @@
<int key="NSRuleOptionInitialFrames.count">2</int> <int key="NSRuleOptionInitialFrames.count">2</int>
<string key="NSRuleOptionInitialFrames.0">{{7, 4}, {58, 19}}</string> <string key="NSRuleOptionInitialFrames.0">{{7, 4}, {58, 19}}</string>
<string key="NSRuleOptionInitialFrames.1">{{71, 4}, {167, 19}}</string> <string key="NSRuleOptionInitialFrames.1">{{71, 4}, {167, 19}}</string>
<reference key="NSRuleOptionAddButton" ref="261593316"/> <reference key="NSRuleOptionAddButton" ref="163892837"/>
<reference key="NSRuleOptionSubtractButton" ref="81758585"/> <reference key="NSRuleOptionSubtractButton" ref="870073061"/>
<int key="NSRuleOptionRowType">0</int> <int key="NSRuleOptionRowType">0</int>
<int key="NSRuleOptionPlusButtonRowType">0</int> <int key="NSRuleOptionPlusButtonRowType">0</int>
<bool key="NSRuleOptionEditable">YES</bool> <bool key="NSRuleOptionEditable">YES</bool>
</object> </object>
<object class="NSRuleEditorViewSliceRow" id="838952732"> <object class="NSRuleEditorViewSliceRow" id="460920540">
<reference key="NSNextResponder" ref="211063809"/> <reference key="NSNextResponder" ref="211063809"/>
<int key="NSvFlags">290</int> <int key="NSvFlags">290</int>
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="536084415"> <object class="NSButton" id="562951042">
<reference key="NSNextResponder" ref="838952732"/> <reference key="NSNextResponder" ref="460920540"/>
<int key="NSvFlags">257</int> <int key="NSvFlags">257</int>
<string key="NSFrame">{{581, 4}, {18, 18}}</string> <string key="NSFrame">{{581, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="838952732"/> <reference key="NSSuperview" ref="460920540"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="407607490"/> <reference key="NSNextKeyView" ref="629602464"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell"> <object class="NSRuleEditorButtonCell" key="NSCell">
@@ -1454,9 +1455,9 @@
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/> <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary> </dictionary>
</array> </array>
<reference key="NSControlView" ref="536084415"/> <reference key="NSControlView" ref="562951042"/>
<string key="NSAction">_addOption:</string> <string key="NSAction">_addOption:</string>
<reference key="NSTarget" ref="838952732"/> <reference key="NSTarget" ref="460920540"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="28"/> <reference key="NSAlternateImage" ref="28"/>
@@ -1465,13 +1466,13 @@
<int key="NSPeriodicInterval">75</int> <int key="NSPeriodicInterval">75</int>
</object> </object>
</object> </object>
<object class="NSButton" id="106975478"> <object class="NSButton" id="446117794">
<reference key="NSNextResponder" ref="838952732"/> <reference key="NSNextResponder" ref="460920540"/>
<int key="NSvFlags">257</int> <int key="NSvFlags">257</int>
<string key="NSFrame">{{561, 4}, {18, 18}}</string> <string key="NSFrame">{{561, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="838952732"/> <reference key="NSSuperview" ref="460920540"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="536084415"/> <reference key="NSNextKeyView" ref="562951042"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell"> <object class="NSRuleEditorButtonCell" key="NSCell">
@@ -1485,9 +1486,9 @@
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/> <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary> </dictionary>
</array> </array>
<reference key="NSControlView" ref="106975478"/> <reference key="NSControlView" ref="446117794"/>
<string key="NSAction">_deleteOption:</string> <string key="NSAction">_deleteOption:</string>
<reference key="NSTarget" ref="838952732"/> <reference key="NSTarget" ref="460920540"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="28"/> <reference key="NSAlternateImage" ref="28"/>
@@ -1497,10 +1498,10 @@
</object> </object>
</object> </object>
<object class="NSPopUpButton" id="78209235"> <object class="NSPopUpButton" id="78209235">
<reference key="NSNextResponder" ref="838952732"/> <reference key="NSNextResponder" ref="460920540"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">256</int>
<string key="NSFrame">{{37, 4}, {79, 19}}</string> <string key="NSFrame">{{37, 4}, {79, 19}}</string>
<reference key="NSSuperview" ref="838952732"/> <reference key="NSSuperview" ref="460920540"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="729950799"/> <reference key="NSNextKeyView" ref="729950799"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
@@ -1509,19 +1510,6 @@
<int key="NSCellFlags">67239488</int> <int key="NSCellFlags">67239488</int>
<int key="NSCellFlags2">4196352</int> <int key="NSCellFlags2">4196352</int>
<reference key="NSSupport" ref="26"/> <reference key="NSSupport" ref="26"/>
<object class="NSKeyPathExpression" key="NSRepresentedObject" id="76879785">
<int key="NSExpressionType">3</int>
<string key="NSSelectorName">valueForKey:</string>
<object class="NSSelfExpression" key="NSOperand" id="482739528">
<int key="NSExpressionType">1</int>
</object>
<array class="NSMutableArray" key="NSArguments">
<object class="NSKeyPathSpecifierExpression">
<int key="NSExpressionType">10</int>
<string key="NSKeyPath">string</string>
</object>
</array>
</object>
<reference key="NSControlView" ref="78209235"/> <reference key="NSControlView" ref="78209235"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
@@ -1529,9 +1517,9 @@
<string key="NSKeyEquivalent"/> <string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int> <int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int> <int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="232834514"> <object class="NSMenuItem" key="NSMenuItem" id="186315633">
<reference key="NSMenu" ref="586880274"/> <reference key="NSMenu" ref="586880274"/>
<string key="NSTitle">astring</string> <string key="NSTitle">string</string>
<string key="NSKeyEquiv"/> <string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int> <int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int> <int key="NSMnemonicLoc">2147483647</int>
@@ -1539,15 +1527,14 @@
<reference key="NSOnImage" ref="35465992"/> <reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/> <reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string> <string key="NSAction">_popUpItemAction:</string>
<reference key="NSRepObject" ref="76879785"/>
<reference key="NSTarget" ref="83480964"/> <reference key="NSTarget" ref="83480964"/>
</object> </object>
<bool key="NSMenuItemRespectAlignment">YES</bool> <bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="586880274"> <object class="NSMenu" key="NSMenu" id="586880274">
<string key="NSTitle"/> <string key="NSTitle"/>
<array class="NSMutableArray" key="NSMenuItems"> <array class="NSMutableArray" key="NSMenuItems">
<reference ref="232834514"/> <reference ref="186315633"/>
<object class="NSMenuItem" id="540884058"> <object class="NSMenuItem" id="477727226">
<reference key="NSMenu" ref="586880274"/> <reference key="NSMenu" ref="586880274"/>
<string key="NSTitle">string2</string> <string key="NSTitle">string2</string>
<string key="NSKeyEquiv"/> <string key="NSKeyEquiv"/>
@@ -1556,17 +1543,6 @@
<reference key="NSOnImage" ref="35465992"/> <reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/> <reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string> <string key="NSAction">_popUpItemAction:</string>
<object class="NSKeyPathExpression" key="NSRepObject">
<int key="NSExpressionType">3</int>
<string key="NSSelectorName">valueForKey:</string>
<reference key="NSOperand" ref="482739528"/>
<array class="NSMutableArray" key="NSArguments">
<object class="NSKeyPathSpecifierExpression">
<int key="NSExpressionType">10</int>
<string key="NSKeyPath">string2</string>
</object>
</array>
</object>
<reference key="NSTarget" ref="83480964"/> <reference key="NSTarget" ref="83480964"/>
</object> </object>
</array> </array>
@@ -1579,10 +1555,10 @@
</object> </object>
</object> </object>
<object class="NSPopUpButton" id="729950799"> <object class="NSPopUpButton" id="729950799">
<reference key="NSNextResponder" ref="838952732"/> <reference key="NSNextResponder" ref="460920540"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">256</int>
<string key="NSFrame">{{122, 4}, {99, 19}}</string> <string key="NSFrame">{{122, 4}, {99, 19}}</string>
<reference key="NSSuperview" ref="838952732"/> <reference key="NSSuperview" ref="460920540"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="770001068"/> <reference key="NSNextKeyView" ref="770001068"/>
<int key="NSTag">-1</int> <int key="NSTag">-1</int>
@@ -1591,7 +1567,7 @@
<int key="NSCellFlags">67239488</int> <int key="NSCellFlags">67239488</int>
<int key="NSCellFlags2">4196352</int> <int key="NSCellFlags2">4196352</int>
<reference key="NSSupport" ref="26"/> <reference key="NSSupport" ref="26"/>
<integer value="8" key="NSRepresentedObject"/> <integer value="4" key="NSRepresentedObject"/>
<reference key="NSControlView" ref="729950799"/> <reference key="NSControlView" ref="729950799"/>
<int key="NSButtonFlags">-2038284033</int> <int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int> <int key="NSButtonFlags2">36</int>
@@ -1599,9 +1575,9 @@
<string key="NSKeyEquivalent"/> <string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int> <int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int> <int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="978983751"> <object class="NSMenuItem" key="NSMenuItem" id="46876958">
<reference key="NSMenu" ref="454623134"/> <reference key="NSMenu" ref="454623134"/>
<string key="NSTitle">begins with</string> <string key="NSTitle">is</string>
<string key="NSKeyEquiv"/> <string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int> <int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int> <int key="NSMnemonicLoc">2147483647</int>
@@ -1609,48 +1585,24 @@
<reference key="NSOnImage" ref="35465992"/> <reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/> <reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string> <string key="NSAction">_popUpItemAction:</string>
<integer value="8" key="NSRepObject"/> <integer value="4" key="NSRepObject"/>
<reference key="NSTarget" ref="215986163"/> <reference key="NSTarget" ref="215986163"/>
</object> </object>
<bool key="NSMenuItemRespectAlignment">YES</bool> <bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="454623134"> <object class="NSMenu" key="NSMenu" id="454623134">
<string key="NSTitle"/> <string key="NSTitle"/>
<array class="NSMutableArray" key="NSMenuItems"> <array class="NSMutableArray" key="NSMenuItems">
<reference ref="978983751"/> <reference ref="46876958"/>
<object class="NSMenuItem" id="531788973"> <object class="NSMenuItem" id="637036835">
<reference key="NSMenu" ref="454623134"/> <reference key="NSMenu" ref="454623134"/>
<string key="NSTitle">is not</string> <string key="NSTitle">matches</string>
<string key="NSKeyEquiv"/> <string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int> <int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int> <int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/> <reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/> <reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string> <string key="NSAction">_popUpItemAction:</string>
<integer value="5" key="NSRepObject"/> <integer value="6" key="NSRepObject"/>
<reference key="NSTarget" ref="215986163"/>
</object>
<object class="NSMenuItem" id="756867223">
<reference key="NSMenu" ref="454623134"/>
<string key="NSTitle">ends with</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string>
<integer value="9" key="NSRepObject"/>
<reference key="NSTarget" ref="215986163"/>
</object>
<object class="NSMenuItem" id="254043602">
<reference key="NSMenu" ref="454623134"/>
<string key="NSTitle">contains</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string>
<integer value="99" key="NSRepObject"/>
<reference key="NSTarget" ref="215986163"/> <reference key="NSTarget" ref="215986163"/>
</object> </object>
</array> </array>
@@ -1663,12 +1615,12 @@
</object> </object>
</object> </object>
<object class="NSTextField" id="770001068"> <object class="NSTextField" id="770001068">
<reference key="NSNextResponder" ref="838952732"/> <reference key="NSNextResponder" ref="460920540"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">256</int>
<string key="NSFrame">{{227, 4}, {160, 18}}</string> <string key="NSFrame">{{227, 4}, {160, 18}}</string>
<reference key="NSSuperview" ref="838952732"/> <reference key="NSSuperview" ref="460920540"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="106975478"/> <reference key="NSNextKeyView" ref="446117794"/>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell"> <object class="NSTextFieldCell" key="NSCell">
<int key="NSCellFlags">343014976</int> <int key="NSCellFlags">343014976</int>
@@ -1705,7 +1657,7 @@
<string key="NSRuleOptionFrames.1">{{122, 4}, {99, 19}}</string> <string key="NSRuleOptionFrames.1">{{122, 4}, {99, 19}}</string>
<string key="NSRuleOptionFrames.2">{{227, 4}, {160, 18}}</string> <string key="NSRuleOptionFrames.2">{{227, 4}, {160, 18}}</string>
<array class="NSMutableArray" key="NSRuleOptionItems"> <array class="NSMutableArray" key="NSRuleOptionItems">
<dictionary class="NSMutableDictionary" id="866224734"> <dictionary class="NSMutableDictionary" id="182370408">
<integer value="1" key="depth"/> <integer value="1" key="depth"/>
<object class="NSPredicateEditorRowTemplate" key="pattern" id="626549045"> <object class="NSPredicateEditorRowTemplate" key="pattern" id="626549045">
<int key="NSPredicateTemplateType">1</int> <int key="NSPredicateTemplateType">1</int>
@@ -1722,11 +1674,11 @@
<bool key="NSPredicateTemplateRightIsWildcard">YES</bool> <bool key="NSPredicateTemplateRightIsWildcard">YES</bool>
</object> </object>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary" id="353749474"> <dictionary class="NSMutableDictionary" id="261381641">
<integer value="2" key="depth"/> <integer value="2" key="depth"/>
<reference key="pattern" ref="626549045"/> <reference key="pattern" ref="626549045"/>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary" id="638210389"> <dictionary class="NSMutableDictionary" id="174024543">
<integer value="3" key="depth"/> <integer value="3" key="depth"/>
<reference key="pattern" ref="626549045"/> <reference key="pattern" ref="626549045"/>
</dictionary> </dictionary>
@@ -1735,8 +1687,240 @@
<string key="NSRuleOptionInitialFrames.0">{{37, 4}, {79, 19}}</string> <string key="NSRuleOptionInitialFrames.0">{{37, 4}, {79, 19}}</string>
<string key="NSRuleOptionInitialFrames.1">{{122, 4}, {99, 19}}</string> <string key="NSRuleOptionInitialFrames.1">{{122, 4}, {99, 19}}</string>
<string key="NSRuleOptionInitialFrames.2">{{227, 4}, {160, 18}}</string> <string key="NSRuleOptionInitialFrames.2">{{227, 4}, {160, 18}}</string>
<reference key="NSRuleOptionAddButton" ref="536084415"/> <reference key="NSRuleOptionAddButton" ref="562951042"/>
<reference key="NSRuleOptionSubtractButton" ref="106975478"/> <reference key="NSRuleOptionSubtractButton" ref="446117794"/>
<int key="NSRuleOptionRowType">0</int>
<int key="NSRuleOptionPlusButtonRowType">0</int>
<bool key="NSRuleOptionEditable">YES</bool>
</object>
<object class="NSRuleEditorViewSliceRow" id="629602464">
<reference key="NSNextResponder" ref="211063809"/>
<int key="NSvFlags">290</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="274860396">
<reference key="NSNextResponder" ref="629602464"/>
<int key="NSvFlags">257</int>
<string key="NSFrame">{{581, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="629602464"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="407607490"/>
<int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">+</string>
<reference key="NSSupport" ref="29"/>
<array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
<dictionary class="NSMutableDictionary">
<string key="AXDescription">add</string>
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary>
</array>
<reference key="NSControlView" ref="274860396"/>
<string key="NSAction">_addOption:</string>
<reference key="NSTarget" ref="629602464"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="28"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSButton" id="694388602">
<reference key="NSNextResponder" ref="629602464"/>
<int key="NSvFlags">257</int>
<string key="NSFrame">{{561, 4}, {18, 18}}</string>
<reference key="NSSuperview" ref="629602464"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="274860396"/>
<int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSRuleEditorButtonCell" key="NSCell">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">-</string>
<reference key="NSSupport" ref="29"/>
<array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
<dictionary class="NSMutableDictionary">
<string key="AXDescription">remove</string>
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
</dictionary>
</array>
<reference key="NSControlView" ref="694388602"/>
<string key="NSAction">_deleteOption:</string>
<reference key="NSTarget" ref="629602464"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="28"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
</object>
<object class="NSPopUpButton" id="718999757">
<reference key="NSNextResponder" ref="629602464"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{37, 4}, {79, 19}}</string>
<reference key="NSSuperview" ref="629602464"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="122014713"/>
<int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="24005362">
<int key="NSCellFlags">67239488</int>
<int key="NSCellFlags2">4196352</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="718999757"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="549316260"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="845117556">
<reference key="NSMenu" ref="830052663"/>
<string key="NSTitle">one op</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="24005362"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="830052663">
<string key="NSTitle"/>
<array class="NSMutableArray" key="NSMenuItems">
<reference ref="845117556"/>
</array>
</object>
<int key="NSPreferredEdge">3</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
</object>
<object class="NSPopUpButton" id="122014713">
<reference key="NSNextResponder" ref="629602464"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{122, 4}, {99, 19}}</string>
<reference key="NSSuperview" ref="629602464"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="798358360"/>
<int key="NSTag">-1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="1062860772">
<int key="NSCellFlags">67239488</int>
<int key="NSCellFlags2">4196352</int>
<reference key="NSSupport" ref="26"/>
<integer value="4" key="NSRepresentedObject"/>
<reference key="NSControlView" ref="122014713"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">36</int>
<reference key="NSAlternateImage" ref="549316260"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="112417180">
<reference key="NSMenu" ref="542577028"/>
<string key="NSTitle">is</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">_popUpItemAction:</string>
<integer value="4" key="NSRepObject"/>
<reference key="NSTarget" ref="1062860772"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="542577028">
<string key="NSTitle"/>
<array class="NSMutableArray" key="NSMenuItems">
<reference ref="112417180"/>
</array>
</object>
<int key="NSPreferredEdge">3</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
</object>
<object class="NSTextField" id="798358360">
<reference key="NSNextResponder" ref="629602464"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{227, 4}, {160, 18}}</string>
<reference key="NSSuperview" ref="629602464"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="694388602"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell">
<int key="NSCellFlags">343014976</int>
<int key="NSCellFlags2">4326400</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="798358360"/>
<bool key="NSDrawsBackground">YES</bool>
<reference key="NSBackgroundColor" ref="1001319303"/>
<reference key="NSTextColor" ref="879899608"/>
</object>
</object>
</array>
<string key="NSFrame">{{0, 52}, {609, 26}}</string>
<reference key="NSSuperview" ref="211063809"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="718999757"/>
<int key="NSRuleRowIndex">2</int>
<int key="NSRuleIndentation">1</int>
<reference key="NSContainingRuleEditorView" ref="407607490"/>
<nil key="NSRuleBackgroundColor"/>
<array class="NSMutableArray" key="NSRuleOptionViews">
<reference ref="718999757"/>
<reference ref="122014713"/>
<reference ref="798358360"/>
</array>
<int key="NSRuleOptionFrames.count">3</int>
<string key="NSRuleOptionFrames.0">{{37, 4}, {79, 19}}</string>
<string key="NSRuleOptionFrames.1">{{122, 4}, {99, 19}}</string>
<string key="NSRuleOptionFrames.2">{{227, 4}, {160, 18}}</string>
<array class="NSMutableArray" key="NSRuleOptionItems">
<dictionary class="NSMutableDictionary" id="501663521">
<integer value="1" key="depth"/>
<object class="NSPredicateEditorRowTemplate" key="pattern" id="450238823">
<int key="NSPredicateTemplateType">1</int>
<int key="NSPredicateTemplateOptions">0</int>
<int key="NSPredicateTemplateModifier">0</int>
<int key="NSPredicateTemplateLeftAttributeType">0</int>
<int key="NSPredicateTemplateRightAttributeType">700</int>
<array key="NSPredicateTemplateViews">
<reference ref="718999757"/>
<reference ref="122014713"/>
<reference ref="798358360"/>
</array>
<bool key="NSPredicateTemplateLeftIsWildcard">NO</bool>
<bool key="NSPredicateTemplateRightIsWildcard">YES</bool>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" id="908038237">
<integer value="2" key="depth"/>
<reference key="pattern" ref="450238823"/>
</dictionary>
<dictionary class="NSMutableDictionary" id="247067485">
<integer value="3" key="depth"/>
<reference key="pattern" ref="450238823"/>
</dictionary>
</array>
<int key="NSRuleOptionInitialFrames.count">3</int>
<string key="NSRuleOptionInitialFrames.0">{{37, 4}, {79, 19}}</string>
<string key="NSRuleOptionInitialFrames.1">{{122, 4}, {99, 19}}</string>
<string key="NSRuleOptionInitialFrames.2">{{227, 4}, {160, 18}}</string>
<reference key="NSRuleOptionAddButton" ref="274860396"/>
<reference key="NSRuleOptionSubtractButton" ref="694388602"/>
<int key="NSRuleOptionRowType">0</int> <int key="NSRuleOptionRowType">0</int>
<int key="NSRuleOptionPlusButtonRowType">0</int> <int key="NSRuleOptionPlusButtonRowType">0</int>
<bool key="NSRuleOptionEditable">YES</bool> <bool key="NSRuleOptionEditable">YES</bool>
@@ -1745,7 +1929,7 @@
<string key="NSFrameSize">{609, 162}</string> <string key="NSFrameSize">{609, 162}</string>
<reference key="NSSuperview" ref="407607490"/> <reference key="NSSuperview" ref="407607490"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="939521342"/> <reference key="NSNextKeyView" ref="356804940"/>
</object> </object>
</array> </array>
<set class="NSMutableSet" key="NSDragTypes"> <set class="NSMutableSet" key="NSDragTypes">
@@ -1758,10 +1942,10 @@
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<double key="NSRuleEditorAlignmentGridWidth">75</double> <double key="NSRuleEditorAlignmentGridWidth">75</double>
<double key="NSRuleEditorSliceHeight">26</double> <double key="NSRuleEditorSliceHeight">26</double>
<string key="NSRuleEditorStringsFileName">format</string> <string key="NSRuleEditorStringsFileName"/>
<bool key="NSRuleEditorEditable">YES</bool> <bool key="NSRuleEditorEditable">YES</bool>
<bool key="NSRuleEditorAllowsEmptyCompoundRows">NO</bool> <bool key="NSRuleEditorAllowsEmptyCompoundRows">NO</bool>
<bool key="NSRuleEditorDisallowEmpty">NO</bool> <bool key="NSRuleEditorDisallowEmpty">YES</bool>
<int key="NSRuleEditorNestingMode">3</int> <int key="NSRuleEditorNestingMode">3</int>
<string key="NSRuleEditorRowTypeKeyPath">rowType</string> <string key="NSRuleEditorRowTypeKeyPath">rowType</string>
<string key="NSRuleEditorSubrowsArrayKeyPath">subrows</string> <string key="NSRuleEditorSubrowsArrayKeyPath">subrows</string>
@@ -1775,8 +1959,8 @@
<array class="NSMutableArray" key="NSBoundArray"> <array class="NSMutableArray" key="NSBoundArray">
<dictionary class="NSMutableDictionary"> <dictionary class="NSMutableDictionary">
<array class="NSMutableArray" key="criteria"> <array class="NSMutableArray" key="criteria">
<reference ref="677427269"/> <reference ref="244855320"/>
<reference ref="489242046"/> <reference ref="430874292"/>
</array> </array>
<array class="NSMutableArray" key="displayValues"> <array class="NSMutableArray" key="displayValues">
<reference ref="862982389"/> <reference ref="862982389"/>
@@ -1786,9 +1970,9 @@
<array class="NSMutableArray" key="subrows"> <array class="NSMutableArray" key="subrows">
<dictionary class="NSMutableDictionary"> <dictionary class="NSMutableDictionary">
<array class="NSMutableArray" key="criteria"> <array class="NSMutableArray" key="criteria">
<reference ref="866224734"/> <reference ref="182370408"/>
<reference ref="353749474"/> <reference ref="261381641"/>
<reference ref="638210389"/> <reference ref="174024543"/>
</array> </array>
<array class="NSMutableArray" key="displayValues"> <array class="NSMutableArray" key="displayValues">
<reference ref="78209235"/> <reference ref="78209235"/>
@@ -1798,17 +1982,33 @@
<integer value="0" key="rowType"/> <integer value="0" key="rowType"/>
<array class="NSMutableArray" key="subrows"/> <array class="NSMutableArray" key="subrows"/>
</dictionary> </dictionary>
<dictionary class="NSMutableDictionary">
<array class="NSMutableArray" key="criteria">
<reference ref="501663521"/>
<reference ref="908038237"/>
<reference ref="247067485"/>
</array>
<array class="NSMutableArray" key="displayValues">
<reference ref="718999757"/>
<reference ref="122014713"/>
<reference ref="798358360"/>
</array>
<integer value="0" key="rowType"/>
<array class="NSMutableArray" key="subrows"/>
</dictionary>
</array> </array>
</dictionary> </dictionary>
</array> </array>
</object> </object>
<array class="NSMutableArray" key="NSRuleEditorSlices"> <array class="NSMutableArray" key="NSRuleEditorSlices">
<reference ref="939521342"/> <reference ref="356804940"/>
<reference ref="838952732"/> <reference ref="460920540"/>
<reference ref="629602464"/>
</array> </array>
<array key="NSPredicateTemplates"> <array key="NSPredicateTemplates">
<reference ref="171372468"/> <reference ref="171372468"/>
<reference ref="626549045"/> <reference ref="626549045"/>
<reference ref="450238823"/>
</array> </array>
<nil key="NSPredicateEditorPredicate"/> <nil key="NSPredicateEditorPredicate"/>
</object> </object>
@@ -1862,7 +2062,7 @@
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSView" id="73349307"> <object class="NSView" id="73349307">
<reference key="NSNextResponder" ref="196312022"/> <reference key="NSNextResponder" ref="196312022"/>
<int key="NSvFlags">256</int> <int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews"> <array class="NSMutableArray" key="NSSubviews">
<object class="NSButton" id="872974531"> <object class="NSButton" id="872974531">
<reference key="NSNextResponder" ref="73349307"/> <reference key="NSNextResponder" ref="73349307"/>
@@ -1870,6 +2070,7 @@
<string key="NSFrame">{{9, 11}, {25, 25}}</string> <string key="NSFrame">{{9, 11}, {25, 25}}</string>
<reference key="NSSuperview" ref="73349307"/> <reference key="NSSuperview" ref="73349307"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="738552837"/>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="556816448"> <object class="NSButtonCell" key="NSCell" id="556816448">
<int key="NSCellFlags">-2080244224</int> <int key="NSCellFlags">-2080244224</int>
@@ -4145,6 +4346,7 @@
<array class="NSMutableArray" key="children"> <array class="NSMutableArray" key="children">
<reference ref="171372468"/> <reference ref="171372468"/>
<reference ref="626549045"/> <reference ref="626549045"/>
<reference ref="450238823"/>
</array> </array>
<reference key="parent" ref="869316024"/> <reference key="parent" ref="869316024"/>
</object> </object>
@@ -4166,8 +4368,8 @@
<int key="objectID">1057</int> <int key="objectID">1057</int>
<reference key="object" ref="586880274"/> <reference key="object" ref="586880274"/>
<array class="NSMutableArray" key="children"> <array class="NSMutableArray" key="children">
<reference ref="232834514"/> <reference ref="186315633"/>
<reference ref="540884058"/> <reference ref="477727226"/>
</array> </array>
<reference key="parent" ref="626549045"/> <reference key="parent" ref="626549045"/>
</object> </object>
@@ -4175,43 +4377,11 @@
<int key="objectID">1058</int> <int key="objectID">1058</int>
<reference key="object" ref="454623134"/> <reference key="object" ref="454623134"/>
<array class="NSMutableArray" key="children"> <array class="NSMutableArray" key="children">
<reference ref="978983751"/> <reference ref="46876958"/>
<reference ref="531788973"/> <reference ref="637036835"/>
<reference ref="756867223"/>
<reference ref="254043602"/>
</array> </array>
<reference key="parent" ref="626549045"/> <reference key="parent" ref="626549045"/>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">1060</int>
<reference key="object" ref="978983751"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1063</int>
<reference key="object" ref="531788973"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1071</int>
<reference key="object" ref="232834514"/>
<reference key="parent" ref="586880274"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1072</int>
<reference key="object" ref="540884058"/>
<reference key="parent" ref="586880274"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1073</int>
<reference key="object" ref="756867223"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1074</int>
<reference key="object" ref="254043602"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord"> <object class="IBObjectRecord">
<int key="objectID">1309</int> <int key="objectID">1309</int>
<reference key="object" ref="196312022"/> <reference key="object" ref="196312022"/>
@@ -4512,6 +4682,61 @@
<reference key="object" ref="216021672"/> <reference key="object" ref="216021672"/>
<reference key="parent" ref="738552837"/> <reference key="parent" ref="738552837"/>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">1346</int>
<reference key="object" ref="46876958"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1347</int>
<reference key="object" ref="637036835"/>
<reference key="parent" ref="454623134"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1348</int>
<reference key="object" ref="186315633"/>
<reference key="parent" ref="586880274"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1349</int>
<reference key="object" ref="477727226"/>
<reference key="parent" ref="586880274"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1350</int>
<reference key="object" ref="450238823"/>
<array class="NSMutableArray" key="children">
<reference ref="830052663"/>
<reference ref="542577028"/>
</array>
<reference key="parent" ref="407607490"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1351</int>
<reference key="object" ref="830052663"/>
<array class="NSMutableArray" key="children">
<reference ref="845117556"/>
</array>
<reference key="parent" ref="450238823"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1355</int>
<reference key="object" ref="542577028"/>
<array class="NSMutableArray" key="children">
<reference ref="112417180"/>
</array>
<reference key="parent" ref="450238823"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1359</int>
<reference key="object" ref="112417180"/>
<reference key="parent" ref="542577028"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1366</int>
<reference key="object" ref="845117556"/>
<reference key="parent" ref="830052663"/>
</object>
</array> </array>
</object> </object>
<dictionary class="NSMutableDictionary" key="flattenedProperties"> <dictionary class="NSMutableDictionary" key="flattenedProperties">
@@ -4529,12 +4754,6 @@
<string key="106.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="106.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1" key="106.ImportedFromIB2"/> <integer value="1" key="106.ImportedFromIB2"/>
<string key="106.editorWindowContentRectSynchronizationRect">{{596, 852}, {216, 23}}</string> <string key="106.editorWindowContentRectSynchronizationRect">{{596, 852}, {216, 23}}</string>
<string key="1060.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1063.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1071.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1072.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1073.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1074.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="111.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="111.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1" key="111.ImportedFromIB2"/> <integer value="1" key="111.ImportedFromIB2"/>
<string key="112.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="112.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -4799,7 +5018,7 @@
<nil key="activeLocalization"/> <nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/> <dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">1345</int> <int key="maxID">1366</int>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"> <object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions"> <array class="NSMutableArray" key="referencedPartialClassDescriptions">