Ignore:
Timestamp:
04/01/03 16:51:39 (21 years ago)
Author:
Nicholas Riley
Message:

PSPreferencesController.[hm]: Filter hot keys. Read and write to
preferences.

NJRHotKeyField.[hm]: Added property list serialization of hot key data
(not quite like PSAlarm/Alert because we're a GUI element). Added
delegate method for hot key filtering and action triggering when hot
key set or cleared. Only use filtered modifiers to avoid bizarre
behavior. More bug fixes.

English.lproj/Preferences.nib: Connected Clear button. Connected
NJRHotKeyField delegate and target to PSPreferencesController.

NSString-NJRExtensions.[hm]: Replaced "...modifierMask" with
"...modifierFlags" because it's more appropriate.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cocoa/Pester/Source/PSPreferencesController.m

    r129 r130  
    1616- (void)update;
    1717{
    18     // XXX do what we do in HL, stop more than one prefs window from appearing
     18    // perform any interface propagation that needs to be done
    1919}
    2020
     
    2323- (void)readFromPrefs;
    2424{
    25     // XXX
     25    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     26    [setAlarmHotKey setFromPropertyList: [defaults dictionaryForKey: @"Pester set alarm system-wide keyboard shortcut"]];
    2627}
    2728
     
    2930{
    3031    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    31     // XXX
     32    [defaults setObject: [setAlarmHotKey propertyListRepresentation] forKey: @"Pester set alarm system-wide keyboard shortcut"];
    3233    [defaults synchronize];
    3334}
     
    4041        [self readFromPrefs];
    4142        [self update];
     43        // command
     44        NSMutableCharacterSet *set = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
     45        [set addCharactersInString: @"`-=[]/\\ "];
     46        commandRejectSet = [set copy];
     47        [set release];
     48        // no modifiers, shift, option, option-shift
     49        set = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
     50        [set formUnionWithCharacterSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
     51        [set formUnionWithCharacterSet: [NSCharacterSet punctuationCharacterSet]];
     52        [set addCharactersInString: @"\t\r\e\x7f\x03\x19"]; // tab, CR, escape, delete, enter, backtab
     53        [set addCharactersInRange: NSMakeRange(0xF700, 0x1FF)]; // reserved function key range
     54        [set removeCharactersInRange: NSMakeRange(NSF1FunctionKey, 15)]; // F1-F15
     55        textRejectSet = [set copy];
     56        [set release];
     57        // command-shift
     58        commandShiftRejectSet = [[NSCharacterSet characterSetWithCharactersInString: @"ACFGHIPQS~? "] retain];
     59        // command-option
     60        commandOptionRejectSet = [[NSCharacterSet characterSetWithCharactersInString: @"DW\\-= "] retain];
    4261    }
    4362    return self;
     
    4665- (void)dealloc;
    4766{
     67    [textRejectSet release];
     68    [commandRejectSet release];
     69    [commandShiftRejectSet release];
     70    [commandOptionRejectSet release];
     71}
    4872
     73#pragma mark actions
     74
     75- (IBAction)hotKeySet:(NJRHotKeyField *)sender;
     76{
     77    [self writeToPrefs];
    4978}
    5079
    5180@end
     81
     82@implementation PSPreferencesController (NJRHotKeyFieldDelegate)
     83
     84- (BOOL)hotKeyField:(NJRHotKeyField *)hotKeyField shouldAcceptCharacter:(unichar)keyChar modifierFlags:(unsigned)modifierFlags rejectionMessage:(NSString **)message;
     85{
     86    *message = nil;
     87   
     88    if (modifierFlags == 0 || modifierFlags == NSShiftKeyMask || modifierFlags == NSAlternateKeyMask || modifierFlags == (NSShiftKeyMask | NSAlternateKeyMask)) {
     89        *message = modifierFlags == 0 ? @"key is reserved for typing text" :
     90                                        @"key combination is reserved for typing text";
     91        return ![textRejectSet characterIsMember: keyChar];
     92    }
     93    if (modifierFlags == NSCommandKeyMask) {
     94        *message = @"key combination is reserved for application use";
     95        return ![commandRejectSet characterIsMember: keyChar];
     96    }
     97    if (modifierFlags == (NSCommandKeyMask | NSShiftKeyMask)) {
     98        *message = @"key combination is reserved for application use";
     99        return ![commandShiftRejectSet characterIsMember: keyChar];
     100    }
     101    if (modifierFlags == (NSCommandKeyMask | NSAlternateKeyMask)) {
     102        *message = @"key combination is reserved for Mac OS X use";
     103        return ![commandOptionRejectSet characterIsMember: keyChar];
     104    }
     105    return YES;
     106}
     107
     108@end
Note: See TracChangeset for help on using the changeset viewer.