-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathTMetaProject.m
115 lines (96 loc) · 2.39 KB
/
TMetaProject.m
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
//
// TMetaProject.m
// Time Tracker
//
// Created by Rainer Burgstaller on 25.11.07.
// Copyright 2007 __MyCompanyName__. All rights reserved.
//
#import "TMetaProject.h"
@implementation TMetaProject
- (int) totalTime
{
int result = 0;
NSEnumerator *enumProjects = [_projects objectEnumerator];
TProject *project = nil;
while ((project = [enumProjects nextObject]) != nil) {
result += [project totalTime];
}
return result;
}
- (void) updateTotalTime
{
NSEnumerator *enumProjects = [_projects objectEnumerator];
TProject *project = nil;
while ((project = [enumProjects nextObject]) != nil) {
[project updateTotalTime];
}
}
- (NSArray *) tasks
{
NSEnumerator *enumProjects = [_projects objectEnumerator];
TProject *project = nil;
NSMutableArray *result = [[[NSMutableArray alloc] init] autorelease];
while ((project = [enumProjects nextObject]) != nil) {
[result addObjectsFromArray:[project tasks]];
}
return result;
}
- (NSString*) name
{
return @"All Projects";
}
- (void) setProjects:(NSMutableArray*) projects
{
if (_projects != nil) {
[_projects release];
}
_projects = [projects retain];
}
- (TProject*) projectForTask:(TTask*)task returnIndex:(int*)taskIndex {
NSEnumerator *enumerator = [_projects objectEnumerator];
id aProject;
*taskIndex = -1;
while (aProject = [enumerator nextObject])
{
unsigned result = [[aProject tasks] indexOfObject:task];
if (result != NSNotFound) {
*taskIndex = result;
return aProject;
}
}
*taskIndex = -1;
return nil;
}
- (id<IProject>) removeTask:(TTask*)task {
int index = -1;
TProject *project = [self projectForTask:task returnIndex:&index];
[[project tasks] removeObject:task];
return self;
}
- (int) filteredTime:(NSPredicate*) filter
{
if (filter == nil) {
return [self totalTime];
}
int result = 0;
NSEnumerator *enumProjects = [_projects objectEnumerator];
id project;
while ((project = [enumProjects nextObject]) != nil) {
result += [project filteredTime:filter];
}
return result;
}
- (NSMutableArray *) matchingTasks:(NSPredicate*) filter // : (bool) includeEmptyTasks
{
if (filter == nil) {
return [self tasks];
}
NSEnumerator *enumProjects = [_projects objectEnumerator];
NSMutableArray *result = [[[NSMutableArray alloc] init] autorelease];
id project;
while ((project = [enumProjects nextObject]) != nil) {
[result addObjectsFromArray: [project matchingTasks:filter]];
}
return result;
}
@end