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