You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
nim-cocoa/cocoa/widgets/textedit.m

110 lines
3.8 KiB

#import <Cocoa/Cocoa.h>
#import "col.h"
@implementation CocoaTextEdit
@synthesize widget;
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.widget = [[[NSTextView alloc] initWithFrame:frame] autorelease];
[[self.widget textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[[self.widget textContainer] setWidthTracksTextView:NO];
[self.widget setHorizontallyResizable:YES];
[self.widget setTextContainerInset:NSMakeSize(2.0,2.0)];
[self.widget setAllowsUndo: YES];
[self setHasHorizontalScroller: YES];
[self setHasVerticalScroller: YES];
[self.widget setFont: [NSFont userFontOfSize:13.0]];
[self.widget setDelegate:self];
[self.widget becomeFirstResponder];
// [self.widget setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
[self setDocumentView: widget];
}
return self;
}
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
{
if (([theEvent type] == NSEventTypeKeyDown) && ([theEvent modifierFlags] & NSEventModifierFlagCommand)) {
NSResponder * responder = [[self window] firstResponder];
if ((responder != nil) && [responder isKindOfClass:[NSTextView class]]) {
NSTextView * textView = (NSTextView *)responder;
NSRange range = [textView selectedRange];
bool bHasSelectedTexts = (range.length > 0);
// NSLog(@"Keycod: %hu", [theEvent keyCode]);
unsigned short keyCode = [theEvent keyCode];
bool bHandled = false;
//6 Z, 7 X, 8 C, 9 V
if (keyCode == 6 ) {
if ([[textView undoManager] canUndo])
{
[[textView undoManager] undo];
bHandled = true;
}
}
else if (keyCode == 7 && bHasSelectedTexts) {
[textView cut:self];
bHandled = true;
}
else if (keyCode== 8 && bHasSelectedTexts) {
[textView copy:self];
bHandled = true;
}
else if (keyCode == 9) {
[textView paste:self];
bHandled = true;
}
if (bHandled)
return YES;
}
}
// }else if (([theEvent type] == NSEventTypeKeyDown) && ([theEvent modifierFlags] & NSEventModifierFlagCommand & NSEventModifierFlagShift)) {
// NSResponder * responder = [[self window] firstResponder];
// if ((responder != nil) && [responder isKindOfClass:[NSTextView class]]) {
// NSTextView * textView = (NSTextView *)responder;
// NSRange range = [textView selectedRange];
// bool bHasSelectedTexts = (range.length > 0);
// unsigned short keyCode = [theEvent keyCode];
// bool bHandled = false;
// if (keyCode == 6) {
// if ([[textView undoManager] canRedo])
// {
// [[textView undoManager] redo];
// bHandled = true;
// }
// }
// if (bHandled)
// return YES;
// }
// }
return NO;
}
@end
id createTextEdit(id parent, const char* txt, int l, int t, int w, int h) {
CocoaTextEdit *widget = [[[CocoaTextEdit alloc] initWithFrame:NSMakeRect( l, t, w, h )] autorelease];
if (strlen(txt)>0) {
NSString *str = [NSString stringWithUTF8String:txt];
[[widget documentView] setString:str];
}
addToParent(parent, widget);
return widget;
}