1#import "LineJumper.h" 2 3static id sharedLineJumper = nil; 4 5@implementation LineJumper 6 7+ (id)sharedInstance 8{ 9 if (!sharedLineJumper) 10 { 11 sharedLineJumper = [[self allocWithZone:[[NSApplication sharedApplication] zone]] init]; 12 } 13 return sharedLineJumper; 14} 15 16- (id) init 17{ 18 if (!(self = [super init])) return nil; 19 // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidActivate:) name:NSApplicationDidBecomeActiveNotification object:[NSApplication sharedApplication]]; 20 // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addWillDeactivate:) name:NSApplicationWillResignActiveNotification object:[NSApplication sharedApplication]]; 21 return self; 22} 23 24- (void)loadUI 25{ 26 if (!lineField) 27 { 28 if (![NSBundle loadNibNamed:@"LineJumper" owner:self]) 29 { 30 NSLog(@"Failed to load LineJumper.nib"); 31 NSBeep(); 32 } 33 if (self == sharedLineJumper) 34 [[lineField window] setFrameAutosaveName:@"GoTo Line"]; 35 } 36} 37 38- (NSTextView<CodeEditorView> *)editorViewToUse 39{ 40 id tv = [[NSApp mainWindow] firstResponder]; 41 if([tv conformsToProtocol:@protocol(CodeEditorView)]) 42 return tv; 43 return nil; 44} 45 46- (NSPanel *)linePanel { 47 if (!lineField) 48 [self loadUI]; 49 return (NSPanel *)[lineField window]; 50} 51 52- (void)orderFrontLinePanel:(id)sender 53{ 54 NSPanel *panel = [self linePanel]; 55 [lineField selectText:nil]; 56 [panel makeKeyAndOrderFront:nil]; 57} 58 59- (IBAction)goToLine:(id)sender 60{ 61 NSUInteger line; 62 NSTextView<CodeEditorView> *cev; 63 64 line = (NSUInteger)[lineField integerValue]; 65 cev = [self editorViewToUse]; 66 if (cev) 67 { 68 [cev goToLineNumber:line]; 69 } 70} 71 72@end 73