-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathTMetaTask.m
117 lines (99 loc) · 2.37 KB
/
TMetaTask.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
116
117
//
// TMetaTask.m
// Time Tracker
//
// Created by Rainer Burgstaller on 26.11.07.
// Copyright 2007 __MyCompanyName__. All rights reserved.
//
#import "TMetaTask.h"
#import "TTask.h"
@implementation TMetaTask
- (NSString *) name {
return @"All Tasks";
}
- (NSMutableArray *) workPeriods {
NSEnumerator *enumTasks = [_tasks objectEnumerator];
TTask *task = nil;
NSMutableArray *result = [[[NSMutableArray alloc] init] autorelease];
while ((task = [enumTasks nextObject]) != nil) {
[result addObjectsFromArray:[task workPeriods]];
}
return result;
}
- (NSMutableArray *) matchingWorkPeriods:(NSPredicate*) filter
{
NSMutableArray* result = [[[NSMutableArray alloc] init] autorelease];
NSEnumerator *enumerator = [[self workPeriods] objectEnumerator];
id anObject;
while (anObject = [enumerator nextObject])
{
if ([filter evaluateWithObject:anObject]) {
[result addObject:anObject];
}
}
return result;
}
- (int) totalTime {
NSEnumerator *enumTasks = [_tasks objectEnumerator];
TTask *task = nil;
int result = 0;
while ((task = [enumTasks nextObject]) != nil) {
result += [task totalTime];
}
return result;
}
- (void) updateTotalTime {
NSEnumerator *enumTasks = [_tasks objectEnumerator];
TTask *task = nil;
while ((task = [enumTasks nextObject]) != nil) {
[task updateTotalTime];
}
}
- (void) setTasks:(NSArray*)tasks {
[_tasks release];
_tasks = [tasks retain];
}
- (TTask*) taskForWorkPeriod:(TWorkPeriod*)aPeriod returnIndex:(int*)wpIndex {
NSEnumerator *enumerator = [_tasks objectEnumerator];
id aTask;
*wpIndex = -1;
while (aTask = [enumerator nextObject])
{
unsigned result = [[aTask workPeriods] indexOfObject:aPeriod];
if (result != NSNotFound) {
*wpIndex = result;
return aTask;
}
}
*wpIndex = -1;
return nil;
}
- (id<ITask>) removeWorkPeriod:(TWorkPeriod*)period {
int index = -1;
TTask *task = [self taskForWorkPeriod:period returnIndex:&index];
[[task workPeriods] removeObject:period];
return self;
}
- (int) filteredTime:(NSPredicate*) filter
{
if (filter == nil) {
return [self totalTime];
}
NSEnumerator *enumPeriods = [[self matchingWorkPeriods:filter] objectEnumerator];
id anObject;
int result = 0;
while (anObject = [enumPeriods nextObject])
{
result += [anObject totalTime];
}
return result;
}
-(int) taskId
{
return -1;
}
-(NSEnumerator*) objectEnumerator
{
return [_tasks objectEnumerator];
}
@end