-
Notifications
You must be signed in to change notification settings - Fork 0
/
AppDelegate.m
156 lines (103 loc) · 4.37 KB
/
AppDelegate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
// InputNinjaAppDelegate.m
// InputNinja
//
// Created by Sean Hess on 1/13/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
// http://developer.apple.com/library/mac/#samplecode/UIElementInspector/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000728-Intro-DontLinkElementID_2
#import "AppDelegate.h"
#import "KeyInterceptor.h"
#import "EventTapExample.h"
#import "FocusObserver.h"
#import "Parser.h"
#import "HotKeyGroup.h"
#import "CarbonAccessText.h"
#import "CocoaAccessTest.h"
@implementation AppDelegate
@synthesize window, statusItem, modeWindow, focus;
- (void)testAccessText:(id)sender {
NSLog(@"ACCESS");
[CarbonAccessText test];
[CocoaAccessTest test];
}
- (void)quit:(id)sender {
[[NSApplication sharedApplication] terminate:nil];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
// WINDOW AND STATUS BAR
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
self.statusItem.highlightMode = YES;
[statusItem setHighlightMode:YES];
[statusItem setTitle:@"VIntage"];
[statusItem setImage:[NSImage imageNamed:@"Ninja-Small.png"]];
NSRect windowRect = NSMakeRect(0, [NSScreen mainScreen].frame.size.height - 30, [NSScreen mainScreen].frame.size.width, 20);
self.modeWindow = [[NSWindow alloc] initWithContentRect:windowRect styleMask:( NSResizableWindowMask ) backing:NSBackingStoreBuffered defer:NO];
[self.modeWindow setLevel:NSModalPanelWindowLevel]; // try NSStatusWindowLevel
[self.modeWindow setBackgroundColor:[NSColor blueColor]];
[self.modeWindow makeKeyAndOrderFront:nil];
// [statusItem setHighlightMode:YES];
// [statusItem setTitle:@"myTitle"];
// [statusItem setToolTip:@"myToolTip"];
// [statusItem setMenu:statusMenu];
// [statusItem setEnabled:YES];
// Can I detect when it happens?
// Poll the accessibility API 10/s
// [self.modeWindow makeKeyAndOrderFront:self];
// NSDictionary *titleAttributes = [NSDictionary dictionaryWithObject:[NSColor blueColor] forKey:NSForegroundColorAttributeName];
// NSAttributedString* blueTitle = [[[NSAttributedString alloc] initWithString:@"myTitle" attributes:titleAttributes] autorelease];
// [statusItem setAttributedTitle:blueTitle];
// [blueTitle release];
// LISTENER //
KeyInterceptor * keys = [KeyInterceptor shared];
NSMutableArray * applications = [NSMutableArray array];
[applications addObject:@"com.apple.dt.Xcode"];
[applications addObject:@"com.macromates.textmate"];
[applications addObject:@"se.hunch.kod"];
[applications addObject:@"com.chocolatapp.Chocolat"];
self.focus = [[FocusObserver new] autorelease];
[self.focus observeApplications:applications delegate:self];
// change to observer?
keys.delegate = self;
NSArray * groups = [Parser groupsFromAllLocations];
for (HotKeyGroup * group in groups) {
group.isMajor = ![group.name isEqualToString:@"insert"];
[keys add:group];
}
[keys activateGroupWithName:@"command"];
[keys listen];
// HACK AND SUCH
NSMenu * menu = [[NSMenu alloc] initWithTitle:@""];
[menu addItemWithTitle:@"Access Text" action:@selector(testAccessText:) keyEquivalent:@""];
[menu addItemWithTitle:@"Quit VIntage" action:@selector(quit:) keyEquivalent:@""];
[statusItem setMenu:menu];
[menu release];
}
- (void)didChangeToGroup:(HotKeyGroup *)group {
[self.statusItem setTitle:group.name]; // this works pretty well!
if (group.isMajor)
[self.modeWindow setAlphaValue:1.0];
else
[self.modeWindow setAlphaValue:0.0];
}
- (void)didDeactivate {
[self.statusItem setTitle:@"Inactive"];
[self.modeWindow setAlphaValue:0.0];
}
- (void)didSwitchToActive {
[self didChangeToGroup:[KeyInterceptor shared].activeGroup];
[[KeyInterceptor shared] enable];
}
- (void)didSwitchToInactive {
[self didDeactivate];
[[KeyInterceptor shared] disable];
}
- (void)dealloc {
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
[statusItem release];
[modeWindow release];
[focus release];
[super dealloc];
}
@end