File: MyTextField.m

package info (click to toggle)
wcalc 2.4-1.1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 1,916 kB
  • sloc: ansic: 7,089; objc: 2,002; sh: 890; lex: 816; yacc: 641; makefile: 103
file content (138 lines) | stat: -rw-r--r-- 3,251 bytes parent folder | download | duplicates (3)
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
#include "MyTextField.h"
#include "calculator.h"
#include "variables.h"
#include "simpleCalc.h"
#ifdef MEMWATCH
#include "memwatch.h"
#endif

@implementation MyTextField
- (void)keyDown:(NSEvent*) theEvent
{
	printf("mtf keydown\n");
	fflush(NULL);
}

- (void)keyUp:(NSEvent*) theEvent
{
    static char * ret = NULL;
	int keycode = [theEvent keyCode];
	//printf("mtf keyup\n"); fflush(NULL);
	if (! conf.simple_calc) {
		//printf("not simple_calc\n");
		switch (keycode) {
			case 71: // the clear button
				[self setStringValue:@""];
				//[self selectText:self];
				break;
			case 81: // =
			//		case 24:
			{
				char * temp;
				extern NSButton *e;
				extern NSTextField *ef;
				temp = strdup([[ef stringValue] UTF8String]);
				while (strlen(temp) && temp[strlen(temp)-1]=='=') {
					temp[strlen(temp)-1] = '\0';
				}
				[ef setStringValue:[NSString stringWithUTF8String:temp]];
				if (temp) free(temp);
				[e performClick:self];
				break;
			}
			case 123: // leftarrow
			case 124: // rightarrow
			case 126: // uparrow
			case 125: // downarrow
				break;
			default:
				//			printf("keyup %i => ", keycode);
	//			fflush(NULL);
 //			printf("%s\n", [[theEvent characters] UTF8String]);
				break;
		}
	} else {
		//printf("here, keycode: %i\n", keycode);
		switch(keycode) {
			case 123: // leftarrow
			case 124: // rightarrow
			case 126: // uparrow
			case 125: // downarrow
				break;
			case 71:
				if (! [[self stringValue] isEqualToString:@"0"]) {
					[self setStringValue:@"0"];
					[self selectText:self];
					simpleClearEntry();
				} else if (! [[AnswerField stringValue] isEqualToString:@"0"]) {
					[AnswerField setStringValue:@"0"];
					[self selectText:self];
					simpleClearAll();
				}
				break;
			case 76: // enter
			{
			    char *expr = strdup([[self stringValue] UTF8String]);
			    ret = simpleCalc('=', expr);
			    if (ret) {
				[self setStringValue:[NSString stringWithUTF8String:ret]];
			    } else {
				[mainController displayAnswer];
				[self setStringValue:[AnswerField stringValue]];
				ret = strdup([[AnswerField stringValue] UTF8String]);
			    }
			    free(expr);
			    break;
			}
			case 117: // delete
			case 51: // backspace
			    if (! [[self stringValue] isEqualToString:@"0"]) {
				[self setStringValue:@"0"];
				[self selectText:self];
				simpleClearEntry();
			    } else {
				[AnswerField setStringValue:@"0"];
				[self selectText:self];
				simpleClearAll();
			    }
			    if (ret) {
				free(ret);
			    }
			    ret = strdup("0");
			    break;
			default:
			{
				char thechar = [[theEvent characters] characterAtIndex:0];
				char * expr;
				unsigned len = [[self stringValue] length];
				if (ret) {
				    expr = ret;
				} else {
				    expr = strdup([[[self stringValue] substringToIndex:len-1] UTF8String]);
				}
				ret = simpleCalc(thechar,expr);
				if (ret) {
					[self setStringValue:[NSString stringWithUTF8String:ret]];
				} else {
					[mainController displayAnswer];
					[self setStringValue:[AnswerField stringValue]];
					ret = strdup([[AnswerField stringValue] UTF8String]);
				}
				free(expr);
				break;
			}
		}
	}
}

- (BOOL) acceptsFirstResponder
{
	return YES;
}

- (BOOL) refusesFirstResponder
{
	return NO;
}

@end