// // ITKeyComboPanel.m // // Created by Quentin Carnicelli on Sun Aug 03 2003. // Copyright (c) 2003 iThink Software. All rights reserved. // #import "ITKeyComboPanel.h" #import "ITHotKey.h" #import "ITKeyCombo.h" #import "ITKeyBroadcaster.h" #import "ITHotKeyCenter.h" #if __PROTEIN__ #import "NSObjectAdditions.h" #endif @implementation ITKeyComboPanel static id _sharedKeyComboPanel = nil; + (id)sharedPanel { if( _sharedKeyComboPanel == nil ) { _sharedKeyComboPanel = [[self alloc] init]; #if __PROTEIN__ [_sharedKeyComboPanel releaseOnTerminate]; #endif } return _sharedKeyComboPanel; } - (id)init { return [self initWithWindowNibName: @"ITKeyComboPanel"]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; [mKeyName release]; [mTitleFormat release]; [super dealloc]; } - (void)windowDidLoad { mTitleFormat = [[mTitleField stringValue] retain]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector( noteKeyBroadcast: ) name: ITKeyBroadcasterKeyEvent object: mKeyBcaster]; } - (void)_refreshContents { if( mComboField ) [mComboField setStringValue: [mKeyCombo description]]; if( mTitleField ) [mTitleField setStringValue: [NSString stringWithFormat: mTitleFormat, mKeyName]]; } - (int)runModal { int resultCode; [self window]; //Force us to load [self _refreshContents]; [[self window] center]; [self showWindow: self]; resultCode = [[NSApplication sharedApplication] runModalForWindow: [self window]]; [self close]; return resultCode; } - (void)runModalForHotKey: (ITHotKey*)hotKey { int resultCode; [self setKeyBindingName: [hotKey name]]; [self setKeyCombo: [hotKey keyCombo]]; resultCode = [self runModal]; if( resultCode == NSOKButton ) { [hotKey setKeyCombo: [self keyCombo]]; [[ITHotKeyCenter sharedCenter] registerHotKey: hotKey]; } } #pragma mark - - (void)setKeyCombo: (ITKeyCombo*)combo { [combo retain]; [mKeyCombo release]; mKeyCombo = combo; [self _refreshContents]; } - (ITKeyCombo*)keyCombo { return mKeyCombo; } - (void)setKeyBindingName: (NSString*)name { [name retain]; [mKeyName release]; mKeyName = name; [self _refreshContents]; } - (NSString*)keyBindingName { return mKeyName; } #pragma mark - - (IBAction)ok: (id)sender { [[NSApplication sharedApplication] stopModalWithCode: NSOKButton]; } - (IBAction)cancel: (id)sender { [[NSApplication sharedApplication] stopModalWithCode: NSCancelButton]; } - (IBAction)clear: (id)sender { [self setKeyCombo: [ITKeyCombo clearKeyCombo]]; [[NSApplication sharedApplication] stopModalWithCode: NSOKButton]; } - (void)noteKeyBroadcast: (NSNotification*)note { ITKeyCombo* keyCombo; keyCombo = [[note userInfo] objectForKey: @"keyCombo"]; [self setKeyCombo: keyCombo]; } @end