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
|
#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
{
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;
default:
{
char thechar = [[theEvent characters] characterAtIndex:0];
char * ret;
char * exp;
unsigned len = [[self stringValue] length];
exp = strdup([[[self stringValue] substringToIndex:len-1] UTF8String]);
ret = simpleCalc(thechar,exp);
if (ret) {
[self setStringValue:[NSString stringWithUTF8String:ret]];
free(ret);
} else {
[self setStringValue:[NSString stringWithUTF8String:exp]];
[mainController displayAnswer];
}
free(exp);
break;
}
}
}
}
- (BOOL) acceptsFirstResponder
{
return YES;
}
- (BOOL) refusesFirstResponder
{
return NO;
}
@end
|