From 0117310d6bd87f1a87e4150d7bce353c4d7da103 Mon Sep 17 00:00:00 2001 From: Nick Takayama Date: Mon, 13 Oct 2008 09:27:03 +0800 Subject: [PATCH] adding a delegate for CPTextField, and the controlTextDidChange: delegate method Signed-off-by: Nick Takayama --- AppKit/CPTextField.j | 39 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 38 insertions(+), 1 deletions(-) diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 9009ab1..d25e532 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -108,6 +108,11 @@ var _CPTextFieldSquareBezelColor = nil; id _placeholderString; CPLineBreakMode _lineBreakMode; + + id _delegate; + + CPString _textDidChangeValue; + #if PLATFORM(DOM) DOMElement _DOMTextElement; #endif @@ -166,6 +171,16 @@ var _CPTextFieldSquareBezelColor = nil; return self; } +- (void)setDelegate:(id)aDelegate +{ + _delegate = aDelegate; +} + +- (id)delegate +{ + return _delegate; +} + // Setting the Bezel Style /* Sets whether the textfield will have a bezeled border. @@ -292,7 +307,7 @@ var _CPTextFieldSquareBezelColor = nil; //element.onblur = function() { objj_debug_print_backtrace(); } //element.select(); - element.onkeypress = function(aDOMEvent) + element.onkeydown = function(aDOMEvent) { aDOMEvent = aDOMEvent || window.event; @@ -308,6 +323,28 @@ var _CPTextFieldSquareBezelColor = nil; [self sendAction:[self action] to:[self target]]; [[self window] makeFirstResponder:nil]; } + + //all other key presses might trigger the delegate method controlTextDidChange: + //record the current string value before we allow this keydown to propagate + _textDidChangeValue = [self stringValue]; + + return true; + + }; + + //inspect keyup to detect changes in order to trigger controlTextDidChange: delegate method + element.onkeyup = function(aDOMEvent) + { + //all other key presses trigger the delegate method controlTextDidChange: , as would happen in NSTextField + if ([self stringValue] != _textDidChangeValue) + { + _textDidChangeValue = [self stringValue]; + if ([_delegate respondsToSelector:@selector(controlTextDidChange:)]) + window.setTimeout(function() {[_delegate controlTextDidChange:self]}, 0.0); + } + + return true; + }; // If current value is the placeholder value, remove it to allow user to update. -- 1.5.4.5