This is TextView.m in view mode; [Download] [Up]
/*
* NeXThextris Copyright 1994 Mark Gritter, mgritter@gac.edu
*
* Permission to use, copy, modify, and distribute, this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the copyright holders be used in
* advertising or publicity pertaining to distribution of the software with
* specific, written prior permission, and that no fee is charged for further
* distribution of this software, or any modifications thereof. The copyright
* holder make no representations about the suitability of this software for
* any purpose. It is provided "as is" without express or implied warranty.
*
* THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA, PROFITS, QPA OR GPA, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
** TextView.m, implementation of scrolling text stuff for TextLab.
** Copyright 1989 NeXT, Inc. All Rights Reserved.
** Author: Bruce Blumberg
**
** You may freely copy, distribute and reuse the code in this example.
** NeXT disclaims any warranty of any kind, expressed or implied, as to
** its fitness for any particular use.
**
** Heavily modified by Mark Gritter, 1993.
**
*/
#import <appkit/appkit.h>
#import "TextView.h"
@implementation TextView:ScrollView
- initFrame:(const NXRect *)frameRect
{
NXRect rect = {0.0, 0.0, 0.0, 0.0};
/* initialize view */
[super initFrame:frameRect];
/* specify scrollbars and style*/
[[self setVertScrollerRequired:YES] setHorizScrollerRequired:NO];
[self setBorderType:NX_BEZEL];
[self getContentSize:&(rect.size)];
theText = [self newText:&rect];
[self setDocView:theText];
[theText setSel:0 :0];
theFont = [Font newFont:"Courier" size:12];
[theText setBackgroundGray:NX_LTGRAY];
[theText setFont:theFont];
height = [theText lineHeight];
[self setLineScroll:height];
[self setPageScroll:height];
// The following two lines allow the resizing of the scrollview
// to be passed down to the docView (in this case, the text view
// itself).
[contentView setAutoresizeSubviews:YES];
[contentView setAutosizing:NX_HEIGHTSIZABLE | NX_WIDTHSIZABLE];
return self;
}
- newText:(const NXRect *)frameRect
{
id text;
NXSize aSize = {1.0E38, 1.0E38};
text = [[Text alloc] initFrame:frameRect
text:NULL
alignment:NX_LEFTALIGNED];
[text setOpaque:YES];
[[[[[text notifyAncestorWhenFrameChanged:YES]
setVertResizable:YES]
setHorizResizable:NO]
setMonoFont:YES]
setDelegate:self];
[text setMinSize:&(frameRect->size)];
[text setMaxSize:&aSize];
[text setAutosizing:NX_HEIGHTSIZABLE | NX_WIDTHSIZABLE];
[text setCharFilter:NXEditorFilter];
return text;
}
- idText
{
return theText;
}
- setText:(char *)txt
{
[[theText setText:txt] sizeToFit];
return theText;
}
- addText:(char *)txt
{
int l = [theText textLength];
[[[theText setSel:l:l] replaceSel:txt] sizeToFit];
[vScroller setFloatValue:1.0];
[self perform:[vScroller action] with:vScroller];
return theText;
}
- printPSCode:sender
{
id smallerFont;
smallerFont = [Font newFont:"Courier" size:8];
[[theText setBackgroundGray:NX_WHITE] setFont:smallerFont];
[theText printPSCode:sender];
[[theText setFont:theFont] setBackgroundGray:NX_LTGRAY];
[smallerFont free];
[self update];
return self;
}
- setVertScroll:(float)val
{
[vScroller setFloatValue:val];
[self perform:[vScroller action] with:vScroller];
return vScroller;
}
- scrollLine:(int)line
{
NXPoint coord;
NXRect rect;
[contentView getDocVisibleRect:&rect];
coord.x = rect.origin.x;
coord.y = height * (line - 1);
[contentView rawScroll:&coord];
[self reflectScroll:contentView];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.