// // CalculatorController.m // Bmi Calculator // // Created by Jasarien on 11/06/2007. // Copyright 2007 Jasarien.Com All rights reserved. // #import "CalculatorController.h" #import "AboutController.h" #import "PreferenceController.h" @implementation CalculatorController + (void)initialize { //Create a dictionary NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; //Put the defaults in the dictionary [defaultValues setObject:[NSNumber numberWithInt:0] forKey: JAMeasurementKey]; //Register the dictionary of defaults [[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues]; } - (void)awakeFromNib { [self checkMeasurement:nil]; } - (IBAction)showAboutWindow:(id)sender { [[AboutController sharedInstance] showPanel:sender]; } - (IBAction)showPreferencePanel:(id)sender { //is preferenceController nil? if (!preferenceController) { preferenceController = [[PreferenceController alloc] init]; } [preferenceController showWindow:self]; [preferenceController setMainController: self]; } - (IBAction)checkMeasurement:(id)sender { //Metric is state: 0 //Imperial is state: 1 NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; if ([defaults integerForKey:JAMeasurementKey] == 1) { //Set imperial [heightLabel setStringValue:@"Height (Feet)"]; [weightLabel setStringValue:@"Weight (Stone)"]; //convert any values in the fields to imperial [self convertTo:@"imperial"]; } else { //Set metric [heightLabel setStringValue:@"Height (M)"]; [weightLabel setStringValue:@"Weight (Kg)"]; //convert any values in the fields to metric [self convertTo:@"metric"]; } } - (void)convertTo:(NSString *)measurement { if ([measurement isEqualToString:@"imperial"]) { [heightField setFloatValue:([heightField floatValue] * 3.281)]; [weightField setFloatValue:([weightField floatValue] * 0.1575)]; } else if ([measurement isEqualToString:@"metric"]) { [heightField setFloatValue:([heightField floatValue] * 0.3048)]; //stone * 14 = pounds //pounds * 0.4536 = kilograms [weightField setFloatValue:(([weightField floatValue] * 14) * 0.4536)]; } } - (IBAction)chooseCalcMethod:(id)sender { //Metric is state: 0 //Imperial is state: 1 NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; if ([defaults integerForKey:JAMeasurementKey] == 1) { [self calculateImperialBmiFromWeight:[weightField floatValue] height:[heightField floatValue]]; } else { [self calculateMetricBmiFromWeight:[weightField floatValue] height:[heightField floatValue]]; } } - (void)calculateMetricBmiFromWeight:(float)kg height:(float)meters { float bmi = kg / (meters * meters); [bmiField setFloatValue:bmi]; } - (void)calculateImperialBmiFromWeight:(float)stone height:(float)feet { //convert stone into pounds float pounds = stone * 14; //convert feet into inches float inches = feet * 12; float bmi = pounds / (inches * inches) * 703; [bmiField setFloatValue:bmi]; } - (IBAction)clear:(id)sender { [weightField setStringValue:@"0"]; [heightField setStringValue:@"0"]; [bmiField setStringValue:@"0"]; } - (void)dealloc { [preferenceController release]; [super dealloc]; } @end