ftp.nice.ch/pub/next/graphics/viewer/ImagePortfolio.1.45.s.tar.gz#/ImagePortfolio_v1.45_src/apputils.subproj/ScrollText.h

This is ScrollText.h in view mode; [Download] [Up]

// -------------------------------------------------------------------------------------
// ScrollText.h
// Author: Martin D. Flynn
// Description:
// This class provide a full-featured set of utilities to handle printing to a Text
// object within a ScrollView.  This includes the ability to change the text font and 
// color of the text printed to the Text object.  This class will also handle text sent
// to it from any secondary thread.  It will automatically send the data to be printed 
// to the main thread to be printed into the Text object (only if objectThreadPerform
// is compiled with the application).
// -------------------------------------------------------------------------------------
// Permission is granted to freely redistribute this source code, and to use fragments
// of this code in your own applications if you find them to be useful.  This class,
// along with the source code, come with no warranty of any kind, and the user assumes
// all responsibility for its use.
// -------------------------------------------------------------------------------------
// example:
//
//   /* scrollview outlet */
//   - setMyScrollView:anObject
//     {
//     myTextView = [ScrollText newScrollText:anObject];
//     [myTextView setAutoLineFeed:NO]; // default
//     return self;
//     }
//
//   /* display formatted error message */
//   - displayError:(char *)textError
//     {
//     textPrintf(myTextView, "ERROR: %s\n", textError);
//     return self;
//     }
//
// -------------------------------------------------------------------------------------
#import <objc/Object.h>

// --------------------------------------------------------------------------------
// formatted text size limit for 'textPrintf'
#define         textStringSIZE          4096    // actual size cannot be known

// --------------------------------------------------------------------------------
// method name synonyms
#define         setAutoLF               setAutoLineFeed

// --------------------------------------------------------------------------------
// errors passed by 'commandDidComplete:withError:' via 'runCommand:...'
// Note: these codes may be shared by the running command which executes an exit(#)
#define			RUNCMD_STOPPED			-1		// command stopped/aborted
#define			RUNCMD_SUCCESS			0		// executed/completed successfully
#define			RUNCMD_EXEC				255		// cannot execute execl shell

// -------------------------------------------------------------------------------------
// structures used internal to ScrollText

/* text attributes */
typedef struct textAttr_s {
	id					fontId;
	int					colorMode;		// 0=none, 1=gray, 2=color
	NXColor				color;			// contains only gray if mode=1
} textAttr_t;

// scroll text data queue
typedef struct textQueue_s {
	char          		*record;
	textAttr_t			attr;
	void          		*next;
} textQueue_t;

// -------------------------------------------------------------------------------------
// RunServer support
@protocol RemoteClient		// sent by server to client
- (oneway void)commandOutput:(const char*)buffer len:(int)length;
- (oneway void)commandDidCompleteWithError:(int)errorCode;
@end

// --------------------------------------------------------------------------------
@interface ScrollText : Object <RemoteClient>
{

	id					delegate;					// delegate for RunServer support

	id					scrollView;					// scroll view object
	id					textView;					// text view object
	
	textAttr_t			runAttr;					// newly added text attributes
  
	BOOL				wasEditable;				// scrollView was editable
	BOOL				autoLf;						// auto linefeed mode
  
	mutex_t				queueMutex;					// text queue mutex
	textQueue_t			*queueData;					// pointer to front of queue
	textQueue_t			*queueBack;					// pointer to end of queue

	int					cmdChild;					// command execution
	int					inputDescriptor;			// input pipe

}

// --------------------------------------------------------------------------------
+ newScrollText:anObject;
//  Creates a new ScrollText object to handle text scrolling.  anObject must be
//  a ScrollView object which has a Text content view.  This is compatible
//  with the outlet provided by the text scroll view object in Interface Builder.
//
// --------------------------------------------------------------------------------
- setDelegate:aDelegate;
//  Currently used for RunServer support.  Returns self.
//
// --------------------------------------------------------------------------------
- setAutoLineFeed:(BOOL)mode;
//  Sets the autoLineFeed options.  If set to YES, then a newLine will be sent
//  after each string written to the scroll text.  The default is NO. 
//
// --------------------------------------------------------------------------------
- docView;
//  Returns the ScrollView docView.
//
// --------------------------------------------------------------------------------
- scrollView;
//  Returns the ScrollView id.
//
// --------------------------------------------------------------------------------
- setTextAttributeFont:fontId;
- setTextAttributeGray:(float)aGray;
- setTextAttributeColor:(NXColor)aColor;
//  Set RTF font/gray run attributes for newly added text.
//
// --------------------------------------------------------------------------------
- setTabStops:(float*)tabArray count:(int)c;
- setTab:(float)tabSize count:(int)c;
//  Set default tabs stops.  'setTabStops:count:' set the default tabs to those
//  specified in the array 'tabArray'. 'setTab:count:' sets the default tabs to 
//  multiples of 'tabSize'.  Both return self.
//
// --------------------------------------------------------------------------------
- clearScrollText;
//  This clears the contents of the Text ScrollView.  Returns self.
//
// --------------------------------------------------------------------------------
- deleteLinesFrom:(int)fLine to:(int)tLine;
//  This deletes the specified lines from the Text ScrollView. 
//
// --------------------------------------------------------------------------------
- (int)textLines;
//  Returns the current number of lines present in the Text object.
//
// --------------------------------------------------------------------------------
- print:sender;
//  Prints the contents of the ScrollView to the printer.
//
// --------------------------------------------------------------------------------
- enscriptPrint:(char*)title option:(char*)option printPanel:(BOOL)prtPnl;
//  Prints the contents of the ScrollView to the printer using unix command enscript.
//
// --------------------------------------------------------------------------------
- (int)textPrint:(const char*)buffer;
- (int)textPrintf:(const char*)fmt args:(va_list)args;
- (int)textPrintf:(const char*)fmt, ...;
int textPrintf(id textView, const char *fmt, ...);
//  Appends the specified formated string to the contents of the ScrollView.
//
// --------------------------------------------------------------------------------
- runCommand:(const char*)command withPath:(const char*)cmdPath;
- runCommand:(const char*)command;
- terminateCommand;
- killCommand;
//  Allows running a command shell and using the scrollable text view to place the
//  output.  The delegate is sent the message commandDidComplete:withError: when
//  the command has completed execution.
//
// --------------------------------------------------------------------------------
- (void)commandOutput:(const char*)buffer len:(int)len;
- (void)commandDidCompleteWithError:(int)errorCode;
//  Provides support for RunServer.
//
// --------------------------------------------------------------------------------

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.