1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// ModuleArrayController.m
// CLIPS
//
// Created by Gary Riley on 3/21/07.
//
#import "ModuleArrayController.h"
#import "CLIPSFactInstance.h"
#import <CLIPS/clips.h>
@implementation ModuleArrayController
/*******************/
/* arrangeObjects: */
/*******************/
- (NSArray *) arrangeObjects: (NSArray *) objects
{
NSArray *returnObjects = objects;
/*===================================================*/
/* Create an array for storing the filtered objects. */
/*===================================================*/
NSMutableArray *filteredObjects;
filteredObjects = [NSMutableArray arrayWithCapacity: [objects count]];
/*=============================================*/
/* If we don't have a valid module index, just */
/* use the superclass to arrange the objects. */
/*=============================================*/
if (moduleIndex < 0)
{
returnObjects = filteredObjects;
return ([super arrangeObjects: returnObjects]);
}
/*===============================================*/
/* Step through the objects using an enumerator. */
/*===============================================*/
NSEnumerator *enumerator = [objects objectEnumerator];
id item;
while (item = [enumerator nextObject])
{
CLIPSFactInstance *theFI;
void *theMap;
theFI = (CLIPSFactInstance *) item;
theMap = [theFI scopeMap];
/*==================================================*/
/* The fact must be visible to the selected module. */
/*==================================================*/
if (! TestBitMap(((char *) theMap),moduleIndex))
{ continue; }
if ((searchString != nil) &&
(! [theFI searchForString: searchString]))
{ continue; }
[filteredObjects addObject: item];
}
returnObjects = filteredObjects;
/*==============================================*/
/* Have the superclass also arrange the objects */
/* object to pick up NSTableView sorting. */
/*==============================================*/
return ([super arrangeObjects: returnObjects]);
}
/*%%%%%%%%%%%%%%%%*/
/* Action Methods */
/*%%%%%%%%%%%%%%%%*/
/****************/
/* search: */
/****************/
- (IBAction) search: (id) sender
{
[self setSearchString: [sender stringValue]];
[self rearrangeObjects];
}
/*%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/* Key-Value Coding Methods */
/*%%%%%%%%%%%%%%%%%%%%%%%%%%*/
- (void) setSearchString: (NSString *) string
{
if ([string length] == 0)
{ searchString = nil; }
else
{ searchString = [string copy]; }
}
/****************/
/* moduleIndex: */
/****************/
- (NSInteger) moduleIndex
{
return moduleIndex;
}
/*******************/
/* setModuleIndex: */
/*******************/
- (void) setModuleIndex: (NSInteger) theModule
{
moduleIndex = theModule;
[self rearrangeObjects];
}
@end