|
|
|
@ -108,18 +108,18 @@ Interface for a bunch of internal methods that need to be cleaned up.
|
|
|
|
|
/*
|
|
|
|
|
* Used to implement the blinking insertion point
|
|
|
|
|
*/
|
|
|
|
|
- (void) _blink: (NSTimer *)t;
|
|
|
|
|
-(void) _blink: (NSTimer *)t;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* these NSLayoutManager- like method is here only informally
|
|
|
|
|
*/
|
|
|
|
|
- (NSRect) rectForCharacterRange: (NSRange)aRange;
|
|
|
|
|
-(NSRect) rectForCharacterRange: (NSRange)aRange;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// GNU utility methods
|
|
|
|
|
//
|
|
|
|
|
- (void) copySelection;
|
|
|
|
|
- (void) pasteSelection;
|
|
|
|
|
-(void) copySelection;
|
|
|
|
|
-(void) pasteSelection;
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
// This class is a helper for keyed unarchiving only
|
|
|
|
@ -227,7 +227,7 @@ of the removed text view. It is also sent by -setTextContainer:.
|
|
|
|
|
This will be sent several times to the same text view for one change in
|
|
|
|
|
some cases, so it needs to be safe wrt. that.
|
|
|
|
|
*/
|
|
|
|
|
- (void) _updateMultipleTextViews
|
|
|
|
|
-(void) _updateMultipleTextViews
|
|
|
|
|
{
|
|
|
|
|
id oldNotifObject = _notifObject;
|
|
|
|
|
|
|
|
|
@ -288,7 +288,7 @@ directly from one textview to another - to allow subclasses to
|
|
|
|
|
override eg. -setEditable: to take some particular action when
|
|
|
|
|
editing is turned on or off.
|
|
|
|
|
*/
|
|
|
|
|
- (void) _syncTextViewsByCalling: (SEL)action
|
|
|
|
|
-(void) _syncTextViewsByCalling: (SEL)action
|
|
|
|
|
withFlag: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSArray *array;
|
|
|
|
@ -332,7 +332,7 @@ This must be called whenever the delegate changes (directly, through calls
|
|
|
|
|
to -setDelegate:, or indirectly due to changes in the text system, or being
|
|
|
|
|
decoded.
|
|
|
|
|
*/
|
|
|
|
|
- (void) _recacheDelegateResponses
|
|
|
|
|
-(void) _recacheDelegateResponses
|
|
|
|
|
{
|
|
|
|
|
SEL selector;
|
|
|
|
|
|
|
|
|
@ -362,7 +362,7 @@ decoded.
|
|
|
|
|
Called when our state needs updating due to external changes. Currently,
|
|
|
|
|
this happens when layout has been invalidated, and when we are resized.
|
|
|
|
|
*/
|
|
|
|
|
- (void) _updateState: (id)sender
|
|
|
|
|
-(void) _updateState: (id)sender
|
|
|
|
|
{
|
|
|
|
|
[self sizeToFit];
|
|
|
|
|
/* TODO: we don't have to redisplay the entire view */
|
|
|
|
@ -372,7 +372,7 @@ this happens when layout has been invalidated, and when we are resized.
|
|
|
|
|
[self _updateInputMethodState];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) _layoutManagerDidInvalidateLayout
|
|
|
|
|
-(void) _layoutManagerDidInvalidateLayout
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
We don't want to do the update right away, since the invalidation might
|
|
|
|
@ -486,7 +486,7 @@ If a text view is added to an empty text network, it keeps its attributes.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (NSTextContainer *) buildUpTextNetwork: (NSSize)aSize
|
|
|
|
|
-(NSTextContainer *) buildUpTextNetwork: (NSSize)aSize
|
|
|
|
|
{
|
|
|
|
|
NSTextContainer *textContainer;
|
|
|
|
|
NSLayoutManager *layoutManager;
|
|
|
|
@ -518,7 +518,7 @@ If a text view is added to an empty text network, it keeps its attributes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Designated initializer. */
|
|
|
|
|
- (id) initWithFrame: (NSRect)frameRect
|
|
|
|
|
-(id) initWithFrame: (NSRect)frameRect
|
|
|
|
|
textContainer: (NSTextContainer *)container
|
|
|
|
|
{
|
|
|
|
|
self = [super initWithFrame: frameRect];
|
|
|
|
@ -565,7 +565,7 @@ If a text view is added to an empty text network, it keeps its attributes.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (id) initWithFrame: (NSRect)frameRect
|
|
|
|
|
-(id) initWithFrame: (NSRect)frameRect
|
|
|
|
|
{
|
|
|
|
|
NSTextContainer *aTextContainer;
|
|
|
|
|
|
|
|
|
@ -595,7 +595,7 @@ NSTextView, and parts of their handling (including encoding and decoding)
|
|
|
|
|
were there. This has been fixed and the ivar:s moved here, but in a way
|
|
|
|
|
that makes decoding and encoding compatible with the old code.
|
|
|
|
|
*/
|
|
|
|
|
- (void) encodeWithCoder: (NSCoder *)aCoder
|
|
|
|
|
-(void) encodeWithCoder: (NSCoder *)aCoder
|
|
|
|
|
{
|
|
|
|
|
BOOL flag;
|
|
|
|
|
NSSize containerSize = [_textContainer containerSize];
|
|
|
|
@ -643,7 +643,7 @@ that makes decoding and encoding compatible with the old code.
|
|
|
|
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (id) initWithCoder: (NSCoder *)aDecoder
|
|
|
|
|
-(id) initWithCoder: (NSCoder *)aDecoder
|
|
|
|
|
{
|
|
|
|
|
self = [super initWithCoder: aDecoder];
|
|
|
|
|
|
|
|
|
@ -768,7 +768,7 @@ that makes decoding and encoding compatible with the old code.
|
|
|
|
|
return self;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) dealloc
|
|
|
|
|
-(void) dealloc
|
|
|
|
|
{
|
|
|
|
|
if (_tf.owns_text_network == YES)
|
|
|
|
|
{
|
|
|
|
@ -830,7 +830,7 @@ is hairy, and this is the only place where it happens.
|
|
|
|
|
TODO: Make sure the assumption holds; might need to add more dummy calls
|
|
|
|
|
to this method from the text container or layout manager.
|
|
|
|
|
*/
|
|
|
|
|
- (void) setTextContainer: (NSTextContainer *)container
|
|
|
|
|
-(void) setTextContainer: (NSTextContainer *)container
|
|
|
|
|
{
|
|
|
|
|
unsigned int i, c;
|
|
|
|
|
NSArray *tcs;
|
|
|
|
@ -894,22 +894,22 @@ to this method from the text container or layout manager.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) replaceTextContainer: (NSTextContainer *)newContainer
|
|
|
|
|
-(void) replaceTextContainer: (NSTextContainer *)newContainer
|
|
|
|
|
{
|
|
|
|
|
NSLog(@"TODO! [NSTextView -replaceTextContainer:] isn't implemented");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSTextContainer *) textContainer
|
|
|
|
|
-(NSTextContainer *) textContainer
|
|
|
|
|
{
|
|
|
|
|
return _textContainer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSLayoutManager *) layoutManager
|
|
|
|
|
-(NSLayoutManager *) layoutManager
|
|
|
|
|
{
|
|
|
|
|
return _layoutManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSTextStorage *) textStorage
|
|
|
|
|
-(NSTextStorage *) textStorage
|
|
|
|
|
{
|
|
|
|
|
return _textStorage;
|
|
|
|
|
}
|
|
|
|
@ -950,12 +950,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Delegate */
|
|
|
|
|
|
|
|
|
|
- (id) delegate
|
|
|
|
|
-(id) delegate
|
|
|
|
|
{
|
|
|
|
|
return _delegate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setDelegate: (id)anObject
|
|
|
|
|
-(void) setDelegate: (id)anObject
|
|
|
|
|
{
|
|
|
|
|
/* Code to allow sharing the delegate */
|
|
|
|
|
if (_tf.multiple_textviews && (IS_SYNCHRONIZING_DELEGATES == NO))
|
|
|
|
@ -1009,12 +1009,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Editable */
|
|
|
|
|
|
|
|
|
|
- (BOOL) isEditable
|
|
|
|
|
-(BOOL) isEditable
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_editable ? YES : NO);
|
|
|
|
|
return _tf.is_editable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setEditable: (BOOL)flag
|
|
|
|
|
-(void) setEditable: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.is_editable = flag;
|
|
|
|
@ -1036,12 +1036,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Selectable */
|
|
|
|
|
|
|
|
|
|
- (BOOL) isSelectable
|
|
|
|
|
-(BOOL) isSelectable
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_selectable ? YES : NO);
|
|
|
|
|
return _tf.is_selectable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setSelectable: (BOOL)flag
|
|
|
|
|
-(void) setSelectable: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.is_selectable = flag;
|
|
|
|
@ -1055,12 +1055,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Field editor */
|
|
|
|
|
|
|
|
|
|
- (BOOL) isFieldEditor
|
|
|
|
|
-(BOOL) isFieldEditor
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_field_editor ? YES : NO);
|
|
|
|
|
return _tf.is_field_editor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setFieldEditor: (BOOL)flag
|
|
|
|
|
-(void) setFieldEditor: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
[self setHorizontallyResizable: NO]; /* TODO: why? */
|
|
|
|
@ -1072,12 +1072,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Rich-text */
|
|
|
|
|
|
|
|
|
|
- (BOOL) isRichText
|
|
|
|
|
-(BOOL) isRichText
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_rich_text ? YES : NO);
|
|
|
|
|
return _tf.is_rich_text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setRichText: (BOOL)flag
|
|
|
|
|
-(void) setRichText: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.is_rich_text = flag;
|
|
|
|
@ -1093,12 +1093,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Imports graphics */
|
|
|
|
|
|
|
|
|
|
- (BOOL) importsGraphics
|
|
|
|
|
-(BOOL) importsGraphics
|
|
|
|
|
{
|
|
|
|
|
return (_tf.imports_graphics ? YES : NO);
|
|
|
|
|
return _tf.imports_graphics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setImportsGraphics: (BOOL)flag
|
|
|
|
|
-(void) setImportsGraphics: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.imports_graphics = flag;
|
|
|
|
@ -1112,13 +1112,13 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Uses ruler */
|
|
|
|
|
|
|
|
|
|
- (BOOL) usesRuler
|
|
|
|
|
-(BOOL) usesRuler
|
|
|
|
|
{
|
|
|
|
|
return (_tf.uses_ruler ? YES : NO);
|
|
|
|
|
return _tf.uses_ruler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* TODO: set ruler visible to NO if flag==NO? */
|
|
|
|
|
- (void) setUsesRuler: (BOOL)flag
|
|
|
|
|
-(void) setUsesRuler: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.uses_ruler = flag;
|
|
|
|
@ -1127,12 +1127,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Ruler visible (TODO: is this really supposed to be shared??) */
|
|
|
|
|
|
|
|
|
|
- (BOOL) isRulerVisible
|
|
|
|
|
-(BOOL) isRulerVisible
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_ruler_visible ? YES : NO);
|
|
|
|
|
return _tf.is_ruler_visible;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setRulerVisible: (BOOL)flag
|
|
|
|
|
-(void) setRulerVisible: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSScrollView *sv;
|
|
|
|
|
|
|
|
|
@ -1149,12 +1149,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Uses font panel */
|
|
|
|
|
|
|
|
|
|
- (BOOL) usesFontPanel
|
|
|
|
|
-(BOOL) usesFontPanel
|
|
|
|
|
{
|
|
|
|
|
return (_tf.uses_font_panel ? YES : NO);
|
|
|
|
|
return _tf.uses_font_panel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setUsesFontPanel: (BOOL)flag
|
|
|
|
|
-(void) setUsesFontPanel: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.uses_font_panel = flag;
|
|
|
|
@ -1163,12 +1163,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Smart insert/delete */
|
|
|
|
|
|
|
|
|
|
- (BOOL) smartInsertDeleteEnabled
|
|
|
|
|
-(BOOL) smartInsertDeleteEnabled
|
|
|
|
|
{
|
|
|
|
|
return (_tf.smart_insert_delete ? YES : NO);
|
|
|
|
|
return _tf.smart_insert_delete;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setSmartInsertDeleteEnabled: (BOOL)flag
|
|
|
|
|
-(void) setSmartInsertDeleteEnabled: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.smart_insert_delete = flag;
|
|
|
|
@ -1177,12 +1177,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Undo */
|
|
|
|
|
|
|
|
|
|
- (BOOL) allowsUndo
|
|
|
|
|
-(BOOL) allowsUndo
|
|
|
|
|
{
|
|
|
|
|
return (_tf.allows_undo ? YES : NO);
|
|
|
|
|
return _tf.allows_undo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setAllowsUndo: (BOOL)flag
|
|
|
|
|
-(void) setAllowsUndo: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSTEXTVIEW_SYNC;
|
|
|
|
|
_tf.allows_undo = flag;
|
|
|
|
@ -1192,14 +1192,14 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
/* Continuous spell checking */
|
|
|
|
|
|
|
|
|
|
/* TODO */
|
|
|
|
|
- (BOOL) isContinuousSpellCheckingEnabled
|
|
|
|
|
-(BOOL) isContinuousSpellCheckingEnabled
|
|
|
|
|
{
|
|
|
|
|
NSLog(@"Method %s is not implemented for class %s",
|
|
|
|
|
__PRETTY_FUNCTION__, "NSTextView");
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setContinuousSpellCheckingEnabled: (BOOL)flag
|
|
|
|
|
-(void) setContinuousSpellCheckingEnabled: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
NSLog(@"Method %s is not implemented for class %s",
|
|
|
|
|
__PRETTY_FUNCTION__, "NSTextView");
|
|
|
|
@ -1213,12 +1213,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/**** Basic view stuff ****/
|
|
|
|
|
|
|
|
|
|
- (BOOL) isFlipped
|
|
|
|
|
-(BOOL) isFlipped
|
|
|
|
|
{
|
|
|
|
|
return YES;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) isOpaque
|
|
|
|
|
-(BOOL) isOpaque
|
|
|
|
|
{
|
|
|
|
|
if (_tf.draws_background == NO
|
|
|
|
|
|| _backgroundColor == nil
|
|
|
|
@ -1228,12 +1228,12 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
return YES;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) needsPanelToBecomeKey
|
|
|
|
|
-(BOOL) needsPanelToBecomeKey
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_editable ? YES : NO);
|
|
|
|
|
return _tf.is_editable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) acceptsFirstResponder
|
|
|
|
|
-(BOOL) acceptsFirstResponder
|
|
|
|
|
{
|
|
|
|
|
if (_tf.is_selectable)
|
|
|
|
|
{
|
|
|
|
@ -1245,7 +1245,7 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) resignFirstResponder
|
|
|
|
|
-(BOOL) resignFirstResponder
|
|
|
|
|
{
|
|
|
|
|
/* Check if another text view attached to the same layout manager is the
|
|
|
|
|
new first responder. If so, we always let it become first responder, and
|
|
|
|
@ -1317,7 +1317,7 @@ to make sure syncing is handled properly in all cases.
|
|
|
|
|
|
|
|
|
|
/* Note that when this method is called, editing might already have
|
|
|
|
|
started (in another text view attached to the same layout manager). */
|
|
|
|
|
- (BOOL) becomeFirstResponder
|
|
|
|
|
-(BOOL) becomeFirstResponder
|
|
|
|
|
{
|
|
|
|
|
if (_tf.is_selectable == NO)
|
|
|
|
|
{
|
|
|
|
@ -1336,7 +1336,7 @@ started (in another text view attached to the same layout manager). */
|
|
|
|
|
return YES;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) resignKeyWindow
|
|
|
|
|
-(void) resignKeyWindow
|
|
|
|
|
{
|
|
|
|
|
if ([self shouldDrawInsertionPoint])
|
|
|
|
|
{
|
|
|
|
@ -1344,7 +1344,7 @@ started (in another text view attached to the same layout manager). */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) becomeKeyWindow
|
|
|
|
|
-(void) becomeKeyWindow
|
|
|
|
|
{
|
|
|
|
|
if ([self shouldDrawInsertionPoint])
|
|
|
|
|
{
|
|
|
|
@ -1355,17 +1355,17 @@ started (in another text view attached to the same layout manager). */
|
|
|
|
|
|
|
|
|
|
/**** Unshared attributes ****/
|
|
|
|
|
|
|
|
|
|
- (NSColor *) backgroundColor
|
|
|
|
|
-(NSColor *) backgroundColor
|
|
|
|
|
{
|
|
|
|
|
return _backgroundColor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) drawsBackground
|
|
|
|
|
-(BOOL) drawsBackground
|
|
|
|
|
{
|
|
|
|
|
return (_tf.draws_background ? YES : NO);
|
|
|
|
|
return _tf.draws_background;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setBackgroundColor: (NSColor *)color
|
|
|
|
|
-(void) setBackgroundColor: (NSColor *)color
|
|
|
|
|
{
|
|
|
|
|
if (![_backgroundColor isEqual: color])
|
|
|
|
|
{
|
|
|
|
@ -1374,7 +1374,7 @@ started (in another text view attached to the same layout manager). */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setDrawsBackground: (BOOL)flag
|
|
|
|
|
-(void) setDrawsBackground: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
if (_tf.draws_background != flag)
|
|
|
|
|
{
|
|
|
|
@ -1384,34 +1384,34 @@ started (in another text view attached to the same layout manager). */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) setInsertionPointColor: (NSColor *)color
|
|
|
|
|
-(void) setInsertionPointColor: (NSColor *)color
|
|
|
|
|
{
|
|
|
|
|
ASSIGN(_insertionPointColor, color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSColor *) insertionPointColor
|
|
|
|
|
-(NSColor *) insertionPointColor
|
|
|
|
|
{
|
|
|
|
|
return _insertionPointColor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) setSelectedTextAttributes: (NSDictionary *)attributeDictionary
|
|
|
|
|
-(void) setSelectedTextAttributes: (NSDictionary *)attributeDictionary
|
|
|
|
|
{
|
|
|
|
|
ASSIGN(_selectedTextAttributes, attributeDictionary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSDictionary *) selectedTextAttributes
|
|
|
|
|
-(NSDictionary *) selectedTextAttributes
|
|
|
|
|
{
|
|
|
|
|
return _selectedTextAttributes;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) setMarkedTextAttributes: (NSDictionary *)attributeDictionary
|
|
|
|
|
-(void) setMarkedTextAttributes: (NSDictionary *)attributeDictionary
|
|
|
|
|
{
|
|
|
|
|
ASSIGN(_markedTextAttributes, attributeDictionary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSDictionary *) markedTextAttributes
|
|
|
|
|
-(NSDictionary *) markedTextAttributes
|
|
|
|
|
{
|
|
|
|
|
return _markedTextAttributes;
|
|
|
|
|
}
|
|
|
|
@ -1443,49 +1443,49 @@ TODO: Check and fix bounds vs. frame issues.
|
|
|
|
|
would be very tricky), so is it worth having them there at all? The docs are
|
|
|
|
|
pretty clear about what happens (ie. breakage) if you set the flags
|
|
|
|
|
incorrectly. */
|
|
|
|
|
- (void) setHorizontallyResizable: (BOOL)flag
|
|
|
|
|
-(void) setHorizontallyResizable: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
/* Safety call */
|
|
|
|
|
[_textContainer setWidthTracksTextView: !flag];
|
|
|
|
|
|
|
|
|
|
_tf.is_horizontally_resizable = flag;
|
|
|
|
|
}
|
|
|
|
|
- (void) setVerticallyResizable: (BOOL)flag
|
|
|
|
|
-(void) setVerticallyResizable: (BOOL)flag
|
|
|
|
|
{
|
|
|
|
|
/* Safety call */
|
|
|
|
|
[_textContainer setHeightTracksTextView: !flag];
|
|
|
|
|
|
|
|
|
|
_tf.is_vertically_resizable = flag;
|
|
|
|
|
}
|
|
|
|
|
- (BOOL) isHorizontallyResizable
|
|
|
|
|
-(BOOL) isHorizontallyResizable
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_horizontally_resizable ? YES : NO);
|
|
|
|
|
return _tf.is_horizontally_resizable;
|
|
|
|
|
}
|
|
|
|
|
- (BOOL) isVerticallyResizable
|
|
|
|
|
-(BOOL) isVerticallyResizable
|
|
|
|
|
{
|
|
|
|
|
return (_tf.is_vertically_resizable ? YES : NO);
|
|
|
|
|
return _tf.is_vertically_resizable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (NSSize) maxSize
|
|
|
|
|
-(NSSize) maxSize
|
|
|
|
|
{
|
|
|
|
|
return _maxSize;
|
|
|
|
|
}
|
|
|
|
|
- (NSSize) minSize
|
|
|
|
|
-(NSSize) minSize
|
|
|
|
|
{
|
|
|
|
|
return _minSize;
|
|
|
|
|
}
|
|
|
|
|
- (void) setMaxSize: (NSSize)newMaxSize
|
|
|
|
|
-(void) setMaxSize: (NSSize)newMaxSize
|
|
|
|
|
{
|
|
|
|
|
_maxSize = newMaxSize;
|
|
|
|
|
}
|
|
|
|
|
- (void) setMinSize: (NSSize)newMinSize
|
|
|
|
|
-(void) setMinSize: (NSSize)newMinSize
|
|
|
|
|
{
|
|
|
|
|
_minSize = newMinSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) sizeToFit
|
|
|
|
|
-(void) sizeToFit
|
|
|
|
|
{
|
|
|
|
|
NSSize size;
|
|
|
|
|
|
|
|
|
@ -1524,7 +1524,7 @@ used instead. Should test on OS to find out what the proper behavior is.
|
|
|
|
|
UPDATE: current behavior is correct, but must be documented properly
|
|
|
|
|
before this TODO can be removed
|
|
|
|
|
*/
|
|
|
|
|
- (void) setConstrainedFrameSize: (NSSize)desiredSize
|
|
|
|
|
-(void) setConstrainedFrameSize: (NSSize)desiredSize
|
|
|
|
|
{
|
|
|
|
|
NSSize newSize;
|
|
|
|
|
NSSize effectiveMinSize = _minSize;
|
|
|
|
@ -1575,7 +1575,7 @@ The text container origin is the origin of the text container's coordinate
|
|
|
|
|
system in our coordinate system.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
- (void) setTextContainerInset: (NSSize)inset
|
|
|
|
|
-(void) setTextContainerInset: (NSSize)inset
|
|
|
|
|
{
|
|
|
|
|
_textContainerInset = inset;
|
|
|
|
|
[self invalidateTextContainerOrigin];
|
|
|
|
@ -1585,12 +1585,12 @@ system in our coordinate system.
|
|
|
|
|
object: self];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSSize) textContainerInset
|
|
|
|
|
-(NSSize) textContainerInset
|
|
|
|
|
{
|
|
|
|
|
return _textContainerInset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSPoint) textContainerOrigin
|
|
|
|
|
-(NSPoint) textContainerOrigin
|
|
|
|
|
{
|
|
|
|
|
return _textContainerOrigin;
|
|
|
|
|
}
|
|
|
|
@ -1601,7 +1601,7 @@ really see what it did, and I didn't see anything in the docs that imply
|
|
|
|
|
that anything complex needs to be done, so I removed it. Should double-check
|
|
|
|
|
and bring it back if necessary.
|
|
|
|
|
*/
|
|
|
|
|
- (void) invalidateTextContainerOrigin
|
|
|
|
|
-(void) invalidateTextContainerOrigin
|
|
|
|
|
{
|
|
|
|
|
_textContainerOrigin.x = NSMinX(_bounds);
|
|
|
|
|
_textContainerOrigin.x += _textContainerInset.width;
|
|
|
|
@ -1620,7 +1620,7 @@ here. */
|
|
|
|
|
|
|
|
|
|
/* TODO: currently no support for marked text */
|
|
|
|
|
|
|
|
|
|
- (NSAttributedString *) attributedSubstringFromRange: (NSRange)theRange
|
|
|
|
|
-(NSAttributedString *) attributedSubstringFromRange: (NSRange)theRange
|
|
|
|
|
{
|
|
|
|
|
if (theRange.location >= [_textStorage length])
|
|
|
|
|
return nil;
|
|
|
|
@ -1633,7 +1633,7 @@ here. */
|
|
|
|
|
TODO: make sure this is only called when _layoutManager is known non-nil,
|
|
|
|
|
or add guards
|
|
|
|
|
*/
|
|
|
|
|
- (unsigned int) characterIndexForPoint: (NSPoint)point
|
|
|
|
|
-(unsigned int) characterIndexForPoint: (NSPoint)point
|
|
|
|
|
{
|
|
|
|
|
unsigned index;
|
|
|
|
|
float fraction;
|
|
|
|
@ -1655,35 +1655,35 @@ or add guards
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSRange) markedRange
|
|
|
|
|
-(NSRange) markedRange
|
|
|
|
|
{
|
|
|
|
|
return NSMakeRange(NSNotFound, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setMarkedText: (NSString *)aString selectedRange: (NSRange)selRange
|
|
|
|
|
-(void) setMarkedText: (NSString *)aString selectedRange: (NSRange)selRange
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL) hasMarkedText
|
|
|
|
|
-(BOOL) hasMarkedText
|
|
|
|
|
{
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) unmarkText
|
|
|
|
|
-(void) unmarkText
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSArray *) validAttributesForMarkedText
|
|
|
|
|
-(NSArray *) validAttributesForMarkedText
|
|
|
|
|
{
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (long int) conversationIdentifier
|
|
|
|
|
-(long int) conversationIdentifier
|
|
|
|
|
{
|
|
|
|
|
return (long int)_textStorage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSRect) firstRectForCharacterRange: (NSRange)theRange
|
|
|
|
|
-(NSRect) firstRectForCharacterRange: (NSRange)theRange
|
|
|
|
|
{
|
|
|
|
|
unsigned int rectCount = 0; /* If there's no layout manager, it'll be 0 after the call too. */
|
|
|
|
|
NSRect *rects = [_layoutManager
|
|
|
|
@ -1700,7 +1700,7 @@ or add guards
|
|
|
|
|
|
|
|
|
|
/* Unlike NSResponder, we should _not_ send the selector down the responder
|
|
|
|
|
chain if we can't handle it. */
|
|
|
|
|
- (void) doCommandBySelector: (SEL)aSelector
|
|
|
|
|
-(void) doCommandBySelector: (SEL)aSelector
|
|
|
|
|
{
|
|
|
|
|
if (!_layoutManager)
|
|
|
|
|
{
|
|
|
|
@ -1731,7 +1731,7 @@ attributes.
|
|
|
|
|
|
|
|
|
|
This method is for user changes; see NSTextView_actions.m.
|
|
|
|
|
*/
|
|
|
|
|
- (void) insertText: (id)insertString
|
|
|
|
|
-(void) insertText: (id)insertString
|
|
|
|
|
{
|
|
|
|
|
NSRange insertRange = [self rangeForUserTextChange];
|
|
|
|
|
NSString *string;
|
|
|
|
@ -1855,7 +1855,7 @@ GNUstep extension. Like the above, but uses the attributes from the
|
|
|
|
|
string if the text view is rich-text, and otherwise the typing
|
|
|
|
|
attributes.
|
|
|
|
|
*/
|
|
|
|
|
- (void) replaceCharactersInRange: (NSRange)aRange
|
|
|
|
|
-(void) replaceCharactersInRange: (NSRange)aRange
|
|
|
|
|
withAttributedString: (NSAttributedString *)aString
|
|
|
|
|
{
|
|
|
|
|
if (aRange.location == NSNotFound) /* TODO: throw exception instead? */
|
|
|
|
@ -1886,7 +1886,7 @@ the attributes for the range, and do not update the typing attributes.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) setFont: (NSFont *)font
|
|
|
|
|
-(void) setFont: (NSFont *)font
|
|
|
|
|
{
|
|
|
|
|
if (!font)
|
|
|
|
|
return;
|
|
|
|
@ -1898,7 +1898,7 @@ the attributes for the range, and do not update the typing attributes.
|
|
|
|
|
forKey: NSFontAttributeName];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setFont: (NSFont *)font range: (NSRange)aRange
|
|
|
|
|
-(void) setFont: (NSFont *)font range: (NSRange)aRange
|
|
|
|
|
{
|
|
|
|
|
if (!_tf.is_rich_text || !font)
|
|
|
|
|
return;
|
|
|
|
@ -1909,7 +1909,7 @@ the attributes for the range, and do not update the typing attributes.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) setAlignment: (NSTextAlignment)alignment
|
|
|
|
|
-(void) setAlignment: (NSTextAlignment)alignment
|
|
|
|
|
{
|
|
|
|
|
NSParagraphStyle *style;
|
|
|
|
|
NSMutableParagraphStyle *mstyle;
|
|
|
|
@ -1930,7 +1930,7 @@ the attributes for the range, and do not update the typing attributes.
|
|
|
|
|
DESTROY(mstyle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) setAlignment: (NSTextAlignment)alignment
|
|
|
|
|
-(void) setAlignment: (NSTextAlignment)alignment
|
|
|
|
|
range: (NSRange)range
|
|
|
|
|
{
|
|
|
|
|
if (!_tf.is_rich_text)
|
|
|
|
@ -1981,28 +1981,28 @@ the attributes for the range, and do not update the typing attributes.
|
|
|
|
|
|
|
|
|
|
/**** Text access methods ****/
|
|
|
|
|
|
|
|
|
|
- (NSData *) RTFDFromRange: (NSRange)aRange
|
|
|
|
|
-(NSData *) RTFDFromRange: (NSRange)aRange
|
|
|
|
|
{
|
|
|
|
|
return [_textStorage RTFDFromRange: aRange documentAttributes: nil];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSData *) RTFFromRange: (NSRange)aRange
|
|
|
|
|
-(NSData *) RTFFromRange: (NSRange)aRange
|
|
|
|
|
{
|
|
|
|
|
return [_textStorage RTFFromRange: aRange documentAttributes: nil];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSString *) string
|
|
|
|
|
-(NSString *) string
|
|
|
|
|
{
|
|
|
|
|
return [_textStorage string];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (unsigned) textLength
|
|
|
|
|
-(unsigned) textLength
|
|
|
|
|
{
|
|
|
|
|
return [_textStorage length];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (NSFont *) font
|
|
|
|
|
-(NSFont *) font
|
|
|
|
|
{
|
|
|
|
|
if ([_textStorage length] > 0)
|
|
|
|
|
{
|
|
|
|
@ -2023,13 +2023,13 @@ Since the alignment of the typing attributes will always be the same as the
|
|
|
|
|
alignment of the first selected paragraph, we can simply return the typing
|
|
|
|
|
attributes' alignment. (TODO: double-check this assumption)
|
|
|
|
|
*/
|
|
|
|
|
- (NSTextAlignment) alignment
|
|
|
|
|
-(NSTextAlignment) alignment
|
|
|
|
|
{
|
|
|
|
|
return [[_layoutManager->_typingAttributes objectForKey: NSParagraphStyleAttributeName]
|
|
|
|
|
alignment];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSColor *) textColor
|
|
|
|
|
-(NSColor *) textColor
|
|
|
|
|
{
|
|
|
|
|
if ([_textStorage length] > 0)
|
|
|
|
|
{
|
|
|
|
@ -2050,7 +2050,7 @@ TODO:
|
|
|
|
|
Move to NSTextView_actions.m?
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
- (void) copy: (id)sender
|
|
|
|
|
-(void) copy: (id)sender
|
|
|
|
|
{
|
|
|
|
|
NSMutableArray *types = [NSMutableArray array];
|
|
|
|
|
|
|
|
|
@ -2067,7 +2067,7 @@ Move to NSTextView_actions.m?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Copy the current font to the font pasteboard */
|
|
|
|
|
- (void) copyFont: (id)sender
|
|
|
|
|
-(void) copyFont: (id)sender
|
|
|
|
|
{
|
|
|
|
|
NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSFontPboard];
|
|
|
|
|
|
|
|
|
@ -2076,7 +2076,7 @@ Move to NSTextView_actions.m?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Copy the current ruler settings to the ruler pasteboard */
|
|
|
|
|
- (void) copyRuler: (id)sender
|
|
|
|
|
-(void) copyRuler: (id)sender
|
|
|
|
|
{
|
|
|
|
|
NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSRulerPboard];
|
|
|
|
|
|
|
|
|
@ -2085,12 +2085,12 @@ Move to NSTextView_actions.m?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void) paste: (id)sender
|
|
|
|
|
-(void) paste: (id)sender
|
|
|
|
|
{
|
|
|
|
|
[self readSelectionFromPasteboard: [NSPasteboard generalPasteboard]];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) pasteFont: (id)sender
|
|
|
|
|
-(void) pasteFont: (id)sender
|
|
|
|
|
{
|
|
|
|
|
NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSFontPboard];
|
|
|
|
|
|
|
|
|
@ -2098,7 +2098,7 @@ Move to NSTextView_actions.m?
|
|
|
|
|
type: NSFontPboardType];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) pasteRuler: (id)sender
|
|
|
|
|
-(void) pasteRuler: (id)sender
|
|
|
|
|
{
|
|
|
|
|
NSPasteboard *pb = [NSPasteboard pasteboardWithName: NSRulerPboard];
|
|
|
|
|
|
|
|
|
@ -2106,13 +2106,13 @@ Move to NSTextView_actions.m?
|
|
|
|
|
type: NSRulerPboardType];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) pasteAsPlainText: (id)sender
|
|
|
|
|
-(void) pasteAsPlainText: (id)sender
|
|
|
|
|
{
|
|
|
|
|
[self readSelectionFromPasteboard: [NSPasteboard generalPasteboard]
|
|
|
|
|
type: NSStringPboardType];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) pasteAsRichText: (id)sender
|
|
|
|
|
-(void) pasteAsRichText: (id)sender
|
|
|
|
|
{
|
|
|
|
|
[self readSelectionFromPasteboard: [NSPasteboard generalPasteboard]
|
|
|
|
|
type: NSRTFPboardType];
|
|
|
|
@ -2175,7 +2175,7 @@ In -didChangeText, if we still aren't the first responder, we send the
|
|
|
|
|
TextDidEndEditing notification _without_ asking the delegate
|
|
|
|
|
(-; since we can't handle a NO return).
|
|
|
|
|
*/
|
|
|
|
|
- (BOOL) shouldChangeTextInRange: (NSRange)affectedCharRange
|
|
|
|
|
-(BOOL) shouldChangeTextInRange: (NSRange)affectedCharRange
|
|
|
|
|
replacementString: (NSString *)replacementString
|
|
|
|
|
{
|
|
|
|
|
if (_tf.is_editable == NO)
|
|
|
|
@ -2212,7 +2212,7 @@ TextDidEndEditing notification _without_ asking the delegate
|
|
|
|
|
/*
|
|
|
|
|
After each user-induced change, this method should be called.
|
|
|
|
|
*/
|
|
|
|
|
- (void) didChangeText
|
|
|
|
|
-(void) didChangeText
|
|
|
|
|
{
|
|
|
|
|
[self scrollRangeToVisible: [self selectedRange]];
|
|
|
|
|
[notificationCenter postNotificationName: NSTextDidChangeNotification
|
|
|
|
@ -2239,7 +2239,7 @@ After each user-induced change, this method should be called.
|
|
|
|
|
Returns the ranges to which various kinds of user changes should apply.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
- (NSRange) rangeForUserCharacterAttributeChange
|
|
|
|
|
-(NSRange) rangeForUserCharacterAttributeChange
|
|
|
|
|
{
|
|
|
|
|
if (!_tf.is_editable || !_tf.uses_font_panel || !_layoutManager)
|
|
|
|
|
{
|
|
|
|
@ -2256,7 +2256,7 @@ Returns the ranges to which various kinds of user changes should apply.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSRange) rangeForUserParagraphAttributeChange
|
|
|
|
|
-(NSRange) rangeForUserParagraphAttributeChange
|
|
|
|
|
{
|
|
|
|
|
if (!_tf.is_editable || !_tf.uses_ruler || !_layoutManager)
|
|
|
|
|
{
|
|
|
|
@ -2274,7 +2274,7 @@ Returns the ranges to which various kinds of user changes should apply.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSRange) rangeForUserTextChange
|
|
|
|
|
-(NSRange) rangeForUserTextChange
|
|
|
|
|
{
|
|
|
|
|
if (!_tf.is_editable || !_layoutManager)
|
|
|
|
|
{
|
|
|
|
@ -2291,7 +2291,7 @@ Returns the ranges to which various kinds of user changes should apply.
|
|
|
|
|
/*
|
|
|
|
|
Scroll so that the beginning of the range is visible.
|
|
|
|
|
*/
|
|
|
|
|
- (void) scrollRangeToVisible: (NSRange)aRange
|
|
|
|
|
-(void) scrollRangeToVisible: (NSRange)aRange
|
|
|
|
|
{
|
|
|
|
|
NSRect rect, r;
|
|
|
|
|
NSView *cv;
|
|
|
|
@ -2436,10 +2436,10 @@ Scroll so that the beginning of the range is visible.
|
|
|
|
|
(XIM, currently). Backends may override these in categories with the real
|
|
|
|
|
(backend-specific) handling. */
|
|
|
|
|
|
|
|
|
|
- (void) _updateInputMethodState
|
|
|
|
|
-(void) _updateInputMethodState
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
- (void) _updateInputMethodWithInsertionPoint: (NSPoint)insertionPoint
|
|
|
|
|
-(void) _updateInputMethodWithInsertionPoint: (NSPoint)insertionPoint
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -2666,27 +2666,27 @@ This method is for user changes; see NSTextView_actions.m.
|
|
|
|
|
|
|
|
|
|
/**** Smart insert/delete ****/
|
|
|
|
|
|
|
|
|
|
- (NSRange) smartDeleteRangeForProposedRange: (NSRange)proposedCharRange
|
|
|
|
|
-(NSRange) smartDeleteRangeForProposedRange: (NSRange)proposedCharRange
|
|
|
|
|
{
|
|
|
|
|
/* TODO */
|
|
|
|
|
return proposedCharRange;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSString *)smartInsertAfterStringForString: (NSString *)aString
|
|
|
|
|
-(NSString *)smartInsertAfterStringForString: (NSString *)aString
|
|
|
|
|
replacingRange: (NSRange)charRange
|
|
|
|
|
{
|
|
|
|
|
/* TODO */
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSString *)smartInsertBeforeStringForString: (NSString *)aString
|
|
|
|
|
-(NSString *)smartInsertBeforeStringForString: (NSString *)aString
|
|
|
|
|
replacingRange: (NSRange)charRange
|
|
|
|
|
{
|
|
|
|
|
/* TODO */
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) smartInsertForString: (NSString *)aString
|
|
|
|
|
-(void) smartInsertForString: (NSString *)aString
|
|
|
|
|
replacingRange: (NSRange)charRange
|
|
|
|
|
beforeString: (NSString **)beforeString
|
|
|
|
|
afterString: (NSString **)afterString
|
|
|
|
@ -3626,7 +3626,7 @@ shouldRemoveMarker: (NSRulerMarker *)marker
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (int) spellCheckerDocumentTag
|
|
|
|
|
-(int) spellCheckerDocumentTag
|
|
|
|
|
{
|
|
|
|
|
if (!_spellCheckerDocumentTag)
|
|
|
|
|
_spellCheckerDocumentTag = [NSSpellChecker uniqueSpellDocumentTag];
|
|
|
|
@ -4195,7 +4195,7 @@ other than copy/paste or dragging. */
|
|
|
|
|
|
|
|
|
|
/**** Event handling ****/
|
|
|
|
|
|
|
|
|
|
- (void) mouseDown: (NSEvent *)theEvent
|
|
|
|
|
-(void) mouseDown: (NSEvent *)theEvent
|
|
|
|
|
{
|
|
|
|
|
NSSelectionAffinity affinity = [self selectionAffinity];
|
|
|
|
|
NSSelectionGranularity granularity = NSSelectByCharacter;
|
|
|
|
@ -4449,7 +4449,7 @@ other than copy/paste or dragging. */
|
|
|
|
|
[self setSelectionGranularity: granularity];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void) keyDown: (NSEvent *)theEvent
|
|
|
|
|
-(void) keyDown: (NSEvent *)theEvent
|
|
|
|
|
{
|
|
|
|
|
// If not editable, don't recognize the key down
|
|
|
|
|
if (_tf.is_editable == NO)
|
|
|
|
@ -4464,7 +4464,7 @@ other than copy/paste or dragging. */
|
|
|
|
|
|
|
|
|
|
/* Bind other mouse up to pasteSelection. This should be done via
|
|
|
|
|
configuation! */
|
|
|
|
|
- (void) otherMouseUp: (NSEvent *)theEvent
|
|
|
|
|
-(void) otherMouseUp: (NSEvent *)theEvent
|
|
|
|
|
{
|
|
|
|
|
// TODO: Should we change the insertion point, based on the event position?
|
|
|
|
|
[self pasteSelection];
|
|
|
|
|