This is Preferences.m in view mode; [Download] [Up]
// Preferences.h // Project: Cribbage // Stephan Wacker // 93-10-03 #import "Preferences.h" #import "Cribbage.h" #import "cribbage.h" #define APP_NAME "CribbageBySW" // name in defaults database // // Defaults vector for initializing defaults database // static NXDefaultsVector AppDefaults = { { LIMIT_DEFAULT_NAME, LIMIT_DEFAULT_VALUE }, { BRIEF_DEFAULT_NAME, BRIEF_DEFAULT_VALUE }, { EXPLAIN_DEFAULT_NAME, EXPLAIN_DEFAULT_VALUE }, { COMP_COLOR_DEFAULT_NAME, COMP_COLOR_DEFAULT_VALUE }, { HUMAN_COLOR_DEFAULT_NAME, HUMAN_COLOR_DEFAULT_VALUE }, { BACKGROUND_COLOR_DEFAULT_NAME, BACKGROUND_COLOR_DEFAULT_VALUE }, { NULL, NULL } }; @implementation Preferences - run: sender { [[limitButton window] makeKeyAndOrderFront: self]; return self; } - changeColor: sender { [[NXApp delegate] updatePreferences]; return self; } - changeSwitch: sender // Always query all switches. { quiet = [self briefMessages]; explain = [self explainMistakes]; return self; } - freezeLimit { [limitButton setEnabled: NO]; return self; } - unfreezeLimit { [limitButton setEnabled: YES]; return self; } + initialize // Register default values after class has been created. { NXRegisterDefaults( APP_NAME, AppDefaults ); // Initialize global variables. quiet = [self defaultBriefMessages]; explain = [self defaultExplainMistakes]; return self; } - (int) limit // Answer current game limit. { return [[[limitPopup itemList] selectedCell] tag]; } - setLimit: (int) value // Set new game limit. { // [limitPopup itemList] is a Matrix. [[limitPopup itemList] selectCellWithTag: value]; [limitButton setTitle: [[[limitPopup itemList] selectedCell] title]]; return self; } + (int) defaultLimit // Answer default game limit. { int result; const char *value = NXGetDefaultValue( APP_NAME, LIMIT_DEFAULT_NAME ); result = atoi( value ); switch( result ) { case 61: case 121: break; default: result = LIMIT_DEFAULT; // only if invalid default value break; } return result; } - (BOOL) briefMessages // Answer current messages selection. { return [messagesSwitch intValue]; } - setBriefMessages: (BOOL) value // Set new messages selection. { [messagesSwitch setIntValue: value]; return self; } + (BOOL) defaultBriefMessages // Answer default messages selection. { int result; const char *value = NXGetDefaultValue( APP_NAME, BRIEF_DEFAULT_NAME ); result = !strcmp( value, "Yes" ); return result; } - (BOOL) explainMistakes // Answer current explanation selection. { return [explainSwitch intValue]; } - setExplainMistakes: (BOOL) value // Set new explanation selection. { [explainSwitch setIntValue: value]; return self; } + (BOOL) defaultExplainMistakes // Answer default explanation selection. { int result; const char *value = NXGetDefaultValue( APP_NAME, EXPLAIN_DEFAULT_NAME ); result = !strcmp( value, "Yes" ); return result; } - (NXColor) compColor // Answer current computer peg color. { return [compColorWell color]; } - setCompColor: (NXColor) color // Set new computer peg color. { [compColorWell setColor: color]; return self; } + (NXColor) defaultCompColor // Answer default computer peg color. { NXColor result; float r, g, b; const char *value = NXGetDefaultValue( APP_NAME, COMP_COLOR_DEFAULT_NAME ); if( sscanf( value, "(%f,%f,%f)", &r, &g, &b ) < 3 ) { result = COMP_COLOR_DEFAULT; } else { result = NXConvertRGBToColor( r, g, b ); } return result; } - (NXColor) humanColor // Answer current human peg color. { return [humanColorWell color]; } - setHumanColor: (NXColor) color // Set new human peg color. { [humanColorWell setColor: color]; return self; } + (NXColor) defaultHumanColor // Answer default human peg color. { NXColor result; float r, g, b; const char *value = NXGetDefaultValue( APP_NAME, HUMAN_COLOR_DEFAULT_NAME ); if( sscanf( value, "(%f,%f,%f)", &r, &g, &b ) < 3 ) { result = HUMAN_COLOR_DEFAULT; } else { result = NXConvertRGBToColor( r, g, b ); } return result; } - (NXColor) backgroundColor // Answer current background peg color. { return [backgroundColorWell color]; } - setBackgroundColor: (NXColor) color // Set new background peg color. { [backgroundColorWell setColor: color]; return self; } + (NXColor) defaultBackgroundColor // Answer default background peg color. { NXColor result; float r, g, b; const char *value = NXGetDefaultValue( APP_NAME, BACKGROUND_COLOR_DEFAULT_NAME ); if( sscanf( value, "(%f,%f,%f)", &r, &g, &b ) < 3 ) { result = BACKGROUND_COLOR_DEFAULT; } else { result = NXConvertRGBToColor( r, g, b ); } return result; } - awakeFromNib; // Initialize yourself after nib file has been loaded. { // Find popup list of limit button. limitPopup = [limitButton target]; [self setLimit: [[self class] defaultLimit]]; [self setBriefMessages: [[self class] defaultBriefMessages]]; [self setExplainMistakes: [[self class] defaultExplainMistakes]]; [self setCompColor: [[self class] defaultCompColor]]; [self setHumanColor: [[self class] defaultHumanColor]]; [self setBackgroundColor: [[self class] defaultBackgroundColor]]; return self; } - save: sender // Save preferences in database. { static NXDefaultsVector newDefaults = { { LIMIT_DEFAULT_NAME, NULL }, { BRIEF_DEFAULT_NAME, NULL }, { EXPLAIN_DEFAULT_NAME, NULL }, { COMP_COLOR_DEFAULT_NAME, NULL }, { HUMAN_COLOR_DEFAULT_NAME, NULL }, { BACKGROUND_COLOR_DEFAULT_NAME, NULL }, { NULL, NULL } }; int i; float r, g, b; if( !newDefaults[0].value ) // allocate default values for( i = 0; newDefaults[i].name != NULL; i++ ) { newDefaults[i].value = malloc( 60 ); // max length = 59 } i = 0; sprintf( newDefaults[i++].value, "%d", [self limit] ); sprintf( newDefaults[i++].value, "%s", [self briefMessages] ? "Yes" : "No" ); sprintf( newDefaults[i++].value, "%s", [self explainMistakes] ? "Yes" : "No" ); NXConvertColorToRGB( [self compColor], &r, &g, &b ); sprintf( newDefaults[i++].value, "(%f,%f,%f)", r, g, b ); NXConvertColorToRGB( [self humanColor], &r, &g, &b ); sprintf( newDefaults[i++].value, "(%f,%f,%f)", r, g, b ); NXConvertColorToRGB( [self backgroundColor], &r, &g, &b ); sprintf( newDefaults[i++].value, "(%f,%f,%f)", r, g, b ); NXWriteDefaults( APP_NAME, newDefaults ); return self; } @end // Preferences
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.