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
|