mirror of https://github.com/Airr/nim-cocoa.git
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.
110 lines
3.8 KiB
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;
|
|
}
|
|
|
|
|