diff --git a/cocoa/AppController.h b/cocoa/AppController.h new file mode 100644 index 0000000..8cb63b3 --- /dev/null +++ b/cocoa/AppController.h @@ -0,0 +1,25 @@ +// +// AppController.h +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import +#include "NCCurrentCost.h" +#include "CurrentCostView.h" + +@interface AppController : NSObject { + IBOutlet CurrentCostView *ccView; + IBOutlet NSButton *captureButton; +@private + NCCurrentCost *ccm; + BOOL continueLoop; +} + +@property (nonatomic, retain) NCCurrentCost *ccm; + +- (IBAction)startDataCapture:(id)sender; + +@end diff --git a/cocoa/AppController.m b/cocoa/AppController.m new file mode 100644 index 0000000..12937db --- /dev/null +++ b/cocoa/AppController.m @@ -0,0 +1,57 @@ +// +// AppController.m +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import "AppController.h" +#include "NSString+Trim.h" + +@interface AppController () + +- (void)readData:(id)anObject; + +@end + +@implementation AppController + +@synthesize ccm; + +- (id)init +{ + if (self = [super init]) { + ccm = [[NCCurrentCost alloc] init:@"/dev/cu.usbserial-0000101D" withBaudRate:2400]; + continueLoop = YES; + [ccm setDelegate:self]; + } + + return self; +} + +- (IBAction)startDataCapture:(id)sender +{ + continueLoop = YES; + [ccm open]; + [NSThread detachNewThreadSelector:@selector(readData:) toTarget:self withObject:nil]; +} + +- (void)dataWasReceived:(NSXMLDocument *)xml +{ + NSString *tmp = [NSString stringWithFormat:@"Energy Now: %@ Watts", [NSString stringByTrimmingLeadingZeros:[[[xml nodesForXPath:@"/msg/ch1/watts" error:nil] objectAtIndex:0] stringValue]]]; + [ccView setWatts:tmp]; +} + +- (void)readData:(id)anObject +{ + NSAutoreleasePool *thisPool = [[NSAutoreleasePool alloc] init]; + + while (continueLoop) { + [ccm read]; + } + + [thisPool release]; +} + +@end diff --git a/cocoa/Current Cost.xcodeproj/TemplateIcon.icns b/cocoa/Current Cost.xcodeproj/TemplateIcon.icns new file mode 100644 index 0000000..62cb701 Binary files /dev/null and b/cocoa/Current Cost.xcodeproj/TemplateIcon.icns differ diff --git a/cocoa/Current Cost.xcodeproj/neil.pbxuser b/cocoa/Current Cost.xcodeproj/neil.pbxuser new file mode 100644 index 0000000..9019334 --- /dev/null +++ b/cocoa/Current Cost.xcodeproj/neil.pbxuser @@ -0,0 +1,1019 @@ +// !$*UTF8*$! +{ + 089C165DFE840E0CC02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {832, 782}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 45}"; + sepNavWindowFrame = "{{15, 319}, {891, 854}}"; + }; + }; + 285C3E670EE992E1007971BE /* Current Cost */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 0; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = "Current Cost"; + savedGlobals = { + }; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + 285C3E800EE992F0007971BE /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryName = CurrentCost; + }; + }; + 285C3E810EE992F0007971BE /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 285C3E840EE99338007971BE /* NCCurrentCost.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 961}}"; + sepNavSelRange = "{946, 0}"; + sepNavVisRange = "{0, 952}"; + }; + }; + 285C3E850EE99338007971BE /* NCCurrentCost.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 2226}}"; + sepNavSelRange = "{158, 0}"; + sepNavVisRange = "{0, 1261}"; + }; + }; + 285C3E880EE9935F007971BE /* AppController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 961}}"; + sepNavSelRange = "{109, 0}"; + sepNavVisRange = "{0, 500}"; + sepNavWindowFrame = "{{38, 298}, {891, 854}}"; + }; + }; + 285C3E890EE9935F007971BE /* AppController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1363, 812}}"; + sepNavSelRange = "{457, 26}"; + sepNavVisRange = "{0, 1103}"; + sepNavWindowFrame = "{{15, 319}, {891, 854}}"; + }; + }; + 285C3E970EE994C2007971BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 26"; + rLen = 0; + rLoc = 933; + rType = 0; + vrLen = 284; + vrLoc = 0; + }; + 285C403B0EE9B42A007971BE /* NSString+Trim.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 645}}"; + sepNavSelRange = "{109, 0}"; + sepNavVisRange = "{0, 311}"; + }; + }; + 285C403C0EE9B42A007971BE /* NSString+Trim.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 961}}"; + sepNavSelRange = "{109, 0}"; + sepNavVisRange = "{0, 843}"; + }; + }; + 285C404A0EE9B759007971BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 15"; + rLen = 0; + rLoc = 298; + rType = 0; + vrLen = 245; + vrLoc = 0; + }; + 285C40680EE9BD79007971BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40690EE9BD79007971BE /* NSRange.h */; + name = "NSRange.h: 13"; + rLen = 11; + rLoc = 236; + rType = 0; + vrLen = 441; + vrLoc = 74; + }; + 285C40690EE9BD79007971BE /* NSRange.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSRange.h; + path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSRange.h; + sourceTree = ""; + }; + 285C40700EE9BD79007971BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40710EE9BD79007971BE /* NSRange.h */; + name = "NSRange.h: 13"; + rLen = 11; + rLoc = 236; + rType = 0; + vrLen = 441; + vrLoc = 74; + }; + 285C40710EE9BD79007971BE /* NSRange.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSRange.h; + path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSRange.h; + sourceTree = ""; + }; + 285C40970EE9C0C5007971BE /* CurrentCostView.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 961}}"; + sepNavSelRange = "{111, 0}"; + sepNavVisRange = "{0, 430}"; + }; + }; + 285C40980EE9C0C5007971BE /* CurrentCostView.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 1568}}"; + sepNavSelRange = "{111, 0}"; + sepNavVisRange = "{0, 1154}"; + sepNavWindowFrame = "{{61, 277}, {891, 854}}"; + }; + }; + 285C414E0EE9CD38007971BE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 109"; + rLen = 0; + rLoc = 1866; + rType = 0; + vrLen = 611; + vrLoc = 529; + }; + 28D9A3E60EEECEB500C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 132"; + rLen = 0; + rLoc = 2588; + rType = 0; + vrLen = 1472; + vrLoc = 1429; + }; + 28D9A3F10EEECEF900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 95"; + rLen = 0; + rLoc = 1504; + rType = 0; + vrLen = 761; + vrLoc = 645; + }; + 28D9A41C0EEED1C800C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 81"; + rLen = 0; + rLoc = 1280; + rType = 0; + vrLen = 1466; + vrLoc = 645; + }; + 28D9A41D0EEED1C800C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 135"; + rLen = 0; + rLoc = 2623; + rType = 0; + vrLen = 1392; + vrLoc = 1431; + }; + 28D9A41E0EEED1C800C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 25"; + rLen = 0; + rLoc = 450; + rType = 0; + vrLen = 915; + vrLoc = 0; + }; + 28D9A42C0EEED27C00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: 'NCCurrentCost' may not respond to '-setDelegate:'"; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + rLen = 1; + rLoc = 26; + rType = 1; + }; + 28D9A4360EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 9"; + rLen = 0; + rLoc = 160; + rType = 0; + vrLen = 1259; + vrLoc = 0; + }; + 28D9A4370EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 25"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 916; + vrLoc = 0; + }; + 28D9A4380EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 11"; + rLen = 0; + rLoc = 191; + rType = 0; + vrLen = 1260; + vrLoc = 0; + }; + 28D9A4390EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 919; + vrLoc = 0; + }; + 28D9A43A0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 25"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 811; + vrLoc = 0; + }; + 28D9A43B0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 919; + vrLoc = 0; + }; + 28D9A43C0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 11"; + rLen = 0; + rLoc = 191; + rType = 0; + vrLen = 847; + vrLoc = 387; + }; + 28D9A43D0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 25"; + rLen = 0; + rLoc = 442; + rType = 0; + vrLen = 782; + vrLoc = 134; + }; + 28D9A43E0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 919; + vrLoc = 0; + }; + 28D9A43F0EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 31"; + rLen = 0; + rLoc = 559; + rType = 0; + vrLen = 781; + vrLoc = 134; + }; + 28D9A4400EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 11"; + rLen = 0; + rLoc = 191; + rType = 0; + vrLen = 847; + vrLoc = 387; + }; + 28D9A4410EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 919; + vrLoc = 0; + }; + 28D9A4420EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 21"; + rLen = 0; + rLoc = 445; + rType = 0; + vrLen = 503; + vrLoc = 0; + }; + 28D9A4430EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 919; + vrLoc = 0; + }; + 28D9A4440EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 11"; + rLen = 0; + rLoc = 191; + rType = 0; + vrLen = 847; + vrLoc = 387; + }; + 28D9A4450EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "CCSerialPort.h: 53"; + rLen = 0; + rLoc = 946; + rType = 0; + vrLen = 818; + vrLoc = 134; + }; + 28D9A4460EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 149"; + rLen = 0; + rLoc = 2927; + rType = 0; + vrLen = 976; + vrLoc = 1888; + }; + 28D9A4470EEED31F00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 62"; + rLen = 0; + rLoc = 1060; + rType = 0; + vrLen = 761; + vrLoc = 642; + }; + 28D9A45B0EEED3C900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "CCSerialPort.m: 151"; + rLen = 0; + rLoc = 2925; + rType = 0; + vrLen = 1327; + vrLoc = 1606; + }; + 28D9A45C0EEED3C900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 28"; + rLen = 0; + rLoc = 485; + rType = 0; + vrLen = 1091; + vrLoc = 0; + }; + 28D9A45D0EEED3C900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 21"; + rLen = 0; + rLoc = 445; + rType = 0; + vrLen = 503; + vrLoc = 0; + }; + 28D9A45E0EEED3C900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 15"; + rLen = 0; + rLoc = 305; + rType = 0; + vrLen = 245; + vrLoc = 0; + }; + 28D9A45F0EEED3C900C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40970EE9C0C5007971BE /* CurrentCostView.h */; + name = "CurrentCostView.h: 21"; + rLen = 0; + rLoc = 406; + rType = 0; + vrLen = 434; + vrLoc = 0; + }; + 28D9A46D0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 21"; + rLen = 0; + rLoc = 445; + rType = 0; + vrLen = 503; + vrLoc = 0; + }; + 28D9A46E0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "NCCurrentCost.h: 53"; + rLen = 0; + rLoc = 946; + rType = 0; + vrLen = 952; + vrLoc = 0; + }; + 28D9A46F0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 151"; + rLen = 0; + rLoc = 2925; + rType = 0; + vrLen = 1362; + vrLoc = 1571; + }; + 28D9A4700EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 15"; + rLen = 0; + rLoc = 305; + rType = 0; + vrLen = 245; + vrLoc = 0; + }; + 28D9A4710EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; + name = "NSString+Trim.m: 16"; + rLen = 0; + rLoc = 295; + rType = 0; + vrLen = 848; + vrLoc = 0; + }; + 28D9A4720EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 151"; + rLen = 0; + rLoc = 2925; + rType = 0; + vrLen = 1362; + vrLoc = 1571; + }; + 28D9A4730EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 28"; + rLen = 0; + rLoc = 485; + rType = 0; + vrLen = 1091; + vrLoc = 0; + }; + 28D9A4740EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 151"; + rLen = 0; + rLoc = 2925; + rType = 0; + vrLen = 1362; + vrLoc = 1571; + }; + 28D9A4750EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 78"; + rLen = 0; + rLoc = 1248; + rType = 0; + vrLen = 1276; + vrLoc = 512; + }; + 28D9A4760EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 43"; + rLen = 0; + rLoc = 931; + rType = 0; + vrLen = 1071; + vrLoc = 0; + }; + 28D9A4770EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 10"; + rLen = 0; + rLoc = 184; + rType = 0; + vrLen = 504; + vrLoc = 0; + }; + 28D9A4780EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 43"; + rLen = 0; + rLoc = 931; + rType = 0; + vrLen = 1100; + vrLoc = 0; + }; + 28D9A4790EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; + name = "NSString+Trim.m: 20"; + rLen = 69; + rLoc = 299; + rType = 0; + vrLen = 848; + vrLoc = 0; + }; + 28D9A47A0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 16"; + rLen = 0; + rLoc = 305; + rType = 0; + vrLen = 315; + vrLoc = 0; + }; + 28D9A47B0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 9"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1261; + vrLoc = 0; + }; + 28D9A47C0EEED7F000C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 14"; + rLen = 0; + rLoc = 260; + rType = 0; + vrLen = 315; + vrLoc = 0; + }; + 28D9A4820EEED83A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; + name = "NSString+Trim.m: 17"; + rLen = 0; + rLoc = 297; + rType = 0; + vrLen = 847; + vrLoc = 0; + }; + 28D9A48F0EEED87500C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 93"; + rLen = 0; + rLoc = 1443; + rType = 0; + vrLen = 1079; + vrLoc = 430; + }; + 28D9A4900EEED87500C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 9"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1261; + vrLoc = 0; + }; + 28D9A4BF0EEED9EB00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 42"; + rLen = 0; + rLoc = 777; + rType = 0; + vrLen = 1112; + vrLoc = 0; + }; + 28D9A4C70EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + name = "Info.plist: 26"; + rLen = 0; + rLoc = 837; + rType = 0; + vrLen = 855; + vrLoc = 0; + }; + 28D9A4C80EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "NCCurrentCost.h: 53"; + rLen = 0; + rLoc = 946; + rType = 0; + vrLen = 952; + vrLoc = 0; + }; + 28D9A4C90EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 9"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1261; + vrLoc = 0; + }; + 28D9A4CA0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 500; + vrLoc = 0; + }; + 28D9A4CB0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 1108; + vrLoc = 0; + }; + 28D9A4CC0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40970EE9C0C5007971BE /* CurrentCostView.h */; + name = "CurrentCostView.h: 6"; + rLen = 0; + rLoc = 111; + rType = 0; + vrLen = 430; + vrLoc = 0; + }; + 28D9A4CD0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 6"; + rLen = 0; + rLoc = 111; + rType = 0; + vrLen = 1154; + vrLoc = 0; + }; + 28D9A4CE0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; + name = "NSString+Trim.m: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 843; + vrLoc = 0; + }; + 28D9A4CF0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 311; + vrLoc = 0; + }; + 28D9A4D00EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + name = "Info.plist: 26"; + rLen = 0; + rLoc = 837; + rType = 0; + vrLen = 855; + vrLoc = 0; + }; + 28D9A4D10EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E840EE99338007971BE /* NCCurrentCost.h */; + name = "NCCurrentCost.h: 53"; + rLen = 0; + rLoc = 946; + rType = 0; + vrLen = 952; + vrLoc = 0; + }; + 28D9A4D20EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; + name = "NCCurrentCost.m: 9"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1261; + vrLoc = 0; + }; + 28D9A4D30EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E880EE9935F007971BE /* AppController.h */; + name = "AppController.h: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 500; + vrLoc = 0; + }; + 28D9A4D40EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 1108; + vrLoc = 0; + }; + 28D9A4D50EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40970EE9C0C5007971BE /* CurrentCostView.h */; + name = "CurrentCostView.h: 6"; + rLen = 0; + rLoc = 111; + rType = 0; + vrLen = 430; + vrLoc = 0; + }; + 28D9A4D60EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; + name = "CurrentCostView.m: 6"; + rLen = 0; + rLoc = 111; + rType = 0; + vrLen = 1154; + vrLoc = 0; + }; + 28D9A4D70EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 311; + vrLoc = 0; + }; + 28D9A4D80EEEDC5A00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; + name = "NSString+Trim.m: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 843; + vrLoc = 0; + }; + 28D9A4E70EEEDE1C00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C403B0EE9B42A007971BE /* NSString+Trim.h */; + name = "NSString+Trim.h: 6"; + rLen = 0; + rLoc = 109; + rType = 0; + vrLen = 311; + vrLoc = 0; + }; + 28D9A4E80EEEDE1C00C1FFE7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 285C3E890EE9935F007971BE /* AppController.m */; + name = "AppController.m: 27"; + rLen = 26; + rLoc = 457; + rType = 0; + vrLen = 1103; + vrLoc = 0; + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeBuildConfigurationName = Debug; + activeExecutable = 285C3E670EE992E1007971BE /* Current Cost */; + activeTarget = 8D1107260486CEB800E47090 /* Current Cost */; + addToTargets = ( + 8D1107260486CEB800E47090 /* Current Cost */, + ); + breakpoints = ( + ); + codeSenseManager = 285C3E810EE992F0007971BE /* Code sense */; + executables = ( + 285C3E670EE992E1007971BE /* Current Cost */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 1436, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 1412, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_SCM_ColumnID, + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 250531281; + PBXWorkspaceStateSaveDate = 250531281; + }; + perUserProjectItems = { + 285C3E970EE994C2007971BE /* PBXTextBookmark */ = 285C3E970EE994C2007971BE /* PBXTextBookmark */; + 285C404A0EE9B759007971BE /* PBXTextBookmark */ = 285C404A0EE9B759007971BE /* PBXTextBookmark */; + 285C40680EE9BD79007971BE /* PBXTextBookmark */ = 285C40680EE9BD79007971BE /* PBXTextBookmark */; + 285C40700EE9BD79007971BE /* PBXTextBookmark */ = 285C40700EE9BD79007971BE /* PBXTextBookmark */; + 285C414E0EE9CD38007971BE /* PBXTextBookmark */ = 285C414E0EE9CD38007971BE /* PBXTextBookmark */; + 28D9A3E60EEECEB500C1FFE7 /* PBXTextBookmark */ = 28D9A3E60EEECEB500C1FFE7 /* PBXTextBookmark */; + 28D9A3F10EEECEF900C1FFE7 /* PBXTextBookmark */ = 28D9A3F10EEECEF900C1FFE7 /* PBXTextBookmark */; + 28D9A41C0EEED1C800C1FFE7 /* PBXTextBookmark */ = 28D9A41C0EEED1C800C1FFE7 /* PBXTextBookmark */; + 28D9A41D0EEED1C800C1FFE7 /* PBXTextBookmark */ = 28D9A41D0EEED1C800C1FFE7 /* PBXTextBookmark */; + 28D9A41E0EEED1C800C1FFE7 /* PBXTextBookmark */ = 28D9A41E0EEED1C800C1FFE7 /* PBXTextBookmark */; + 28D9A42C0EEED27C00C1FFE7 /* PBXTextBookmark */ = 28D9A42C0EEED27C00C1FFE7 /* PBXTextBookmark */; + 28D9A4360EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4360EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4370EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4370EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4380EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4380EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4390EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4390EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43A0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43A0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43B0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43B0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43C0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43C0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43D0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43D0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43E0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43E0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A43F0EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A43F0EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4400EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4400EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4410EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4410EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4420EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4420EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4430EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4430EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4440EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4440EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4450EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4450EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4460EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4460EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A4470EEED31F00C1FFE7 /* PBXTextBookmark */ = 28D9A4470EEED31F00C1FFE7 /* PBXTextBookmark */; + 28D9A45B0EEED3C900C1FFE7 /* PBXTextBookmark */ = 28D9A45B0EEED3C900C1FFE7 /* PBXTextBookmark */; + 28D9A45C0EEED3C900C1FFE7 /* PBXTextBookmark */ = 28D9A45C0EEED3C900C1FFE7 /* PBXTextBookmark */; + 28D9A45D0EEED3C900C1FFE7 /* PBXTextBookmark */ = 28D9A45D0EEED3C900C1FFE7 /* PBXTextBookmark */; + 28D9A45E0EEED3C900C1FFE7 /* PBXTextBookmark */ = 28D9A45E0EEED3C900C1FFE7 /* PBXTextBookmark */; + 28D9A45F0EEED3C900C1FFE7 /* PBXTextBookmark */ = 28D9A45F0EEED3C900C1FFE7 /* PBXTextBookmark */; + 28D9A46D0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A46D0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A46E0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A46E0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A46F0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A46F0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4700EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4700EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4710EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4710EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4720EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4720EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4730EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4730EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4740EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4740EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4750EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4750EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4760EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4760EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4770EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4770EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4780EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4780EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4790EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A4790EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A47A0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A47A0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A47B0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A47B0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A47C0EEED7F000C1FFE7 /* PBXTextBookmark */ = 28D9A47C0EEED7F000C1FFE7 /* PBXTextBookmark */; + 28D9A4820EEED83A00C1FFE7 /* PBXTextBookmark */ = 28D9A4820EEED83A00C1FFE7 /* PBXTextBookmark */; + 28D9A48F0EEED87500C1FFE7 /* PBXTextBookmark */ = 28D9A48F0EEED87500C1FFE7 /* PBXTextBookmark */; + 28D9A4900EEED87500C1FFE7 /* PBXTextBookmark */ = 28D9A4900EEED87500C1FFE7 /* PBXTextBookmark */; + 28D9A4BF0EEED9EB00C1FFE7 /* PBXTextBookmark */ = 28D9A4BF0EEED9EB00C1FFE7 /* PBXTextBookmark */; + 28D9A4C70EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4C70EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4C80EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4C80EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4C90EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4C90EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CA0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CA0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CB0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CB0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CC0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CC0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CD0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CD0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CE0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CE0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4CF0EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4CF0EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D00EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D00EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D10EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D10EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D20EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D20EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D30EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D30EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D40EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D40EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D50EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D50EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D60EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D60EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D70EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D70EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4D80EEEDC5A00C1FFE7 /* PBXTextBookmark */ = 28D9A4D80EEEDC5A00C1FFE7 /* PBXTextBookmark */; + 28D9A4E70EEEDE1C00C1FFE7 /* PBXTextBookmark */ = 28D9A4E70EEEDE1C00C1FFE7 /* PBXTextBookmark */; + 28D9A4E80EEEDE1C00C1FFE7 /* PBXTextBookmark */ = 28D9A4E80EEEDE1C00C1FFE7 /* PBXTextBookmark */; + }; + sourceControlManager = 285C3E800EE992F0007971BE /* Source Control */; + userBuildSettings = { + }; + }; + 8D1107260486CEB800E47090 /* Current Cost */ = { + activeExec = 0; + executables = ( + 285C3E670EE992E1007971BE /* Current Cost */, + ); + }; + 8D1107310486CEB800E47090 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1614, 961}}"; + sepNavSelRange = "{837, 0}"; + sepNavVisRange = "{0, 855}"; + sepNavWindowFrame = "{{38, 298}, {891, 854}}"; + }; + }; +} diff --git a/cocoa/Current Cost.xcodeproj/neil.perspectivev3 b/cocoa/Current Cost.xcodeproj/neil.perspectivev3 new file mode 100644 index 0000000..32d9a08 --- /dev/null +++ b/cocoa/Current Cost.xcodeproj/neil.perspectivev3 @@ -0,0 +1,1622 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + AIODescriptionKey + DockingSystemVisible + + Extension + perspectivev3 + FavBarConfig + + PBXProjectModuleGUID + 285C3E7F0EE992F0007971BE + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.defaultV3 + MajorVersion + 34 + MinorVersion + 0 + Name + All-In-One + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 28D9A4490EEED31F00C1FFE7 + PBXProjectModuleLabel + AppController.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 28D9A44A0EEED31F00C1FFE7 + PBXProjectModuleLabel + AppController.m + _historyCapacity + 10 + bookmark + 28D9A4E80EEEDE1C00C1FFE7 + history + + 28D9A42C0EEED27C00C1FFE7 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {891, 813}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 319 891 854 0 0 1920 1178 + + + + PerspectiveWidths + + 1920 + 1920 + + Perspectives + + + ChosenToolbarItems + + XCToolbarPerspectiveControl + NSToolbarSeparatorItem + active-combo-popup + action + NSToolbarFlexibleSpaceItem + build + build-and-go + go-debug + com.apple.ide.PBXToolbarStopButton + NSToolbarSeparatorItem + get-info + toggle-editor + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.project + IsVertical + + Layout + + + BecomeActive + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CA23ED40692098700951B8B + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 22 + 201 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + SCMStatusColumn + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 28D9A4970EEED8BB00C1FFE7 + 285C3E870EE99340007971BE + 28D9A4540EEED3A600C1FFE7 + 28D9A4530EEED39800C1FFE7 + 28D9A4520EEED38100C1FFE7 + 29B97317FDCFA39411CA2CEA + 29B97323FDCFA39411CA2CEA + E2644B35053B69B200211256 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {223, 980}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {240, 998}} + GroupTreeTableConfiguration + + SCMStatusColumn + 22 + MainColumn + 201 + + RubberWindowFrame + 0 139 1920 1039 0 0 1920 1178 + + Module + PBXSmartGroupTreeModule + Proportion + 240pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 285C3E740EE992F0007971BE + PBXProjectModuleLabel + NSString+Trim.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 285C3E750EE992F0007971BE + PBXProjectModuleLabel + NSString+Trim.h + _historyCapacity + 10 + bookmark + 28D9A4E70EEEDE1C00C1FFE7 + history + + 285C40680EE9BD79007971BE + 28D9A4C70EEEDC5A00C1FFE7 + 28D9A4C80EEEDC5A00C1FFE7 + 28D9A4C90EEEDC5A00C1FFE7 + 28D9A4CA0EEEDC5A00C1FFE7 + 28D9A4CB0EEEDC5A00C1FFE7 + 28D9A4CC0EEEDC5A00C1FFE7 + 28D9A4CD0EEEDC5A00C1FFE7 + 28D9A4CE0EEEDC5A00C1FFE7 + 28D9A4CF0EEEDC5A00C1FFE7 + + prevStack + + 285C3E970EE994C2007971BE + 285C414E0EE9CD38007971BE + 285C404A0EE9B759007971BE + 28D9A3E60EEECEB500C1FFE7 + 28D9A3F10EEECEF900C1FFE7 + 28D9A41C0EEED1C800C1FFE7 + 28D9A41D0EEED1C800C1FFE7 + 28D9A41E0EEED1C800C1FFE7 + 28D9A4360EEED31F00C1FFE7 + 28D9A4370EEED31F00C1FFE7 + 28D9A4380EEED31F00C1FFE7 + 28D9A4390EEED31F00C1FFE7 + 28D9A43A0EEED31F00C1FFE7 + 28D9A43B0EEED31F00C1FFE7 + 28D9A43C0EEED31F00C1FFE7 + 28D9A43D0EEED31F00C1FFE7 + 28D9A43E0EEED31F00C1FFE7 + 28D9A43F0EEED31F00C1FFE7 + 28D9A4400EEED31F00C1FFE7 + 28D9A4410EEED31F00C1FFE7 + 28D9A4420EEED31F00C1FFE7 + 28D9A4430EEED31F00C1FFE7 + 28D9A4440EEED31F00C1FFE7 + 28D9A4450EEED31F00C1FFE7 + 28D9A4460EEED31F00C1FFE7 + 28D9A4470EEED31F00C1FFE7 + 28D9A45B0EEED3C900C1FFE7 + 28D9A45C0EEED3C900C1FFE7 + 28D9A45D0EEED3C900C1FFE7 + 28D9A45E0EEED3C900C1FFE7 + 28D9A45F0EEED3C900C1FFE7 + 28D9A46D0EEED7F000C1FFE7 + 28D9A46E0EEED7F000C1FFE7 + 28D9A46F0EEED7F000C1FFE7 + 28D9A4700EEED7F000C1FFE7 + 28D9A4710EEED7F000C1FFE7 + 28D9A4720EEED7F000C1FFE7 + 28D9A4730EEED7F000C1FFE7 + 28D9A4740EEED7F000C1FFE7 + 28D9A4750EEED7F000C1FFE7 + 28D9A4760EEED7F000C1FFE7 + 28D9A4770EEED7F000C1FFE7 + 28D9A4780EEED7F000C1FFE7 + 28D9A4790EEED7F000C1FFE7 + 28D9A47A0EEED7F000C1FFE7 + 28D9A47B0EEED7F000C1FFE7 + 28D9A47C0EEED7F000C1FFE7 + 28D9A4820EEED83A00C1FFE7 + 285C40700EE9BD79007971BE + 28D9A48F0EEED87500C1FFE7 + 28D9A4900EEED87500C1FFE7 + 28D9A4BF0EEED9EB00C1FFE7 + 28D9A4D00EEEDC5A00C1FFE7 + 28D9A4D10EEEDC5A00C1FFE7 + 28D9A4D20EEEDC5A00C1FFE7 + 28D9A4D30EEEDC5A00C1FFE7 + 28D9A4D40EEEDC5A00C1FFE7 + 28D9A4D50EEEDC5A00C1FFE7 + 28D9A4D60EEEDC5A00C1FFE7 + 28D9A4D70EEEDC5A00C1FFE7 + 28D9A4D80EEEDC5A00C1FFE7 + + + SplitCount + 1 + + StatusBarVisibility + + XCSharingToken + com.apple.Xcode.CommonNavigatorGroupSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {1675, 677}} + RubberWindowFrame + 0 139 1920 1039 0 0 1920 1178 + + Module + PBXNavigatorGroup + Proportion + 677pt + + + Proportion + 316pt + Tabs + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA23EDF0692099D00951B8B + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{10, 27}, {1675, 289}} + RubberWindowFrame + 0 139 1920 1039 0 0 1920 1178 + + Module + XCDetailModule + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA23EE00692099D00951B8B + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{10, 31}, {603, 297}} + + Module + PBXProjectFindModule + + + ContentConfiguration + + PBXCVSModuleFilterTypeKey + 1032 + PBXCVSModuleTreeModuleColumnData + + PBXCVSModuleTreeModuleColumnWidthsKey + + 200 + 56.66162109375 + 63 + 60 + 63 + 139.556640625 + + PBXCVSModuleTreeModuleColumnsKey + + Name + Status + Update + Revision + Author + Date + + + PBXProjectModuleGUID + 1CA23EE10692099D00951B8B + PBXProjectModuleLabel + SCM Results + + GeometryConfiguration + + Frame + {{10, 31}, {603, 297}} + + Module + PBXCVSModule + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{10, 27}, {1675, -27}} + + Module + PBXBuildResultsModule + + + + + Proportion + 1675pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDockableTabModule + XCDetailModule + PBXProjectFindModule + PBXCVSModule + PBXBuildResultsModule + + TableOfContents + + 28D9A3D00EEECDE000C1FFE7 + 1CA23ED40692098700951B8B + 28D9A3D10EEECDE000C1FFE7 + 285C3E740EE992F0007971BE + 28D9A3D20EEECDE000C1FFE7 + 1CA23EDF0692099D00951B8B + 1CA23EE00692099D00951B8B + 1CA23EE10692099D00951B8B + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ChosenToolbarItems + + XCToolbarPerspectiveControl + NSToolbarSeparatorItem + active-combo-popup + NSToolbarFlexibleSpaceItem + build-and-go + com.apple.ide.PBXToolbarStopButton + debugger-restart-executable + debugger-pause + debugger-step-over + debugger-step-into + debugger-step-out + debugger-enable-breakpoints + NSToolbarFlexibleSpaceItem + com.apple.ide.XCBreakpointsToolbarItem + clear-log + + ControllerClassBaseName + PBXDebugSessionModule + IconName + DebugTabIcon + Identifier + perspective.debug + IsVertical + + Layout + + + ContentConfiguration + + PBXProjectModuleGUID + 1CCC7628064C1048000F2A68 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {1920, 191}} + + Module + PBXDebugCLIModule + Proportion + 191pt + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {918, 250}} + {{918, 0}, {1002, 250}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1920, 250}} + {{0, 250}, {1920, 552}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1CCC7629064C1048000F2A68 + PBXProjectModuleLabel + Debug + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 196}, {1920, 802}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 120 + Value + 85 + Summary + 772 + + Frame + {{918, 0}, {1002, 250}} + + + Module + PBXDebugSessionModule + Proportion + 802pt + + + Name + Debug + ServiceClasses + + XCModuleDock + PBXDebugCLIModule + PBXDebugSessionModule + PBXDebugProcessAndThreadModule + PBXDebugProcessViewModule + PBXDebugThreadViewModule + PBXDebugStackFrameViewModule + PBXNavigatorGroup + + TableOfContents + + 28D9A3D30EEECDE000C1FFE7 + 1CCC7628064C1048000F2A68 + 1CCC7629064C1048000F2A68 + 28D9A3D40EEECDE000C1FFE7 + 28D9A3D50EEECDE000C1FFE7 + 28D9A3D60EEECDE000C1FFE7 + 28D9A3D70EEECDE000C1FFE7 + 28D9A3CB0EEECDD500C1FFE7 + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecification.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + + WindowJustification + 5 + WindowOrderList + + 28D9A3F30EEECEF900C1FFE7 + 28D9A3F40EEECEF900C1FFE7 + 28D9A4490EEED31F00C1FFE7 + /Users/neil/Code/Mac/Cocoa/Current Cost/Current Cost.xcodeproj + + WindowString + 0 139 1920 1039 0 0 1920 1178 + WindowToolsV3 + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + Identifier + windowTool.build + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD052900623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {500, 215}} + RubberWindowFrame + 192 257 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + + GeometryConfiguration + + Frame + {{0, 222}, {500, 236}} + RubberWindowFrame + 192 257 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 458pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAA5065D492600B07095 + 1C78EAA6065D492600B07095 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowString + 192 257 500 500 0 0 1280 1002 + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 359}} + RubberWindowFrame + 21 755 440 400 0 0 1920 1178 + + Module + PBXDebugCLIModule + Proportion + 359pt + + + Proportion + 359pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C530D5B069F1CE1000CFCEE + 2812EE6D0EE9D66700694012 + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 21 755 440 400 0 0 1920 1178 + WindowToolGUID + 1C530D5B069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scmV3 + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 166pt + + + Proportion + 166pt + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {369, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {616, 353}} + MembersFrame + {{0, 105}, {369, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 94 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 597 125 616 374 0 0 1280 1002 + + Module + PBXClassBrowserModule + Proportion + 354pt + + + Proportion + 354pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C78EABA065D492600B07095 + 1C78EABB065D492600B07095 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 597 125 616 374 0 0 1280 1002 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/cocoa/Current Cost.xcodeproj/project.pbxproj b/cocoa/Current Cost.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d911f7c --- /dev/null +++ b/cocoa/Current Cost.xcodeproj/project.pbxproj @@ -0,0 +1,332 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; + 285C3E860EE99338007971BE /* NCCurrentCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 285C3E850EE99338007971BE /* NCCurrentCost.m */; }; + 285C3E8A0EE9935F007971BE /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 285C3E890EE9935F007971BE /* AppController.m */; }; + 285C403D0EE9B42A007971BE /* NSString+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 285C403C0EE9B42A007971BE /* NSString+Trim.m */; }; + 285C40990EE9C0C5007971BE /* CurrentCostView.m in Sources */ = {isa = PBXBuildFile; fileRef = 285C40980EE9C0C5007971BE /* CurrentCostView.m */; }; + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; + 285C3E840EE99338007971BE /* NCCurrentCost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCCurrentCost.h; sourceTree = ""; }; + 285C3E850EE99338007971BE /* NCCurrentCost.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NCCurrentCost.m; sourceTree = ""; }; + 285C3E880EE9935F007971BE /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; + 285C3E890EE9935F007971BE /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; + 285C403B0EE9B42A007971BE /* NSString+Trim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Trim.h"; sourceTree = ""; }; + 285C403C0EE9B42A007971BE /* NSString+Trim.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Trim.m"; sourceTree = ""; }; + 285C40970EE9C0C5007971BE /* CurrentCostView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurrentCostView.h; sourceTree = ""; }; + 285C40980EE9C0C5007971BE /* CurrentCostView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CurrentCostView.m; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* Current Cost_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Current Cost_Prefix.pch"; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8D1107320486CEB800E47090 /* Current Cost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Current Cost.app"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* Current Cost.app */, + ); + name = Products; + sourceTree = ""; + }; + 285C3E870EE99340007971BE /* Framework */ = { + isa = PBXGroup; + children = ( + 285C3E840EE99338007971BE /* NCCurrentCost.h */, + 285C3E850EE99338007971BE /* NCCurrentCost.m */, + ); + name = Framework; + sourceTree = ""; + }; + 28D9A4520EEED38100C1FFE7 /* Categories */ = { + isa = PBXGroup; + children = ( + 285C403B0EE9B42A007971BE /* NSString+Trim.h */, + 285C403C0EE9B42A007971BE /* NSString+Trim.m */, + ); + name = Categories; + sourceTree = ""; + }; + 28D9A4530EEED39800C1FFE7 /* Views */ = { + isa = PBXGroup; + children = ( + 285C40970EE9C0C5007971BE /* CurrentCostView.h */, + 285C40980EE9C0C5007971BE /* CurrentCostView.m */, + ); + name = Views; + sourceTree = ""; + }; + 28D9A4540EEED3A600C1FFE7 /* Controllers */ = { + isa = PBXGroup; + children = ( + 285C3E880EE9935F007971BE /* AppController.h */, + 285C3E890EE9935F007971BE /* AppController.m */, + ); + name = Controllers; + sourceTree = ""; + }; + 28D9A4970EEED8BB00C1FFE7 /* Classes */ = { + isa = PBXGroup; + children = ( + 285C3E870EE99340007971BE /* Framework */, + 28D9A4540EEED3A600C1FFE7 /* Controllers */, + 28D9A4530EEED39800C1FFE7 /* Views */, + 28D9A4520EEED38100C1FFE7 /* Categories */, + ); + name = Classes; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* Current Cost */ = { + isa = PBXGroup; + children = ( + 28D9A4970EEED8BB00C1FFE7 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = "Current Cost"; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32CA4F630368D1EE00C91783 /* Current Cost_Prefix.pch */, + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 8D1107310486CEB800E47090 /* Info.plist */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* Current Cost */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Current Cost" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Current Cost"; + productInstallPath = "$(HOME)/Applications"; + productName = "Current Cost"; + productReference = 8D1107320486CEB800E47090 /* Current Cost.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Current Cost" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* Current Cost */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* Current Cost */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072D0486CEB800E47090 /* main.m in Sources */, + 285C3E860EE99338007971BE /* NCCurrentCost.m in Sources */, + 285C3E8A0EE9935F007971BE /* AppController.m in Sources */, + 285C403D0EE9B42A007971BE /* NSString+Trim.m in Sources */, + 285C40990EE9C0C5007971BE /* CurrentCostView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 1DDD58150DA1D0A300B32029 /* English */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Current Cost_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = "Current Cost"; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Current Cost_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = "Current Cost"; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Current Cost" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Current Cost" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/cocoa/Current Cost_Prefix.pch b/cocoa/Current Cost_Prefix.pch new file mode 100644 index 0000000..8d10cb5 --- /dev/null +++ b/cocoa/Current Cost_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Current Cost' target in the 'Current Cost' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/cocoa/CurrentCostView.h b/cocoa/CurrentCostView.h new file mode 100644 index 0000000..9ec280c --- /dev/null +++ b/cocoa/CurrentCostView.h @@ -0,0 +1,23 @@ +// +// CurrentCostView.h +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import + + +@interface CurrentCostView : NSView { + NSString *watts; + NSString *temp; + NSString *time; + NSMutableDictionary *attributes; +} + +@property (readwrite, copy) NSString *watts; +@property (readwrite, copy) NSString *temp; +@property (readwrite, copy) NSString *time; + +@end diff --git a/cocoa/CurrentCostView.m b/cocoa/CurrentCostView.m new file mode 100644 index 0000000..3ab1d18 --- /dev/null +++ b/cocoa/CurrentCostView.m @@ -0,0 +1,111 @@ +// +// CurrentCostView.m +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import "CurrentCostView.h" + +@interface CurrentCostView () + +- (void)drawStringCenteredIn:(NSRect)rect; +- (void)prepareAttributes; + +@end + +@implementation CurrentCostView + +@synthesize watts, temp, time; + +- (id)initWithFrame:(NSRect)rect +{ + if (![super initWithFrame:rect]) { + return nil; + } + + [self prepareAttributes]; + watts = @""; + time = @"00:00"; + temp = @"0ËšC"; + + return self; +} + +- (void)dealloc +{ + [watts release]; + [temp release]; + [time release]; + [attributes release]; + + [super dealloc]; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect bounds = [self bounds]; + [[NSColor whiteColor] set]; + [self drawStringCenteredIn:bounds]; + + if (([[self window] firstResponder] == self) && [NSGraphicsContext currentContextDrawingToScreen]) { + [NSGraphicsContext saveGraphicsState]; + NSSetFocusRingStyle(NSFocusRingOnly); + [NSBezierPath fillRect:bounds]; + [NSGraphicsContext restoreGraphicsState]; + } + +} + +- (BOOL)isOpaque +{ + return NO; +} + +- (void)setWatts:(NSString *)power +{ + power = [power copy]; + [watts release]; + watts = power; + + [self setNeedsDisplay:YES]; +} + + +- (BOOL)acceptsFirstResponder +{ + return NO; +} + +- (BOOL)resignFirstResponder +{ + [self setNeedsDisplay:YES]; + return NO; +} + +- (BOOL)becomeFirstResponder +{ + [self setNeedsDisplay:YES]; + return NO; +} + +- (void)drawStringCenteredIn:(NSRect)rect +{ + NSSize wattsSize = [watts sizeWithAttributes:attributes]; + + NSPoint origin; + origin.x = rect.origin.x + (rect.size.width - wattsSize.width) / 2; + origin.y = rect.origin.y + (rect.size.height - wattsSize.height) / 2; + + [watts drawAtPoint:origin withAttributes:attributes]; +} + +- (void)prepareAttributes +{ + attributes = [[NSMutableDictionary alloc] init]; + [attributes setObject:[NSFont fontWithName:@"Helvetica" size:30] forKey:NSFontAttributeName]; + [attributes setObject:[NSColor blackColor] forKey:NSForegroundColorAttributeName]; +} + +@end diff --git a/cocoa/English.lproj/InfoPlist.strings b/cocoa/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..5e45963 Binary files /dev/null and b/cocoa/English.lproj/InfoPlist.strings differ diff --git a/cocoa/English.lproj/MainMenu.xib b/cocoa/English.lproj/MainMenu.xib new file mode 100644 index 0000000..5a81ea4 --- /dev/null +++ b/cocoa/English.lproj/MainMenu.xib @@ -0,0 +1,3185 @@ + + + + 1050 + 9F33 + 672 + 949.34 + 352.00 + + YES + + + + + YES + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + UHJlZmVyZW5jZXPigKY + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + T3BlbuKApg + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + U2F2ZSBBc+KApg + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + UHJpbnTigKY + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + RmluZOKApg + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + U2hvdyBTcGVsbGluZ+KApg + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Q3VzdG9taXplIFRvb2xiYXLigKY + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 15 + 2 + {{335, 546}, {480, 204}} + 1946157056 + CurrentCost Monitor + NSWindow + + {3.40282e+38, 3.40282e+38} + + + 256 + + YES + + + 268 + {{20, 51}, {440, 133}} + + CurrentCostView + + + + 268 + {{192, 3}, {96, 32}} + + YES + + -2080244224 + 134217728 + Capture + + LucidaGrande + 1.300000e+01 + 1044 + + + -2038284033 + 129 + + + 200 + 25 + + + + {480, 204} + + + {{0, 0}, {1440, 878}} + {3.40282e+38, 3.40282e+38} + + + NSFontManager + + + AppController + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + terminate: + + + + 449 + + + + delegate + + + + 473 + + + + delegate + + + + 475 + + + + ccView + + + + 476 + + + + captureButton + + + + 479 + + + + startDataCapture: + + + + 480 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 458 + + + + + 470 + + + + + 477 + + + YES + + + + + + 478 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 124.IBPluginDependency + 124.ImportedFromIB2 + 125.IBPluginDependency + 125.ImportedFromIB2 + 125.editorWindowContentRectSynchronizationRect + 126.IBPluginDependency + 126.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 195.IBPluginDependency + 195.ImportedFromIB2 + 196.IBPluginDependency + 196.ImportedFromIB2 + 197.IBPluginDependency + 197.ImportedFromIB2 + 198.IBPluginDependency + 198.ImportedFromIB2 + 199.IBPluginDependency + 199.ImportedFromIB2 + 200.IBPluginDependency + 200.ImportedFromIB2 + 200.editorWindowContentRectSynchronizationRect + 201.IBPluginDependency + 201.ImportedFromIB2 + 202.IBPluginDependency + 202.ImportedFromIB2 + 203.IBPluginDependency + 203.ImportedFromIB2 + 204.IBPluginDependency + 204.ImportedFromIB2 + 205.IBPluginDependency + 205.ImportedFromIB2 + 205.editorWindowContentRectSynchronizationRect + 206.IBPluginDependency + 206.ImportedFromIB2 + 207.IBPluginDependency + 207.ImportedFromIB2 + 208.IBPluginDependency + 208.ImportedFromIB2 + 209.IBPluginDependency + 209.ImportedFromIB2 + 210.IBPluginDependency + 210.ImportedFromIB2 + 211.IBPluginDependency + 211.ImportedFromIB2 + 212.IBPluginDependency + 212.ImportedFromIB2 + 212.editorWindowContentRectSynchronizationRect + 213.IBPluginDependency + 213.ImportedFromIB2 + 214.IBPluginDependency + 214.ImportedFromIB2 + 215.IBPluginDependency + 215.ImportedFromIB2 + 216.IBPluginDependency + 216.ImportedFromIB2 + 217.IBPluginDependency + 217.ImportedFromIB2 + 218.IBPluginDependency + 218.ImportedFromIB2 + 219.IBPluginDependency + 219.ImportedFromIB2 + 220.IBPluginDependency + 220.ImportedFromIB2 + 220.editorWindowContentRectSynchronizationRect + 221.IBPluginDependency + 221.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBEditorWindowLastContentRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 346.ImportedFromIB2 + 348.IBPluginDependency + 348.ImportedFromIB2 + 349.IBPluginDependency + 349.ImportedFromIB2 + 349.editorWindowContentRectSynchronizationRect + 350.IBPluginDependency + 350.ImportedFromIB2 + 351.IBPluginDependency + 351.ImportedFromIB2 + 354.IBPluginDependency + 354.ImportedFromIB2 + 371.IBEditorWindowLastContentRect + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 371.editorWindowContentRectSynchronizationRect + 371.windowTemplate.maxSize + 372.IBPluginDependency + 375.IBPluginDependency + 376.IBEditorWindowLastContentRect + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBEditorWindowLastContentRect + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 458.IBPluginDependency + 470.IBPluginDependency + 477.IBPluginDependency + 478.IBPluginDependency + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBEditorWindowLastContentRect + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 72.IBPluginDependency + 72.ImportedFromIB2 + 73.IBPluginDependency + 73.ImportedFromIB2 + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 78.IBPluginDependency + 78.ImportedFromIB2 + 79.IBPluginDependency + 79.ImportedFromIB2 + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{596, 852}, {216, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{522, 812}, {146, 23}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{436, 809}, {64, 6}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {275, 83}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{187, 434}, {243, 243}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {167, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {241, 103}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{525, 802}, {197, 73}} + {{207, 285}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + + {74, 862} + {{6, 978}, {478, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{475, 832}, {234, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{608, 612}, {215, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{412, 546}, {480, 204}} + com.apple.InterfaceBuilder.CocoaPlugin + {{412, 546}, {480, 204}} + + {{33, 99}, {480, 360}} + {3.40282e+38, 3.40282e+38} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 242}, {86, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{523, 2}, {178, 283}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{219, 102}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + {{23, 794}, {245, 183}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{145, 474}, {199, 203}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 480 + + + + YES + + AppController + NSObject + + startDataCapture: + id + + + YES + + YES + captureButton + ccView + + + YES + NSButton + CurrentCostView + + + + IBProjectSource + AppController.h + + + + CurrentCostView + NSView + + IBProjectSource + CurrentCostView.h + + + + + 0 + ../Current Cost.xcodeproj + 3 + + diff --git a/cocoa/Info.plist b/cocoa/Info.plist new file mode 100644 index 0000000..612b7da --- /dev/null +++ b/cocoa/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/cocoa/NCCurrentCost.h b/cocoa/NCCurrentCost.h new file mode 100644 index 0000000..0c9cb1c --- /dev/null +++ b/cocoa/NCCurrentCost.h @@ -0,0 +1,54 @@ +// +// CCSerialPort.h +// CCSerialPort +// +// Created by Neil on 02/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// #define CCDEBUG 1 +#define MAX_CC_BUFFER_SIZE 2048 + +@protocol NCCurrentCostDelegate +- (void)dataWasReceived:(NSXMLDocument *)newData; +@end + +@interface NCCurrentCost : NSObject { + +id delegate; + +@private + NSString *bsdPath; + int baud; + NSString *serviceName; + NSString *serviceType; + int fd; + + struct termios * __strong options; + struct termios * __strong originalOptions; + + NSFileHandle *handle; +} + +@property (readonly,retain) id delegate; + +- (id)init:(NSString *)path withBaudRate:(int)baudRate; +- (void)open; +- (void)close; +- (void)read; +- (void)setDelegate:(id)newDelegate; + +@end diff --git a/cocoa/NCCurrentCost.m b/cocoa/NCCurrentCost.m new file mode 100644 index 0000000..616ac44 --- /dev/null +++ b/cocoa/NCCurrentCost.m @@ -0,0 +1,154 @@ +// +// CCSerialPort.m +// CCSerialPort +// +// Created by Neil on 02/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import "NCCurrentCost.h" + +@implementation NCCurrentCost + +@synthesize delegate; + +#pragma mark Constructors and destructors + +- (id)init:(NSString *)path withBaudRate:(int)baudRate +{ + if (self = [super init]) { + bsdPath = [path copy]; + baud = baudRate; + + options = (struct termios*)malloc(sizeof(*options)); + originalOptions = (struct termios*)malloc(sizeof(*originalOptions)); + } + + return self; +} + +- (void)dealloc +{ + [self close]; + + free(originalOptions); + free(options); + + [serviceType release]; + [serviceName release]; + [bsdPath release]; + + [super dealloc]; +} + +#pragma mark Public Methods + +- (void)open +{ + const char *path = [bsdPath fileSystemRepresentation]; + + fd = open(path, O_RDONLY | O_NOCTTY); + if (fd == -1) { + // Error opening the serial port + NSLog(@"Error opening serial port"); + return; + } + + if (tcgetattr(fd, originalOptions) == -1) { + // Error getting options + NSLog(@"Error getting options"); + return; + } + + *options = *originalOptions; + handle = [[NSFileHandle alloc] initWithFileDescriptor:fd]; + + // Set the baud rate to 2400 bps + cfsetspeed(options, B2400); + + options->c_cc[VMIN] = 1; + options->c_cc[VTIME] = 10; + + // 8 data bits + options->c_cflag |= CS8; + + // No parity + options->c_cflag &= ~PARENB; + + // One stop bit + options->c_cflag &= ~CSTOPB; + + // No flow control + options->c_cflag &= ~(IXON | IXOFF | IXANY); + + if (tcsetattr(fd,TCSANOW, options) != 0) { + // Error setting options + NSLog(@"Error setting options"); + return; + } + +} + +- (void)close +{ + fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); + + [handle closeFile]; + [handle release]; + handle = nil; + + close(fd); + fd = -1; +} + + - (void)read +{ + char buffer[MAX_CC_BUFFER_SIZE]; + char *bufPtr; + ssize_t numBytes; + + memset(&buffer, 0, sizeof(buffer)); + bufPtr = buffer; + + do + { + numBytes = read(fd, bufPtr, MAX_CC_BUFFER_SIZE); + if (numBytes > 0) + { + bufPtr += numBytes; + + if (*(bufPtr - 1) == '\n') + { + NSRange range = [[NSString stringWithUTF8String:buffer] rangeOfString:@"\n"]; + + if ([delegate respondsToSelector:@selector(dataWasReceived:)]) { + NSData *rawData = [[NSData alloc] initWithBytes:buffer length:range.location]; + NSXMLDocument *xml = [[NSXMLDocument alloc] initWithData:rawData options:0 error:nil]; + + if (xml != nil) { + [delegate performSelectorOnMainThread:@selector(dataWasReceived:) withObject:xml waitUntilDone:YES]; + } + + [xml release]; + [rawData release]; + } + +#ifdef CCDEBUG + NSString *sentence = [data substringToIndex:range.location - 1]; + NSLog(@"%@", sentence); + [sentence release]; +#endif + break; + } + } + } while (numBytes > 0); +} + +- (void)setDelegate:(id)newDelegate +{ + [newDelegate retain]; + [delegate release]; + delegate = newDelegate; +} + +@end diff --git a/cocoa/NSString+Trim.h b/cocoa/NSString+Trim.h new file mode 100644 index 0000000..4b854ed --- /dev/null +++ b/cocoa/NSString+Trim.h @@ -0,0 +1,17 @@ +// +// NSString+Trim.h +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import + + +@interface NSString (Trim) + ++ (NSString *)stringByTrimmingLeadingZeros:(NSString *)numericString; +- (NSString *)stringByTrimmingLeadingZeros; + +@end diff --git a/cocoa/NSString+Trim.m b/cocoa/NSString+Trim.m new file mode 100644 index 0000000..d691be6 --- /dev/null +++ b/cocoa/NSString+Trim.m @@ -0,0 +1,37 @@ +// +// NSString+Trim.m +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright 2008 Neil Cowburn. All rights reserved. +// + +#import "NSString+Trim.h" + + +@implementation NSString (Trim) + +- (NSString *)stringByTrimmingLeadingZeros +{ + return [NSString stringByTrimmingLeadingZeros:self]; +} + ++ (NSString *)stringByTrimmingLeadingZeros:(NSString *)numericString +{ + NSMutableString *copy = [numericString mutableCopy]; + NSCharacterSet *naturalNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"]; + NSInteger start = -1; + + for (NSInteger i = 0; i < [copy length] - 1; i++) { + unichar chr = [copy characterAtIndex:i]; + if ([naturalNumberSet characterIsMember:chr] == YES) { + start = i; + break; + } + } + + [copy deleteCharactersInRange:NSMakeRange(0, start)]; + return [NSString stringWithString:copy]; +} + +@end diff --git a/cocoa/main.m b/cocoa/main.m new file mode 100644 index 0000000..33787ed --- /dev/null +++ b/cocoa/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Current Cost +// +// Created by Neil on 05/12/2008. +// Copyright Neil Cowburn Ltd 2008. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +}