mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 20:50:38 +00:00
Tidyup responder ivars
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@6329 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f4ae81a101
commit
a2f6d72b82
6 changed files with 239 additions and 161 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2000-03-19 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
Fixes fromFred Kiefer -
|
||||||
|
* Headers/gnustep/gui/NSResponder.h: prefix ivars with underscore
|
||||||
|
and add new _menu ivar.
|
||||||
|
* Source/NSResponder.m: Change ivars and add support for Apples menu
|
||||||
|
methods.
|
||||||
|
* Source/NSWindow.m: update for change to responder ivar names.
|
||||||
|
* Source/NSInterfaceStyle.m: ditto
|
||||||
|
* Source/NSText.m: Establish cursor on starting edit.
|
||||||
|
|
||||||
2000-03-18 Richard Frith-Macdonald <rfm@gnu.org>
|
2000-03-18 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/NSSplitView.m: ([-mouseDown:]) only highlight/unhighlight
|
* Source/NSSplitView.m: ([-mouseDown:]) only highlight/unhighlight
|
||||||
|
|
|
@ -39,8 +39,9 @@
|
||||||
|
|
||||||
@interface NSResponder : NSObject <NSCoding>
|
@interface NSResponder : NSObject <NSCoding>
|
||||||
{
|
{
|
||||||
NSInterfaceStyle interface_style;
|
NSInterfaceStyle _interface_style;
|
||||||
NSResponder *next_responder;
|
NSResponder *_next_responder;
|
||||||
|
NSMenu *_menu;
|
||||||
/*
|
/*
|
||||||
* Flags for internal use by NSResponder and it's subclasses.
|
* Flags for internal use by NSResponder and it's subclasses.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -74,7 +74,7 @@ NSInterfaceStyleForKey(NSString *key, NSResponder *responder)
|
||||||
*/
|
*/
|
||||||
if (responder)
|
if (responder)
|
||||||
{
|
{
|
||||||
style = (NSInterfaceStyle)((accessToResponder)responder)->interface_style;
|
style = (NSInterfaceStyle)((accessToResponder)responder)->_interface_style;
|
||||||
if (style != NSNoInterfaceStyle)
|
if (style != NSNoInterfaceStyle)
|
||||||
{
|
{
|
||||||
return style;
|
return style;
|
||||||
|
|
|
@ -58,12 +58,12 @@
|
||||||
*/
|
*/
|
||||||
- (id) nextResponder
|
- (id) nextResponder
|
||||||
{
|
{
|
||||||
return next_responder;
|
return _next_responder;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setNextResponder: (NSResponder*)aResponder
|
- (void) setNextResponder: (NSResponder*)aResponder
|
||||||
{
|
{
|
||||||
next_responder = aResponder;
|
_next_responder = aResponder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -103,10 +103,10 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* If we cannot perform then try the next responder */
|
/* If we cannot perform then try the next responder */
|
||||||
if (!next_responder)
|
if (!_next_responder)
|
||||||
return NO;
|
return NO;
|
||||||
else
|
else
|
||||||
return [next_responder tryToPerform: anAction with: anObject];
|
return [_next_responder tryToPerform: anAction with: anObject];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,68 @@
|
||||||
|
|
||||||
- (void) interpretKeyEvents:(NSArray*)eventArray
|
- (void) interpretKeyEvents:(NSArray*)eventArray
|
||||||
{
|
{
|
||||||
// FIXME: As NSInputManger is still missing this method does nothing
|
// FIXME: As NSInputManger is still missing this method is hard coded
|
||||||
|
unsigned short keyCode;
|
||||||
|
NSEvent *theEvent;
|
||||||
|
NSEnumerator *eventEnum = [eventArray objectEnumerator];
|
||||||
|
|
||||||
|
while((theEvent = [eventEnum nextObject]) != nil)
|
||||||
|
{
|
||||||
|
keyCode = [theEvent keyCode];
|
||||||
|
|
||||||
|
switch (keyCode)
|
||||||
|
{
|
||||||
|
case NSUpArrowFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveUp:)];
|
||||||
|
break;
|
||||||
|
case NSDownArrowFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveDown:)];
|
||||||
|
break;
|
||||||
|
case NSLeftArrowFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveLeft:)];
|
||||||
|
break;
|
||||||
|
case NSRightArrowFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveRight:)];
|
||||||
|
break;
|
||||||
|
case NSDeleteFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(deleteForward:)];
|
||||||
|
break;
|
||||||
|
case NSHomeFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveToBeginningOfDocument:)];
|
||||||
|
break;
|
||||||
|
case NSBeginFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveToBeginningOfLine:)];
|
||||||
|
break;
|
||||||
|
case NSEndFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(moveToEndOfLine:)];
|
||||||
|
break;
|
||||||
|
case NSPageUpFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(pageUp:)];
|
||||||
|
break;
|
||||||
|
case NSPageDownFunctionKey:
|
||||||
|
[self doCommandBySelector: @selector(pageDown:)];
|
||||||
|
break;
|
||||||
|
case 0x0008:
|
||||||
|
//BackspaceKey
|
||||||
|
[self doCommandBySelector: @selector(deleteBackward:)];
|
||||||
|
break;
|
||||||
|
case 0x0009:
|
||||||
|
// TabKey
|
||||||
|
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
||||||
|
[self doCommandBySelector: @selector(insertBacktab:)];
|
||||||
|
else
|
||||||
|
[self doCommandBySelector: @selector(insertTab:)];
|
||||||
|
break;
|
||||||
|
case 0x000a:
|
||||||
|
case 0x000d:
|
||||||
|
// Enter, Newline
|
||||||
|
[self doCommandBySelector: @selector(insertNewline:)];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// If the character(s) was not a special one, simply insert it.
|
||||||
|
[self insertText: [theEvent characters]];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) flushBufferedKeyEvents
|
- (void) flushBufferedKeyEvents
|
||||||
|
@ -135,8 +196,8 @@
|
||||||
*/
|
*/
|
||||||
- (void) flagsChanged: (NSEvent*)theEvent
|
- (void) flagsChanged: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder flagsChanged: theEvent];
|
return [_next_responder flagsChanged: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(flagsChanged:)];
|
return [self noResponderFor: @selector(flagsChanged:)];
|
||||||
}
|
}
|
||||||
|
@ -146,71 +207,71 @@
|
||||||
if(![[NSHelpManager sharedHelpManager]
|
if(![[NSHelpManager sharedHelpManager]
|
||||||
showContextHelpForObject: self
|
showContextHelpForObject: self
|
||||||
locationHint: [theEvent locationInWindow]])
|
locationHint: [theEvent locationInWindow]])
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder helpRequested: theEvent];
|
return [_next_responder helpRequested: theEvent];
|
||||||
[NSHelpManager setContextHelpModeActive: NO];
|
[NSHelpManager setContextHelpModeActive: NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) keyDown: (NSEvent*)theEvent
|
- (void) keyDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder keyDown: theEvent];
|
return [_next_responder keyDown: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(keyDown:)];
|
return [self noResponderFor: @selector(keyDown:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) keyUp: (NSEvent*)theEvent
|
- (void) keyUp: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder keyUp: theEvent];
|
return [_next_responder keyUp: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(keyUp:)];
|
return [self noResponderFor: @selector(keyUp:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseDown: (NSEvent*)theEvent
|
- (void) mouseDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseDown: theEvent];
|
return [_next_responder mouseDown: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseDown:)];
|
return [self noResponderFor: @selector(mouseDown:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseDragged: (NSEvent*)theEvent
|
- (void) mouseDragged: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseDragged: theEvent];
|
return [_next_responder mouseDragged: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseDragged:)];
|
return [self noResponderFor: @selector(mouseDragged:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseEntered: (NSEvent*)theEvent
|
- (void) mouseEntered: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseEntered: theEvent];
|
return [_next_responder mouseEntered: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseEntered:)];
|
return [self noResponderFor: @selector(mouseEntered:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseExited: (NSEvent*)theEvent
|
- (void) mouseExited: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseExited: theEvent];
|
return [_next_responder mouseExited: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseExited:)];
|
return [self noResponderFor: @selector(mouseExited:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseMoved: (NSEvent*)theEvent
|
- (void) mouseMoved: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseMoved: theEvent];
|
return [_next_responder mouseMoved: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseMoved:)];
|
return [self noResponderFor: @selector(mouseMoved:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) mouseUp: (NSEvent*)theEvent
|
- (void) mouseUp: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder mouseUp: theEvent];
|
return [_next_responder mouseUp: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(mouseUp:)];
|
return [self noResponderFor: @selector(mouseUp:)];
|
||||||
}
|
}
|
||||||
|
@ -224,9 +285,9 @@
|
||||||
|
|
||||||
- (void) rightMouseDown: (NSEvent*)theEvent
|
- (void) rightMouseDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder != nil)
|
if (_next_responder != nil)
|
||||||
{
|
{
|
||||||
return [next_responder rightMouseDown: theEvent];
|
return [_next_responder rightMouseDown: theEvent];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -242,16 +303,16 @@
|
||||||
|
|
||||||
- (void) rightMouseDragged: (NSEvent*)theEvent
|
- (void) rightMouseDragged: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder rightMouseDragged: theEvent];
|
return [_next_responder rightMouseDragged: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(rightMouseDragged:)];
|
return [self noResponderFor: @selector(rightMouseDragged:)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) rightMouseUp: (NSEvent*)theEvent
|
- (void) rightMouseUp: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder rightMouseUp: theEvent];
|
return [_next_responder rightMouseUp: theEvent];
|
||||||
else
|
else
|
||||||
return [self noResponderFor: @selector(rightMouseUp:)];
|
return [self noResponderFor: @selector(rightMouseUp:)];
|
||||||
}
|
}
|
||||||
|
@ -262,8 +323,8 @@
|
||||||
- (id) validRequestorForSendType: (NSString*)typeSent
|
- (id) validRequestorForSendType: (NSString*)typeSent
|
||||||
returnType: (NSString*)typeReturned
|
returnType: (NSString*)typeReturned
|
||||||
{
|
{
|
||||||
if (next_responder)
|
if (_next_responder)
|
||||||
return [next_responder validRequestorForSendType: typeSent
|
return [_next_responder validRequestorForSendType: typeSent
|
||||||
returnType: typeReturned];
|
returnType: typeReturned];
|
||||||
else
|
else
|
||||||
return nil;
|
return nil;
|
||||||
|
@ -271,41 +332,46 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NSCoding protocol
|
* NSCoding protocol
|
||||||
* NB. Don't encode responder chanin - it's transient information that should
|
* NB. Don't encode responder chain - it's transient information that should
|
||||||
* be reconstructed from elsewhere in the encoded archive.
|
* be reconstructed from else where in the encoded archive.
|
||||||
*/
|
*/
|
||||||
- (void) encodeWithCoder: (NSCoder*)aCoder
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
||||||
{
|
{
|
||||||
[aCoder encodeValueOfObjCType: @encode(NSInterfaceStyle)
|
[aCoder encodeValueOfObjCType: @encode(NSInterfaceStyle)
|
||||||
at: &interface_style];
|
at: &_interface_style];
|
||||||
|
[aCoder encodeObject: _menu];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
|
id obj;
|
||||||
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(NSInterfaceStyle)
|
[aDecoder decodeValueOfObjCType: @encode(NSInterfaceStyle)
|
||||||
at: &interface_style];
|
at: &_interface_style];
|
||||||
|
obj = [aDecoder decodeObject];
|
||||||
|
[self setMenu: obj];
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMenu*) menu
|
- (NSMenu*) menu
|
||||||
{
|
{
|
||||||
// FIXME: We need a slot for the menu
|
return _menu;
|
||||||
return nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setMenu: (NSMenu*)aMenu
|
- (void) setMenu: (NSMenu*)aMenu
|
||||||
{
|
{
|
||||||
// FIXME: We need a slot for the menu
|
ASSIGN(_menu, aMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSInterfaceStyle) interfaceStyle
|
- (NSInterfaceStyle) interfaceStyle
|
||||||
{
|
{
|
||||||
return interface_style;
|
return _interface_style;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setInterfaceStyle: (NSInterfaceStyle)aStyle
|
- (void) setInterfaceStyle: (NSInterfaceStyle)aStyle
|
||||||
{
|
{
|
||||||
interface_style = aStyle;
|
_interface_style = aStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSUndoManager*) undoManager
|
- (NSUndoManager*) undoManager
|
||||||
|
|
228
Source/NSText.m
228
Source/NSText.m
|
@ -262,12 +262,12 @@ static NSRange MakeRangeFromAbs (int a1,int a2) // not the same as NSMakeRange!
|
||||||
- (NSRect) rectForCharacterIndex: (unsigned)index;
|
- (NSRect) rectForCharacterIndex: (unsigned)index;
|
||||||
- (void) _editedRange: (NSRange)aRange
|
- (void) _editedRange: (NSRange)aRange
|
||||||
withDelta: (int)delta;
|
withDelta: (int)delta;
|
||||||
- (int) rebuildLineLayoutInformation;
|
- (void) _buildUpLayout;
|
||||||
- (void) drawRect: (NSRect)rect
|
- (void) drawRect: (NSRect)rect
|
||||||
withSelection: (NSRange)range;
|
withSelection: (NSRange)range;
|
||||||
|
|
||||||
// GNU utility methods
|
// GNU utility methods
|
||||||
|
- (void) _illegalMovement: (int) notNumber;
|
||||||
- (BOOL) performPasteOperation: (NSPasteboard*)pboard;
|
- (BOOL) performPasteOperation: (NSPasteboard*)pboard;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -307,7 +307,6 @@ withAttributedString: (NSAttributedString*) aString;
|
||||||
- (void) setAttributedString: (NSAttributedString*) aString;
|
- (void) setAttributedString: (NSAttributedString*) aString;
|
||||||
- (NSSize) _sizeOfRange: (NSRange) range;
|
- (NSSize) _sizeOfRange: (NSRange) range;
|
||||||
- (NSRect) _textBounds;
|
- (NSRect) _textBounds;
|
||||||
- (NSDictionary*) defaultTypingAttributes;
|
|
||||||
|
|
||||||
|
|
||||||
- (unsigned) characterIndexForPoint: (NSPoint)point;
|
- (unsigned) characterIndexForPoint: (NSPoint)point;
|
||||||
|
@ -339,9 +338,10 @@ withAttributedString: (NSAttributedString*) aString;
|
||||||
withAttributedString: (NSAttributedString*)aString
|
withAttributedString: (NSAttributedString*)aString
|
||||||
{
|
{
|
||||||
_textHolder = aTextHolder;
|
_textHolder = aTextHolder;
|
||||||
ASSIGN(_textStorage, aString);
|
[self setAttributedString: aString];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setAttributedString: (NSAttributedString*)aString
|
- (void) setAttributedString: (NSAttributedString*)aString
|
||||||
{
|
{
|
||||||
ASSIGN(_textStorage, aString);
|
ASSIGN(_textStorage, aString);
|
||||||
|
@ -377,11 +377,6 @@ withAttributedString: (NSAttributedString*) aString;
|
||||||
return NSZeroRect;
|
return NSZeroRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSDictionary*) defaultTypingAttributes
|
|
||||||
{
|
|
||||||
return [_textHolder defaultTypingAttributes];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (int) lineLayoutIndexForCharacterIndex: (unsigned)anIndex
|
- (int) lineLayoutIndexForCharacterIndex: (unsigned)anIndex
|
||||||
{
|
{
|
||||||
NSEnumerator *lineEnum;
|
NSEnumerator *lineEnum;
|
||||||
|
@ -519,8 +514,7 @@ withAttributedString: (NSAttributedString*) aString;
|
||||||
{
|
{
|
||||||
NSRect rect = [currentInfo lineRect];
|
NSRect rect = [currentInfo lineRect];
|
||||||
NSSize stringSize
|
NSSize stringSize
|
||||||
= [self _sizeOfRange:
|
= [self _sizeOfRange: MakeRangeFromAbs (range.location, index)];
|
||||||
MakeRangeFromAbs (range.location, index)];
|
|
||||||
float x = rect.origin.x + stringSize.width;
|
float x = rect.origin.x + stringSize.width;
|
||||||
|
|
||||||
return NSMakeRect (x, rect.origin.y, NSMaxX (rect) - x,
|
return NSMakeRect (x, rect.origin.y, NSMaxX (rect) - x,
|
||||||
|
@ -1205,6 +1199,8 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draws the lines in the given rectangle and hands back the drawn
|
||||||
|
// character range.
|
||||||
- (NSRange) drawRectCharacters: (NSRect)rect
|
- (NSRange) drawRectCharacters: (NSRect)rect
|
||||||
{
|
{
|
||||||
NSRange aRange = [self lineRangeForRect: rect];
|
NSRange aRange = [self lineRangeForRect: rect];
|
||||||
|
@ -1294,8 +1290,8 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
[self setTextColor: [NSColor textColor]];
|
[self setTextColor: [NSColor textColor]];
|
||||||
_default_font = RETAIN([NSFont userFontOfSize: 12]);
|
_default_font = RETAIN([NSFont userFontOfSize: 12]);
|
||||||
// sets up the contents object
|
// sets up the contents object
|
||||||
[self setString: @"Text"];
|
[self setString: @""];
|
||||||
[self setSelectedRange: NSMakeRange (0, 0)];
|
//[self setSelectedRange: NSMakeRange (0, 0)];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1344,7 +1340,7 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
initWithString: aString
|
initWithString: aString
|
||||||
attributes: [self defaultTypingAttributes]];
|
attributes: [self defaultTypingAttributes]];
|
||||||
|
|
||||||
[self rebuildLineLayoutInformation];
|
[self _buildUpLayout];
|
||||||
[self sizeToFit];
|
[self sizeToFit];
|
||||||
[self setSelectedRangeNoDrawing: NSMakeRange (0, 0)];
|
[self setSelectedRangeNoDrawing: NSMakeRange (0, 0)];
|
||||||
[self setNeedsDisplay: YES];
|
[self setNeedsDisplay: YES];
|
||||||
|
@ -1442,7 +1438,10 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
_tf.is_editable = flag;
|
_tf.is_editable = flag;
|
||||||
// If we are editable then we are selectable
|
// If we are editable then we are selectable
|
||||||
if (flag)
|
if (flag)
|
||||||
_tf.is_selectable = YES;
|
{
|
||||||
|
_tf.is_selectable = YES;
|
||||||
|
// FIXME: We should show the insertion point
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setFieldEditor: (BOOL)flag
|
- (void) setFieldEditor: (BOOL)flag
|
||||||
|
@ -1516,7 +1515,7 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
if (!_window)
|
if (!_window)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_window && [[self class] focusView] != self)
|
if ([[self class] focusView] != self)
|
||||||
{
|
{
|
||||||
[self lockFocus];
|
[self lockFocus];
|
||||||
didLock = YES;
|
didLock = YES;
|
||||||
|
@ -2207,112 +2206,71 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
|
|
||||||
- (void) keyDown: (NSEvent*)theEvent
|
- (void) keyDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
unsigned short keyCode;
|
|
||||||
|
|
||||||
// If not editable then don't recognize the key down
|
// If not editable then don't recognize the key down
|
||||||
if (!_tf.is_editable)
|
if (!_tf.is_editable)
|
||||||
{
|
{
|
||||||
[super keyDown: theEvent];
|
[super keyDown: theEvent];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[self interpretKeyEvents: [NSArray arrayWithObject: theEvent]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) insertNewline: (id) sender
|
||||||
|
{
|
||||||
|
if (_tf.is_field_editor)
|
||||||
|
{
|
||||||
|
[self _illegalMovement: NSReturnTextMovement];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyCode = [theEvent keyCode];
|
[self insertText: [[self class] newlineString]];
|
||||||
|
}
|
||||||
|
|
||||||
// Some keys are extremely special if we are field editor
|
- (void) insertTab: (id) sender
|
||||||
if ([self isFieldEditor])
|
{
|
||||||
|
if (_tf.is_field_editor)
|
||||||
{
|
{
|
||||||
int notNumber = NSIllegalTextMovement;
|
[self _illegalMovement: NSTabTextMovement];
|
||||||
|
return;
|
||||||
switch (keyCode)
|
|
||||||
{
|
|
||||||
case NSUpArrowFunctionKey:
|
|
||||||
notNumber = NSUpTextMovement;
|
|
||||||
break;
|
|
||||||
case NSDownArrowFunctionKey:
|
|
||||||
notNumber = NSDownTextMovement;
|
|
||||||
break;
|
|
||||||
case NSLeftArrowFunctionKey:
|
|
||||||
//notNumber = NSLeftTextMovement;
|
|
||||||
break;
|
|
||||||
case NSRightArrowFunctionKey:
|
|
||||||
//notNumber = NSRightTextMovement;
|
|
||||||
break;
|
|
||||||
case NSCarriageReturnKey:
|
|
||||||
notNumber = NSReturnTextMovement;
|
|
||||||
break;
|
|
||||||
case 0x09:
|
|
||||||
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
|
||||||
notNumber = NSBacktabTextMovement;
|
|
||||||
else
|
|
||||||
notNumber = NSTabTextMovement;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (notNumber != NSIllegalTextMovement)
|
|
||||||
{
|
|
||||||
// This is similar to [self resignFirstResponder],
|
|
||||||
// with the difference that in the notification we need
|
|
||||||
// to put the NSTextMovement, which resignFirstResponder
|
|
||||||
// does not. Also, if we are ending editing, we are going
|
|
||||||
// to be removed, so it's useless to update any drawing.
|
|
||||||
NSNumber *number;
|
|
||||||
NSDictionary *uiDictionary;
|
|
||||||
|
|
||||||
if (([self isEditable])
|
|
||||||
&& ([_delegate respondsToSelector:
|
|
||||||
@selector(textShouldEndEditing:)])
|
|
||||||
&& ([_delegate textShouldEndEditing: self] == NO))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Add any clean-up stuff here
|
|
||||||
|
|
||||||
number = [NSNumber numberWithInt: notNumber];
|
|
||||||
uiDictionary = [NSDictionary dictionaryWithObject: number
|
|
||||||
forKey: @"NSTextMovement"];
|
|
||||||
[[NSNotificationCenter defaultCenter]
|
|
||||||
postNotificationName: NSTextDidEndEditingNotification
|
|
||||||
object: self
|
|
||||||
userInfo: uiDictionary];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special Characters for generic NSText
|
[self insertText: @"\t"];
|
||||||
switch (keyCode)
|
}
|
||||||
|
|
||||||
|
- (void) insertBacktab: (id) sender
|
||||||
|
{
|
||||||
|
if (_tf.is_field_editor)
|
||||||
{
|
{
|
||||||
case NSUpArrowFunctionKey:
|
[self _illegalMovement: NSBacktabTextMovement];
|
||||||
[self moveUp: self];
|
return;
|
||||||
return;
|
|
||||||
case NSDownArrowFunctionKey:
|
|
||||||
[self moveDown: self];
|
|
||||||
return;
|
|
||||||
case NSLeftArrowFunctionKey:
|
|
||||||
[self moveLeft: self];
|
|
||||||
return;
|
|
||||||
case NSRightArrowFunctionKey:
|
|
||||||
[self moveRight: self];
|
|
||||||
return;
|
|
||||||
case NSDeleteFunctionKey:
|
|
||||||
if (_selected_range.location != [self textLength])
|
|
||||||
{
|
|
||||||
/* Not at the end of text -- delete following character */
|
|
||||||
[self deleteRange:
|
|
||||||
[self selectionRangeForProposedRange:
|
|
||||||
NSMakeRange (_selected_range.location, 1)
|
|
||||||
granularity: NSSelectByCharacter]
|
|
||||||
backspace: NO];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* end of text: behave the same way as NSBackspaceKey */
|
|
||||||
case NSBackspaceKey:
|
|
||||||
[self deleteRange: _selected_range backspace: YES];
|
|
||||||
return;
|
|
||||||
case NSCarriageReturnKey:
|
|
||||||
[self insertText: [[self class] newlineString]];
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the character(s) was not a special one, simply insert it.
|
//[self insertText: @"\t"];
|
||||||
[self insertText: [theEvent characters]];
|
}
|
||||||
|
|
||||||
|
- (void) deleteForward: (id) sender
|
||||||
|
{
|
||||||
|
if (_selected_range.location != [self textLength])
|
||||||
|
{
|
||||||
|
/* Not at the end of text -- delete following character */
|
||||||
|
[self deleteRange:
|
||||||
|
[self selectionRangeForProposedRange:
|
||||||
|
NSMakeRange (_selected_range.location, 1)
|
||||||
|
granularity: NSSelectByCharacter]
|
||||||
|
backspace: NO];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* end of text: behave the same way as NSBackspaceKey */
|
||||||
|
[self deleteBackward: sender];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) deleteBackward: (id) sender
|
||||||
|
{
|
||||||
|
[self deleteRange: _selected_range backspace: YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
//<!> choose granularity according to keyboard modifier flags
|
//<!> choose granularity according to keyboard modifier flags
|
||||||
|
@ -2322,6 +2280,12 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
NSPoint cursorPoint;
|
NSPoint cursorPoint;
|
||||||
NSRange oldRange = _selected_range;
|
NSRange oldRange = _selected_range;
|
||||||
|
|
||||||
|
if (_tf.is_field_editor)
|
||||||
|
{
|
||||||
|
[self _illegalMovement: NSUpTextMovement];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Do nothing if we are at beginning of text */
|
/* Do nothing if we are at beginning of text */
|
||||||
if (_selected_range.location == 0)
|
if (_selected_range.location == 0)
|
||||||
return;
|
return;
|
||||||
|
@ -2350,6 +2314,12 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
NSRect cursorRect;
|
NSRect cursorRect;
|
||||||
NSRange oldRange = _selected_range;
|
NSRange oldRange = _selected_range;
|
||||||
|
|
||||||
|
if (_tf.is_field_editor)
|
||||||
|
{
|
||||||
|
[self _illegalMovement: NSDownTextMovement];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Do nothing if we are at end of text */
|
/* Do nothing if we are at end of text */
|
||||||
if (_selected_range.location == [self textLength])
|
if (_selected_range.location == [self textLength])
|
||||||
return;
|
return;
|
||||||
|
@ -2575,6 +2545,8 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
_default_font = RETAIN([aDecoder decodeObject]);
|
_default_font = RETAIN([aDecoder decodeObject]);
|
||||||
[aDecoder decodeValueOfObjCType: @encode(NSRange) at: &_selected_range];
|
[aDecoder decodeValueOfObjCType: @encode(NSRange) at: &_selected_range];
|
||||||
|
|
||||||
|
// build upt the layout information that dont get stored
|
||||||
|
[self _buildUpLayout];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2735,7 +2707,7 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
if (!_window)
|
if (!_window)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_window && [[self class] focusView] != self)
|
if ([[self class] focusView] != self)
|
||||||
{
|
{
|
||||||
[self lockFocus];
|
[self lockFocus];
|
||||||
didLock = YES;
|
didLock = YES;
|
||||||
|
@ -2847,6 +2819,35 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
_text_color, NSForegroundColorAttributeName,
|
_text_color, NSForegroundColorAttributeName,
|
||||||
nil];
|
nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) _illegalMovement: (int) textMovement
|
||||||
|
{
|
||||||
|
// This is similar to [self resignFirstResponder],
|
||||||
|
// with the difference that in the notification we need
|
||||||
|
// to put the NSTextMovement, which resignFirstResponder
|
||||||
|
// does not. Also, if we are ending editing, we are going
|
||||||
|
// to be removed, so it's useless to update any drawing.
|
||||||
|
NSNumber *number;
|
||||||
|
NSDictionary *uiDictionary;
|
||||||
|
|
||||||
|
if (([self isEditable])
|
||||||
|
&& ([_delegate respondsToSelector:
|
||||||
|
@selector(textShouldEndEditing:)])
|
||||||
|
&& ([_delegate textShouldEndEditing: self] == NO))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Add any clean-up stuff here
|
||||||
|
|
||||||
|
number = [NSNumber numberWithInt: textMovement];
|
||||||
|
uiDictionary = [NSDictionary dictionaryWithObject: number
|
||||||
|
forKey: @"NSTextMovement"];
|
||||||
|
[[NSNotificationCenter defaultCenter]
|
||||||
|
postNotificationName: NSTextDidEndEditingNotification
|
||||||
|
object: self
|
||||||
|
userInfo: uiDictionary];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// begin: dragging of colors and files---------------
|
// begin: dragging of colors and files---------------
|
||||||
- (unsigned int) draggingEntered: (id <NSDraggingInfo>)sender
|
- (unsigned int) draggingEntered: (id <NSDraggingInfo>)sender
|
||||||
{
|
{
|
||||||
|
@ -3056,7 +3057,6 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
object: self];
|
object: self];
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: The following methods should be move to a seperate class
|
|
||||||
- (unsigned) characterIndexForPoint: (NSPoint) point
|
- (unsigned) characterIndexForPoint: (NSPoint) point
|
||||||
{
|
{
|
||||||
return [_layoutManager characterIndexForPoint: point];
|
return [_layoutManager characterIndexForPoint: point];
|
||||||
|
@ -3067,7 +3067,7 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
return [_layoutManager rectForCharacterIndex: index];
|
return [_layoutManager rectForCharacterIndex: index];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) rebuildLineLayoutInformation
|
- (void) _buildUpLayout
|
||||||
{
|
{
|
||||||
if (_layoutManager == nil)
|
if (_layoutManager == nil)
|
||||||
_layoutManager = [[GSSimpleLayoutManager alloc]
|
_layoutManager = [[GSSimpleLayoutManager alloc]
|
||||||
|
@ -3075,8 +3075,6 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
withAttributedString: _textStorage];
|
withAttributedString: _textStorage];
|
||||||
else
|
else
|
||||||
[_layoutManager setAttributedString: _textStorage];
|
[_layoutManager setAttributedString: _textStorage];
|
||||||
|
|
||||||
return [_layoutManager rebuildLineLayoutInformation];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _editedRange: (NSRange) aRange
|
- (void) _editedRange: (NSRange) aRange
|
||||||
|
@ -3109,7 +3107,6 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
|
|
||||||
// We have to redraw the part of the selection that is inside
|
// We have to redraw the part of the selection that is inside
|
||||||
// the redrawn lines
|
// the redrawn lines
|
||||||
|
|
||||||
newRange = NSIntersectionRange(selectedCharacterRange, drawnRange);
|
newRange = NSIntersectionRange(selectedCharacterRange, drawnRange);
|
||||||
// Was there any overlapping with the selection?
|
// Was there any overlapping with the selection?
|
||||||
if ((selectedCharacterRange.length &&
|
if ((selectedCharacterRange.length &&
|
||||||
|
@ -3125,6 +3122,9 @@ scanRange(NSScanner *scanner, NSCharacterSet* aSet)
|
||||||
NSRect drawRect = [self rectForCharacterIndex: index];
|
NSRect drawRect = [self rectForCharacterIndex: index];
|
||||||
|
|
||||||
drawRect.size.width = 1;
|
drawRect.size.width = 1;
|
||||||
|
if (drawRect.size.height == 0)
|
||||||
|
drawRect.size.height = 12;
|
||||||
|
|
||||||
if (flag && color == nil)
|
if (flag && color == nil)
|
||||||
color = [NSColor blackColor];
|
color = [NSColor blackColor];
|
||||||
|
|
||||||
|
|
|
@ -3196,12 +3196,12 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (NSInterfaceStyle) interfaceStyle
|
- (NSInterfaceStyle) interfaceStyle
|
||||||
{
|
{
|
||||||
return interface_style;
|
return [super interfaceStyle];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setInterfaceStyle: (NSInterfaceStyle)aStyle
|
- (void) setInterfaceStyle: (NSInterfaceStyle)aStyle
|
||||||
{
|
{
|
||||||
interface_style = aStyle;
|
[super setInterfaceStyle: aStyle];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void*) windowHandle
|
- (void*) windowHandle
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue