mirror of https://github.com/axmolengine/axmol.git
101 lines
2.4 KiB
Objective-C
101 lines
2.4 KiB
Objective-C
|
|
#import "ConsoleWindowController.h"
|
|
|
|
@interface ConsoleWindowController ()
|
|
|
|
@end
|
|
|
|
#define SKIP_LINES_COUNT 3
|
|
#define MAX_LINE_LEN 4096
|
|
#define MAX_LINES_COUNT 200
|
|
|
|
@implementation ConsoleWindowController
|
|
@synthesize textView;
|
|
|
|
- (id)initWithWindow:(NSWindow *)window
|
|
{
|
|
self = [super initWithWindow:window];
|
|
if (self)
|
|
{
|
|
// Initialization code here.
|
|
linesCount = [[NSMutableArray arrayWithCapacity:MAX_LINES_COUNT + 1] retain];
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[linesCount release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (void)windowDidLoad
|
|
{
|
|
[super windowDidLoad];
|
|
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
|
}
|
|
|
|
- (void) trace:(NSString*)msg
|
|
{
|
|
if (traceCount >= SKIP_LINES_COUNT && [msg length] > MAX_LINE_LEN)
|
|
{
|
|
msg = [NSString stringWithFormat:@"%@ ...", [msg substringToIndex:MAX_LINE_LEN - 4]];
|
|
}
|
|
traceCount++;
|
|
NSFont *font = [NSFont fontWithName:@"Monaco" size:12.0];
|
|
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
|
|
NSAttributedString *string = [[NSAttributedString alloc] initWithString:msg attributes:attrsDictionary];
|
|
NSNumber *len = [NSNumber numberWithUnsignedInteger:[string length]];
|
|
[linesCount addObject:len];
|
|
|
|
NSTextStorage *storage = [textView textStorage];
|
|
[storage beginEditing];
|
|
[storage appendAttributedString:string];
|
|
|
|
if ([linesCount count] >= MAX_LINES_COUNT)
|
|
{
|
|
len = [linesCount objectAtIndex:0];
|
|
[storage deleteCharactersInRange:NSMakeRange(0, [len unsignedIntegerValue])];
|
|
[linesCount removeObjectAtIndex:0];
|
|
}
|
|
|
|
[storage endEditing];
|
|
[self changeScroll];
|
|
}
|
|
|
|
- (void) changeScroll
|
|
{
|
|
BOOL scroll = [checkScroll state] == NSOnState;
|
|
if(scroll)
|
|
{
|
|
[self.textView scrollRangeToVisible: NSMakeRange(self.textView.string.length, 0)];
|
|
}
|
|
}
|
|
|
|
- (IBAction)onClear:(id)sender
|
|
{
|
|
NSTextStorage *storage = [textView textStorage];
|
|
[storage setAttributedString:[[[NSAttributedString alloc] initWithString:@""] autorelease]];
|
|
}
|
|
|
|
- (IBAction)onScrollChange:(id)sender
|
|
{
|
|
[self changeScroll];
|
|
}
|
|
|
|
- (IBAction)onTopChange:(id)sender
|
|
{
|
|
BOOL isTop = [topCheckBox state] == NSOnState;
|
|
if(isTop)
|
|
{
|
|
[self.window setLevel:NSFloatingWindowLevel];
|
|
}
|
|
else
|
|
{
|
|
[self.window setLevel:NSNormalWindowLevel];
|
|
}
|
|
}
|
|
|
|
@end
|