Anonymous avatar Anonymous committed 8528de4

[NEW] TaskTracker2 1.3. Text reports are now sorted by the task's first period starting time. Nocharge items now include their time in the description.

Comments (0)

Files changed (7)

 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.2.2</string>
+	<string>1.3</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>1.2.2</string>
+	<string>1.3</string>
 	<key>NSMainNibFile</key>
 	<string>MainMenu</string>
 	<key>NSPrincipalClass</key>
 	[output appendFormat:@"Time        Description\n"];
 	[output appendFormat:@"----------  -----------\n"];
 	NSTimeInterval totalBilledTime = 0;
-	nsenumerate( [TaskMO fetchAllInManagedObjectContext:[self managedObjectContext]], TaskMO, task ) {
+	NSArray *tasks = [TaskMO fetchAllInManagedObjectContext:[self managedObjectContext]];
+	tasks = [tasks sortedArrayUsingDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"firstStartPeriod" ascending:YES] autorelease]]];
+	nsenumerate(tasks, TaskMO, task ) {
 		NSString *taskDescription = [task valueForKey:@"taskDescription"];
 		NSTimeInterval billedTime = [task calcInterval];
 		if( [taskDescription hasSuffix:@"*"] ) {
 			taskDescription = [taskDescription substringToIndex:[taskDescription length]-1];
+			taskDescription = [taskDescription stringByAppendingFormat:@" (%@)", [IntervalFormatter format:billedTime]];
 			billedTime = 0.0;
 		}
 		totalBilledTime += billedTime;
 - (IBAction)stopAction:(id)sender;
 
 - (NSTimeInterval)calcInterval;
+- (NSDate*)firstStartPeriod;
 
 @end
 	return result;
 }
 
+- (NSDate*)firstStartPeriod {
+	NSArray *a = [[[self valueForKey:@"periods"] allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"start" ascending:YES] autorelease]]];
+	return [a count] ? [[a objectAtIndex:0] valueForKey:@"start"] : nil;
+}
+
 @end

TaskTracker2.xcodeproj/project.pbxproj

 		79E11D59098D414E000E8E93 /* IntervalFormatter.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = IntervalFormatter.m; sourceTree = "<group>"; };
 		79E11D82098D440D000E8E93 /* nsenumerate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = nsenumerate.h; sourceTree = "<group>"; };
 		8D15AC360486D014006FF6A4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
-		8D15AC370486D014006FF6A4 /* TaskTracker2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TaskTracker2.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		8D15AC370486D014006FF6A4 /* TaskTracker2.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = TaskTracker2.app; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */

TaskTracker2.xcodeproj/wolf.mode1

 							<real>218</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>89 76 932 802 0 0 1440 878 </string>
+						<string>371 196 932 802 0 0 1680 1028 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
 								<key>Frame</key>
 								<string>{{0, 0}, {692, 0}}</string>
 								<key>RubberWindowFrame</key>
-								<string>89 76 932 802 0 0 1440 878 </string>
+								<string>371 196 932 802 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 								<key>Frame</key>
 								<string>{{0, 5}, {692, 756}}</string>
 								<key>RubberWindowFrame</key>
-								<string>89 76 932 802 0 0 1440 878 </string>
+								<string>371 196 932 802 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>79812BF40B04E73300DF4429</string>
+				<string>7968131F0B1E241200F92A95</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>79812BF50B04E73300DF4429</string>
+				<string>796813200B1E241200F92A95</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>79812C040B04E76D00DF4429</string>
-		<string>1C0AD2B3069F1EA900FABCE6</string>
-		<string>79262739098C8C0B00C029FE</string>
-		<string>/Volumes/Island/wolf/code/sf/redshed/cocoa/TaskTracker2/TaskTracker2.xcodeproj</string>
+		<string>1CD10A99069EF8BA00B06720</string>
+		<string>7968131C0B1E241000F92A95</string>
+		<string>/Users/wolf/code/sf/redshed/cocoa/TaskTracker2/TaskTracker2.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>89 76 932 802 0 0 1440 878 </string>
+	<string>371 196 932 802 0 0 1680 1028 </string>
 	<key>WindowTools</key>
 	<array>
 		<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>1CD0528F0623707200166675</string>
 								<key>PBXProjectModuleLabel</key>
-								<string></string>
+								<string>&lt;No Editor&gt;</string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
 								<key>Frame</key>
 								<string>{{0, 0}, {1037, 330}}</string>
 								<key>RubberWindowFrame</key>
-								<string>261 224 1037 612 0 0 1440 878 </string>
+								<string>416 347 1037 612 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<string>330pt</string>
 						</dict>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<key>Frame</key>
 								<string>{{0, 335}, {1037, 236}}</string>
 								<key>RubberWindowFrame</key>
-								<string>261 224 1037 612 0 0 1440 878 </string>
+								<string>416 347 1037 612 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXBuildResultsModule</string>
 			<key>TableOfContents</key>
 			<array>
 				<string>79262739098C8C0B00C029FE</string>
-				<string>79812BF60B04E73300DF4429</string>
+				<string>796812B50B1E20EF00F92A95</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.build</string>
 			<key>WindowString</key>
-			<string>261 224 1037 612 0 0 1440 878 </string>
+			<string>416 347 1037 612 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>79262739098C8C0B00C029FE</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<true/>
 		</dict>
 		<dict>
 			<key>FirstTimeWindowDisplayed</key>
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {575, 302}}</string>
-											<string>{{575, 0}, {397, 302}}</string>
+											<string>{{0, 0}, {571, 310}}</string>
+											<string>{{571, 0}, {401, 310}}</string>
 										</array>
 									</dict>
 									<key>VerticalSplitView</key>
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {972, 302}}</string>
-											<string>{{0, 302}, {972, 291}}</string>
+											<string>{{0, 0}, {972, 310}}</string>
+											<string>{{0, 310}, {972, 283}}</string>
 										</array>
 									</dict>
 								</dict>
 								<key>Frame</key>
 								<string>{{0, 0}, {972, 593}}</string>
 								<key>RubberWindowFrame</key>
-								<string>598 271 972 634 0 0 2560 1578 </string>
+								<string>267 127 972 634 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugSessionModule</string>
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>79476D3B0B02DEBC0008B0B7</string>
+				<string>796813160B1E241000F92A95</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>79476D3C0B02DEBC0008B0B7</string>
-				<string>79476D3D0B02DEBC0008B0B7</string>
-				<string>79476D3E0B02DEBC0008B0B7</string>
-				<string>79476D3F0B02DEBC0008B0B7</string>
-				<string>79476D400B02DEBC0008B0B7</string>
-				<string>79476D410B02DEBC0008B0B7</string>
+				<string>796813170B1E241000F92A95</string>
+				<string>796813180B1E241000F92A95</string>
+				<string>796813190B1E241000F92A95</string>
+				<string>7968131A0B1E241000F92A95</string>
+				<string>7968131B0B1E241000F92A95</string>
+				<string>7968131C0B1E241000F92A95</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debug</string>
 			<key>WindowString</key>
-			<string>598 271 972 634 0 0 2560 1578 </string>
+			<string>267 127 972 634 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>1CD10A99069EF8BA00B06720</string>
 			<key>WindowToolIsVisible</key>
 					<key>Dock</key>
 					<array>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<key>Frame</key>
 								<string>{{0, 0}, {440, 358}}</string>
 								<key>RubberWindowFrame</key>
-								<string>1583 332 440 400 0 0 2560 1578 </string>
+								<string>926 177 440 400 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugCLIModule</string>
 			<key>TableOfContents</key>
 			<array>
 				<string>7926277C098C8CA000C029FE</string>
-				<string>79476D8D0B02EBB70008B0B7</string>
+				<string>796812D10B1E213500F92A95</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>WindowString</key>
-			<string>1583 332 440 400 0 0 2560 1578 </string>
+			<string>926 177 440 400 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>7926277C098C8CA000C029FE</string>
 			<key>WindowToolIsVisible</key>
 								<key>Frame</key>
 								<string>{{0, 0}, {1183, 524}}</string>
 								<key>RubberWindowFrame</key>
-								<string>115 278 1183 565 0 0 1440 878 </string>
+								<string>222 408 1183 565 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXRunSessionModule</string>
 			<key>TableOfContents</key>
 			<array>
 				<string>1C0AD2B3069F1EA900FABCE6</string>
-				<string>79812BF70B04E73300DF4429</string>
+				<string>796812B60B1E20EF00F92A95</string>
 				<string>1CD0528B0623707200166675</string>
-				<string>79812BF80B04E73300DF4429</string>
+				<string>796812B70B1E20EF00F92A95</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.run</string>
 			<key>WindowString</key>
-			<string>115 278 1183 565 0 0 1440 878 </string>
+			<string>222 408 1183 565 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>1C0AD2B3069F1EA900FABCE6</string>
 			<key>WindowToolIsVisible</key>
 									<real>168</real>
 								</array>
 								<key>RubberWindowFrame</key>
-								<string>329 286 744 409 0 0 1440 878 </string>
+								<string>442 370 744 409 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXSmartGroupTreeModule</string>
 								<key>Frame</key>
 								<string>{{190, 0}, {554, 368}}</string>
 								<key>RubberWindowFrame</key>
-								<string>329 286 744 409 0 0 1440 878 </string>
+								<string>442 370 744 409 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 			<true/>
 			<key>TableOfContents</key>
 			<array>
-				<string>79812C040B04E76D00DF4429</string>
-				<string>79812C050B04E76D00DF4429</string>
+				<string>796812D20B1E213500F92A95</string>
+				<string>796812D30B1E213500F92A95</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
 				<string>1CA1AED706398EBD00589147</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.breakpoints</string>
 			<key>WindowString</key>
-			<string>329 286 744 409 0 0 1440 878 </string>
+			<string>442 370 744 409 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
-			<string>79812C040B04E76D00DF4429</string>
+			<string>796812D20B1E213500F92A95</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<true/>
 		</dict>
 		<dict>
 			<key>Identifier</key>

TaskTracker2.xcodeproj/wolf.pbxuser

 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 184870673;
-			PBXWorkspaceStateSaveDate = 184870673;
+			PBXPerProjectTemplateStateSaveDate = 186524684;
+			PBXWorkspaceStateSaveDate = 186524684;
 		};
 		sourceControlManager = 793B669A08227F4B00D8D69E /* Source Control */;
 		userBuildSettings = {
 	};
 	2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1053, 1624}}";
-			sepNavSelRange = "{1036, 48}";
-			sepNavVisRect = "{{0, 0}, {1053, 726}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1053, 1652}}";
+			sepNavSelRange = "{3049, 0}";
+			sepNavVisRect = "{{0, 904}, {1053, 726}}";
 			sepNavWindowFrame = "{{204, 83}, {1092, 784}}";
 		};
 	};
 					chosenTableWidths = (
 						103.000000,
 						22.000000,
-						121.080078,
+						63.080078,
 					);
 				};
 				UIContextForLayoutManager = {
 						_percentageOfCollapsedView = 0;
 						isCollapsed = yes;
 						sizes = (
-							"{{0, 0}, {670, 220}}",
-							"{{675, 0}, {360, 220}}",
+							"{{0, 0}, {530, 220}}",
+							"{{535, 0}, {286, 220}}",
 						);
 					};
 					diagramSplitGeometry = {
 						_percentageOfCollapsedView = 0;
 						isCollapsed = yes;
 						sizes = (
-							"{{0, 0}, {1035, 220}}",
-							"{{0, 225}, {1035, 88}}",
+							"{{0, 0}, {821, 220}}",
+							"{{0, 225}, {821, 474}}",
 						);
 					};
 					tableSplitGeometry = {
 						_percentageOfCollapsedView = 0;
 						isCollapsed = yes;
 						sizes = (
-							"{{0, 0}, {271, 220}}",
-							"{{276, 0}, {393, 220}}",
+							"{{0, 0}, {213, 220}}",
+							"{{218, 0}, {311, 220}}",
 						);
 					};
 				};
 					);
 				};
 				"xdesign model browser state key - shown/hidden" = 1;
-				"xdesign model diagram view visible rect key" = "{{-186, 0}, {1020, 73}}";
+				"xdesign model diagram view visible rect key" = "{{-79, -14}, {806, 459}}";
 			};
 			sepNavWindowFrame = "{{518, 98}, {821, 757}}";
 		};
 		delayBeforeContinue = 0;
 		hitCount = 1;
 		location = Foundation;
-		modificationTime = 184740913.489344;
+		modificationTime = 186523968.644192;
 		state = 1;
 		symbolName = "-[NSException raise]";
 	};
 	793B66C30822818900D8D69E /* TaskMO.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {782, 699}}";
-			sepNavSelRange = "{204, 0}";
+			sepNavSelRange = "{205, 28}";
 			sepNavVisRect = "{{0, 0}, {782, 699}}";
 			sepNavWindowFrame = "{{588, 111}, {821, 757}}";
 		};
 	};
 	793B66C40822818900D8D69E /* TaskMO.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {782, 924}}";
-			sepNavSelRange = "{1302, 0}";
-			sepNavVisRect = "{{0, 1}, {782, 699}}";
-			sepNavWindowFrame = "{{1391, 617}, {821, 757}}";
+			sepNavIntBoundsRect = "{{0, 0}, {782, 1008}}";
+			sepNavSelRange = "{2035, 0}";
+			sepNavVisRect = "{{0, 302}, {782, 699}}";
+			sepNavWindowFrame = "{{731, 175}, {821, 757}}";
 		};
 	};
 	793B66CA0822819700D8D69E /* TaskPeriodMO.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {782, 684}}";
-			sepNavSelRange = "{171, 0}";
-			sepNavVisRect = "{{0, 0}, {782, 684}}";
-			sepNavWindowFrame = "{{1543, 727}, {821, 757}}";
+			sepNavIntBoundsRect = "{{0, 0}, {782, 699}}";
+			sepNavSelRange = "{144, 0}";
+			sepNavVisRect = "{{0, 0}, {782, 699}}";
+			sepNavWindowFrame = "{{690, 139}, {821, 757}}";
 		};
 	};
 	793B66CB0822819700D8D69E /* TaskPeriodMO.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {782, 684}}";
+			sepNavIntBoundsRect = "{{0, 0}, {782, 699}}";
 			sepNavSelRange = "{424, 0}";
-			sepNavVisRect = "{{0, 0}, {782, 684}}";
-			sepNavWindowFrame = "{{1590, 667}, {821, 757}}";
+			sepNavVisRect = "{{0, 0}, {782, 699}}";
+			sepNavWindowFrame = "{{745, 87}, {821, 757}}";
+		};
+	};
+	79A384340B02579A00386B39 /* CoreData+JRExtensions.h */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {979, 857}}";
+			sepNavSelRange = "{1364, 0}";
+			sepNavVisRect = "{{0, 0}, {979, 857}}";
+			sepNavWindowFrame = "{{84, 45}, {1018, 915}}";
 		};
 	};
 	79A384350B02579A00386B39 /* CoreData+JRExtensions.m */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {890, 2548}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRect = "{{0, 0}, {890, 650}}";
+			sepNavSelRange = "{6784, 0}";
+			sepNavVisRect = "{{0, 1898}, {890, 650}}";
 			sepNavWindowFrame = "{{38, 170}, {929, 708}}";
 		};
 	};
 	8D15AC360486D014006FF6A4 /* Info.plist */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {938, 812}}";
-			sepNavSelRange = "{0, 0}";
+			sepNavSelRange = "{1374, 0}";
 			sepNavVisRect = "{{0, 35}, {938, 777}}";
 			sepNavWindowFrame = "{{130, 43}, {977, 835}}";
 		};
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.