diff --git a/ChangeLog b/ChangeLog index b08cc48..9ab62e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-03-22 Riccardo Mottola + + * Headers/Protocols/Preferences.h + * PCPrefController.m + Direct preferences method for setting and getting colors. + 2015-03-22 Riccardo Mottola * Modules/Preferences/EditorFSC/PCEditorFSCPrefs.m diff --git a/Headers/Protocols/Preferences.h b/Headers/Protocols/Preferences.h index 938495f..636b7bc 100644 --- a/Headers/Protocols/Preferences.h +++ b/Headers/Protocols/Preferences.h @@ -34,6 +34,7 @@ @protocol PCPreferences - (NSColor *)colorFromString:(NSString *)colorString; +- (NSString *)stringFromColor:(NSColor *)color; - (NSString *)stringForKey:(NSString *)key; - (NSString *)stringForKey:(NSString *)key @@ -47,6 +48,10 @@ - (float)floatForKey:(NSString *)key defaultValue:(float)defaultValue; +- (NSColor *)colorForKey:(NSString *)key; +- (NSColor *)colorForKey:(NSString *)key + defaultValue:(NSColor *)defaultValue; + - (void)setString:(NSString *)stringValue forKey:(NSString *)aKey notify:(BOOL)notify; @@ -56,7 +61,9 @@ - (void)setFloat:(float)floatValue forKey:(NSString *)aKey notify:(BOOL)notify; - +- (void)setColor:(NSColor *)color + forKey:(NSString *)aKey + notify:(BOOL)notify; @end @protocol PCPrefsSection diff --git a/PCPrefController.m b/PCPrefController.m index 8920166..e341526 100644 --- a/PCPrefController.m +++ b/PCPrefController.m @@ -103,6 +103,30 @@ static PCPrefController *_prefCtrllr = nil; return color; } +- (NSString *)stringFromColor:(NSColor *)color +{ + NSString *colorString; + + colorString = nil; + if ([[color colorSpaceName] isEqualToString:NSCalibratedWhiteColorSpace]) + { + colorString = [NSString stringWithFormat:@"White %0.1f", + [color whiteComponent]]; + } + else + { + if (![[color colorSpaceName] isEqualToString:NSCalibratedRGBColorSpace]) + color = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; + colorString = [NSString stringWithFormat:@"RGB %0.1f %0.1f %0.1f", + [color redComponent], + [color greenComponent], + [color blueComponent]]; + } + + NSLog(@"serialized color: '%@'", colorString); + return colorString; +} + // ---------------------------------------------------------------------------- // --- Accessors // ---------------------------------------------------------------------------- @@ -176,6 +200,33 @@ static PCPrefController *_prefCtrllr = nil; } } +- (NSColor *)colorForKey:(NSString *)key +{ + return [self colorForKey:key defaultValue:nil]; +} + +- (NSColor *)colorForKey:(NSString *)key + defaultValue:(NSColor *)defaultValue +{ + NSString *stringValue = [[NSUserDefaults standardUserDefaults] + objectForKey:key]; + + if (stringValue) + { + NSColor *color; + + color = [self colorFromString:stringValue]; + return color; + } + else if (defaultValue) + { + [self setColor:defaultValue forKey:key notify:NO]; + return defaultValue; + } + + return defaultValue; // returns nil +} + - (void)setString:(NSString *)stringValue forKey:(NSString *)aKey notify:(BOOL)notify @@ -225,6 +276,24 @@ static PCPrefController *_prefCtrllr = nil; } } +- (void)setColor:(NSColor *)color + forKey:(NSString *)aKey + notify:(BOOL)notify +{ + NSString *stringValue; + + stringValue = [self stringFromColor:color]; + [[NSUserDefaults standardUserDefaults] setObject:stringValue + forKey:aKey]; + + if (notify) + { + [[NSNotificationCenter defaultCenter] + postNotificationName:PCPreferencesDidChangeNotification + object:self]; + } +} + - (void)loadPrefsSections { PCBundleManager *bundleManager = [[PCBundleManager alloc] init];