This repository has been archived by the owner on Sep 14, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
RecordingPanel.m
109 lines (84 loc) · 2.54 KB
/
RecordingPanel.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
//
// RecordingPanel.m
//
// Copyright 2009 SwiftRing. All rights reserved.
//
#import "Debug.h"
#import "RecordingPanel.h"
#import "RingFactory.h"
#import "Ring.h"
@implementation RecordingPanel
- (void) startRecording;
{
DebugLog(@"startRecording");
pRecordedKeys = [[NSMutableString alloc] initWithCapacity: 30];
[recordingText setStringValue: @""];
oldFlags = 0;
isRecording = YES;
maxKeys = MAX_KEYSTROKES;
}
- (IBAction) doneRecording: (id) pSender
{
isRecording = NO;
[ringFactory recordKeySequenceDone: pRecordedKeys];
[pRecordedKeys release];
[NSApp stopModal];
[self close];
}
- (bool) isRecording
{
return isRecording;
}
- (void) processRecordingKeys: (CGEventRef) event ofType: (CGEventType) type
{
UniCharCount max = 10;
UniCharCount actual;
UniChar key[max];
unsigned short keyCode;
CGEventFlags flags;
CGEventFlags changedFlags;
if (maxKeys == 0)
{
return;
}
else
{
maxKeys--;
}
CGEventKeyboardGetUnicodeString(event, max, &actual, key);
keyCode = (unsigned short) CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode);
flags = CGEventGetFlags(event);
switch (type)
{
case kCGEventKeyUp:
DebugLog(@"Key up! keycode: %x string: %@", keyCode, [RingFactory stringForKeyCode: keyCode withModifierFlags: flags]);
[pRecordedKeys appendFormat: @"%i_0 ", keyCode];
break;
case kCGEventKeyDown:
DebugLog(@"Key down! keycode: %x string: %@", keyCode, [RingFactory stringForKeyCode: keyCode withModifierFlags: flags]);
[pRecordedKeys appendFormat: @"%i_1 ", keyCode];
break;
case kCGEventFlagsChanged:
changedFlags = flags ^ oldFlags;
if (changedFlags & oldFlags)
{
// Flag key up
DebugLog(@"Key up flags! keycode: %x string: %@", keyCode, [RingFactory stringForKeyCode: keyCode withModifierFlags: flags]);
[pRecordedKeys appendFormat: @"%i_0 ", keyCode];
}
else
{
// Flag key down
DebugLog(@"Key down flags! keycode: %x string: %@", keyCode, [RingFactory stringForKeyCode: keyCode withModifierFlags: flags]);
[pRecordedKeys appendFormat: @"%i_1 ", keyCode];
}
oldFlags = flags;
break;
}
[recordingText setStringValue: [RingFactory prettyPrintKeySequence: pRecordedKeys]];
}
- (NSString *) recordedKeys
{
return pRecordedKeys;
}
@end