// // SRModifierFlagsTransformer.m // ShortcutRecorder // // Copyright 2006-2012 Contributors. All rights reserved. // // License: BSD // // Contributors: // Ilya Kulakov #import "SRModifierFlagsTransformer.h" #import "SRCommon.h" @implementation SRModifierFlagsTransformer - (instancetype)initWithPlainStrings:(BOOL)aUsesPlainStrings { self = [super init]; if (self) { _usesPlainStrings = aUsesPlainStrings; } return self; } - (instancetype)init { return [self initWithPlainStrings:NO]; } #pragma mark Methods + (instancetype)sharedTransformer { static dispatch_once_t OnceToken; static SRModifierFlagsTransformer *Transformer = nil; dispatch_once(&OnceToken, ^{ Transformer = [[self alloc] initWithPlainStrings:NO]; }); return Transformer; } + (instancetype)sharedPlainTransformer { static dispatch_once_t OnceToken; static SRModifierFlagsTransformer *Transformer = nil; dispatch_once(&OnceToken, ^{ Transformer = [[self alloc] initWithPlainStrings:YES]; }); return Transformer; } #pragma mark NSValueTransformer + (Class)transformedValueClass { return [NSString class]; } + (BOOL)allowsReverseTransformation { return NO; } - (NSString *)transformedValue:(NSNumber *)aValue { if (![aValue isKindOfClass:[NSNumber class]]) return nil; else if (self.usesPlainStrings) { NSEventModifierFlags modifierFlags = [aValue unsignedIntegerValue]; NSMutableString *s = [NSMutableString string]; if (modifierFlags & NSControlKeyMask) [s appendString:SRLoc(@"Control-")]; if (modifierFlags & NSAlternateKeyMask) [s appendString:SRLoc(@"Option-")]; if (modifierFlags & NSShiftKeyMask) [s appendString:SRLoc(@"Shift-")]; if (modifierFlags & NSCommandKeyMask) [s appendString:SRLoc(@"Command-")]; if (s.length > 0) [s deleteCharactersInRange:NSMakeRange(s.length - 1, 1)]; return s; } else { NSEventModifierFlags f = [aValue unsignedIntegerValue]; return [NSString stringWithFormat:@"%@%@%@%@", (f & NSControlKeyMask ? @"⌃" : @""), (f & NSAlternateKeyMask ? @"⌥" : @""), (f & NSShiftKeyMask ? @"⇧" : @""), (f & NSCommandKeyMask ? @"⌘" : @"")]; } } @end