ftp.nice.ch/Attic/openStep/developer/resources/MiscTableScroll.129.1.mw.s.gnutar.gz#/MiscKit2/Palettes/MiscTableScroll/Framework/MiscTableScroll.h

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

#ifndef __MiscTableScroll_h
#define __MiscTableScroll_h
//=============================================================================
//
//	Copyright (C) 1995-1997 by Paul S. McCarthy and Eric Sunshine.
//		Written by Paul S. McCarthy and Eric Sunshine.
//			    All Rights Reserved.
//
//	This notice may not be removed from this source code.
//
//	This object is included in the MiscKit by permission from the authors
//	and its use is governed by the MiscKit license, found in the file
//	"License.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.
//	
//=============================================================================
//-----------------------------------------------------------------------------
// <MiscTableScroll.h>
//
//	ScrollView class that displays a 2-D table of cells.
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: MiscTableScroll.h,v 1.27 97/06/18 10:13:41 sunshine Exp $
// $Log:	MiscTableScroll.h,v $
// Revision 1.27  97/06/18  10:13:41  sunshine
// v125.9: Worked around Objective-C++ compiler crash in OPENSTEP 4.2 for NT
// when sending message to 'super' from within a category.
// Cleaned up more method names:
// numSelected... --> numberOfSelected...
// numVisible... --> numberOfVisible...
// cellIsSelected:: --> cellIsSelectedAtRow:column:
// borderClickedSlot: --> clickedSlot:
// borderTitlesSize: --> slotTitlesSize:
// scrollSelToVisible --> scrollSelectionToVisible
// buffCount --> bufferCount (and related delegate method)
// Color-related methods: "highlight" --> "selected" (and delegate methods)
// Removed duplicate pasteboard related declaration.
// 
// Revision 1.26  97/04/15  09:07:19  sunshine
// v0.125.8: Added "MiscTableScroll/" prefix to #import to facilitate new
// framework organization.
// 
// Revision 1.25  97/03/20  19:17:43  sunshine
// v123.1: Added new ...:byExtension: variations to all selection methods.
// Added deselection methods.  Published -selectedCell.
//-----------------------------------------------------------------------------
#import <MiscTableScroll/MiscTableTypes.h>

MISC_TS_EXTERN_BEGIN( "Objective-C" )
#import <AppKit/NSScrollView.h>
MISC_TS_EXTERN_END

MISC_TS_CLASS_DEF( MiscTableBorder );
MISC_TS_CLASS_DEF( MiscDelegateFlags );
@class MiscTableScroll, MiscTableView, MiscBorderView, MiscNullView;
@class NSCell, NSClipView, NSFont, NSText;

#define MISC_TS_VERSION_0	0	// Initial version
#define MISC_TS_VERSION_1	1	// MiscSortType was 0..8, now 0..12
#define MISC_TS_VERSION_1000	1000	// First OpenStep version (4.0 PR2)
#define MISC_TS_VERSION_1001	1001	// Sort vector: (int*) ->> (NSArray)
#define MISC_TS_VERSION		MISC_TS_VERSION_1001


typedef struct MiscCellEditInfo
	{
	BOOL			editing;	// Is editing in progress?
	MiscCoord_P		row;		// Coords of edited cell.
	MiscCoord_P		col;
	NSText*			editor;		// Field editor.
	id			cell;		// Temporary editing cell.
	} MiscCellEditInfo;


typedef struct MiscBorderInfo
	{
	MiscTableBorder*	border;
	MiscBorderView*		view;
	NSClipView*		clip;
	NSArray*		sort_vector;
	BOOL			isOn;
	BOOL			autoSort;
	BOOL			constrain_min;
	BOOL			constrain_max;
	} MiscBorderInfo;


@interface MiscTableScroll : NSScrollView <NSCoding>
    {
@private
    MiscTableView*	tableView;
    MiscBorderInfo*	info[2];	// { &colInfo, &rowInfo }
    MiscBorderInfo	colInfo;
    MiscBorderInfo	rowInfo;
    MiscNullView*	nullView;
    NSFont*		font;
    NSColor*		textColor;
    NSColor*		backgroundColor;
    NSColor*		selectedTextColor;
    NSColor*		selectedBackgroundColor;
    id			delegate;
    id			dataDelegate;
    MiscDelegateFlags*	delegateFlags;
    MiscDelegateFlags*	dataDelegateFlags;
    id			target;
    id			doubleTarget;
    SEL			action;
    SEL			doubleAction;
    int			tag;
    MiscCompareEntryFunc sort_entry_func;
    MiscCompareSlotFunc	sort_slot_func;
    BOOL		enabled;
    BOOL		lazy;
    MiscSelectionMode	mode;
    int			num_cols;	// Currently active number of
    int			num_rows;	// columns and rows.
    int			max_rows;	// Highwater mark for Cell allocations.
    int			max_cells;
    id*			cells;
    id			pageHeader;
    id			pageFooter;
    MiscCellEditInfo	editInfo;
    BOOL		tracking;
    }

- (id)initWithFrame:(NSRect)frameRect;
- (void)dealloc;

- (id)initWithCoder:(NSCoder*)decoder;
- (void)encodeWithCoder:(NSCoder*)encoder;


// DELEGATE -------------------------------------------------------------------
- (id)delegate;
- (void)setDelegate:(id)obj;
- (id)dataDelegate;
- (void)setDataDelegate:(id)obj;


// TARGET / ACTION ------------------------------------------------------------
- (id)target;
- (void)setTarget:(id)obj;
- (id)doubleTarget;
- (void)setDoubleTarget:(id)obj;
- (SEL)action;
- (void)setAction:(SEL)new_sel;
- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)new_sel;

- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;

- (BOOL)sendAction:(SEL)theAction to:(id)theTarget;
- (BOOL)sendAction;
- (BOOL)sendActionIfEnabled;
- (BOOL)sendDoubleAction;
- (BOOL)sendDoubleActionIfEnabled;

- (int)tag;
- (void)setTag:(int)x;

- (BOOL)tracking;
- (MiscCoord_P)clickedSlot:(MiscBorderType)b;
- (MiscCoord_P)clickedRow;
- (MiscCoord_P)clickedColumn;
- (id)clickedCell;


// FONT -----------------------------------------------------------------------
- (NSFont*)font;
- (void)setFont:(NSFont*)newFont;
- (void)changeFont:(id)sender;
+ (NSFont*)defaultFont;


// COLOR ----------------------------------------------------------------------
- (NSColor*)backgroundColor;
- (void)setBackgroundColor:(NSColor*)value;		// Sent to all cells.
- (NSColor*)textColor;
- (void)setTextColor:(NSColor*)value;			// Sent to all cells.
- (NSColor*)selectedBackgroundColor;
- (void)setSelectedBackgroundColor:(NSColor*)value;	// Sent to all cells.
- (NSColor*)selectedTextColor;
- (void)setSelectedTextColor:(NSColor*)value;		// Sent to all cells.

- (void)setColor:(NSColor*)value;	// Alias for -setBackgroundColor:
- (NSColor*)color;			// Alias for -backgroundColor

+ (NSColor*)defaultBackgroundColor;
+ (NSColor*)defaultTextColor;
+ (NSColor*)defaultSelectedBackgroundColor;
+ (NSColor*)defaultSelectedTextColor;


// SLOT ORDER -----------------------------------------------------------------
- (NSArray*)slotOrder:(MiscBorderType)b;
- (NSArray*)columnOrder;
- (NSArray*)rowOrder;

- (BOOL)border:(MiscBorderType)b setSlotOrder:(NSArray*)list;
- (BOOL)setColumnOrder:(NSArray*)list;
- (BOOL)setRowOrder:(NSArray*)list;

- (NSString*)slotOrderAsString:(MiscBorderType)b;
- (NSString*)columnOrderAsString;
- (NSString*)rowOrderAsString;

- (BOOL)border:(MiscBorderType)b setSlotOrderFromString:(NSString*)s;
- (BOOL)setColumnOrderFromString:(NSString*)s;
- (BOOL)setRowOrderFromString:(NSString*)s;


// SLOT SIZES -----------------------------------------------------------------
- (NSArray*)slotSizes:(MiscBorderType)b;
- (NSArray*)columnSizes;
- (NSArray*)rowSizes;

- (BOOL)border:(MiscBorderType)b setSlotSizes:(NSArray*)list;
- (BOOL)setColumnSizes:(NSArray*)list;
- (BOOL)setRowSizes:(NSArray*)list;

- (NSString*)slotSizesAsString:(MiscBorderType)b;
- (NSString*)columnSizesAsString;
- (NSString*)rowSizesAsString;

- (BOOL)border:(MiscBorderType)b setSlotSizesFromString:(NSString*)s;
- (BOOL)setColumnSizesFromString:(NSString*)s;
- (BOOL)setRowSizesFromString:(NSString*)s;


// MULTICAST MESSAGES ---------------------------------------------------------
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;

- (int)makeCellsPerform:(SEL)aSel selectedOnly:(BOOL)flag;
- (int)makeCellsPerform:(SEL)aSel with:(id)arg1 selectedOnly:(BOOL)flag;
- (int)makeCellsPerform:(SEL)aSel with:(id)arg1 with:(id)arg2
		selectedOnly:(BOOL)flag;

- (int)makeCellsPerform:(SEL)aSel;
- (int)makeCellsPerform:(SEL)aSel with:(id)arg1;
- (int)makeCellsPerform:(SEL)aSel with:(id)arg1 with:(id)arg2;


// FINDING CELLS --------------------------------------------------------------
- (int)border:(MiscBorderType)b slotWithTag:(int)x;
- (int)columnWithTag:(int)x;
- (int)rowWithTag:(int)x;
- (id)cellWithTag:(int)x;
- (BOOL)getRow:(int*)row column:(int*)col ofCellWithTag:(int)x;
- (BOOL)getRow:(int*)row column:(int*)col ofCell:(NSCell*)cell;


// SELECTION ------------------------------------------------------------------
- (MiscSelectionMode)selectionMode;
- (void)setSelectionMode:(MiscSelectionMode)x;

- (BOOL)hasSlotSelection:(MiscBorderType)b;
- (BOOL)hasRowSelection;
- (BOOL)hasColumnSelection;
- (BOOL)hasMultipleSlotSelection:(MiscBorderType)b;
- (BOOL)hasMultipleRowSelection;
- (BOOL)hasMultipleColumnSelection;
- (unsigned int)numberOfSelectedSlots:(MiscBorderType)b;
- (unsigned int)numberOfSelectedRows;
- (unsigned int)numberOfSelectedColumns;
- (BOOL)border:(MiscBorderType)b slotIsSelected:(MiscCoord_P)slot;
- (BOOL)rowIsSelected:(MiscCoord_P)row;
- (BOOL)columnIsSelected:(MiscCoord_P)col;
- (BOOL)cellIsSelectedAtRow:(MiscCoord_P)row column:(MiscCoord_P)col;

- (MiscCoord_P)selectedSlot:(MiscBorderType)b;
- (MiscCoord_P)selectedRow;
- (MiscCoord_P)selectedColumn;
- (id)selectedCell;
- (NSArray*)selectedSlotTags:(MiscBorderType)b;
- (NSArray*)selectedRowTags;
- (NSArray*)selectedColumnTags;
- (NSArray*)selectedSlots:(MiscBorderType)b;
- (NSArray*)selectedRows;
- (NSArray*)selectedColumns;

- (void)border:(MiscBorderType)b selectSlot:(MiscCoord_P)slot
	byExtension:(BOOL)flag;
- (void)border:(MiscBorderType)b selectSlot:(MiscCoord_P)slot;
- (void)selectRow:(MiscCoord_P)row byExtension:(BOOL)flag;
- (void)selectRow:(MiscCoord_P)row;
- (void)selectColumn:(MiscCoord_P)col byExtension:(BOOL)flag;
- (void)selectColumn:(MiscCoord_P)col;
- (void)border:(MiscBorderType)b selectSlotTags:(NSArray*)tags
	 byExtension:(BOOL)flag;
- (void)border:(MiscBorderType)b selectSlotTags:(NSArray*)tags;
- (void)selectRowTags:(NSArray*)tags byExtension:(BOOL)flag;
- (void)selectRowTags:(NSArray*)tags;
- (void)selectColumnTags:(NSArray*)tags byExtension:(BOOL)flag;
- (void)selectColumnTags:(NSArray*)tags;
- (void)border:(MiscBorderType)b selectSlots:(NSArray*)slots
	 byExtension:(BOOL)flag;
- (void)border:(MiscBorderType)b selectSlots:(NSArray*)slots;
- (void)selectRows:(NSArray*)rows byExtension:(BOOL)flag;
- (void)selectRows:(NSArray*)rows;
- (void)selectColumns:(NSArray*)cols byExtension:(BOOL)flag;
- (void)selectColumns:(NSArray*)cols;
- (void)selectAllSlots:(MiscBorderType)b;
- (void)selectAllRows;
- (void)selectAllColumns;
- (void)selectAll:(id)sender;	// -selectAllRows and sends action to target.

- (void)border:(MiscBorderType)b deselectSlot:(MiscCoord_P)slot;
- (void)deselectRow:(MiscCoord_P)row;
- (void)deselectColumn:(MiscCoord_P)col;
- (void)border:(MiscBorderType)b deselectSlotTags:(NSArray*)tags;
- (void)deselectRowTags:(NSArray*)tags;
- (void)deselectColumnTags:(NSArray*)tags;
- (void)border:(MiscBorderType)b deselectSlots:(NSArray*)slots;
- (void)deselectRows:(NSArray*)rows;
- (void)deselectColumns:(NSArray*)cols;
- (void)clearSlotSelection:(MiscBorderType)b;
- (void)clearRowSelection;
- (void)clearColumnSelection;
- (void)clearSelection;
- (void)deselectAll:(id)sender;	// -clearSelection and sends action to target.


// MOUSE & KEYBOARD TRACKING (SELECTION ORIENTATION) --------------------------
- (void)trackBy:(MiscBorderType)b;
- (MiscBorderType)trackingBy;


// KEYBOARD CURSOR ------------------------------------------------------------
- (MiscCoord_P)cursorSlot:(MiscBorderType)b;
- (MiscCoord_P)cursorRow;
- (MiscCoord_P)cursorColumn;
- (void)border:(MiscBorderType)b setCursorSlot:(MiscCoord_P)slot;
- (void)setCursorRow:(MiscCoord_P)row;
- (void)setCursorColumn:(MiscCoord_P)col;
- (void)clearCursorSlot:(MiscBorderType)b;
- (void)clearCursorRow;
- (void)clearCursorColumn;
- (void)clearCursor;
- (BOOL)hasValidCursorSlot:(MiscBorderType)b;
- (BOOL)hasValidCursorRow;
- (BOOL)hasValidCursorColumn;
- (void)disableCursor;		// Can nest.
- (void)enableCursor;
- (BOOL)isCursorEnabled;


// GLOBAL SIZE LIMITS ---------------------------------------------------------
- (float)totalSize:(MiscBorderType)b;
- (float)totalWidth;
- (float)totalHeight;

- (float)minTotalSize:(MiscBorderType)b;
- (float)maxTotalSize:(MiscBorderType)b;
- (float)minTotalWidth;
- (float)maxTotalWidth;
- (float)minTotalHeight;
- (float)maxTotalHeight;

- (void)border:(MiscBorderType)b setMinTotalSize:(float)size;
- (void)border:(MiscBorderType)b setMaxTotalSize:(float)size;
- (void)setMinTotalWidth:(float)size;
- (void)setMaxTotalWidth:(float)size;
- (void)setMinTotalHeight:(float)size;
- (void)setMaxTotalHeight:(float)size;

- (void)constrainSize;		// Applies constraints, updates views.

- (BOOL)minTotalSizeIsConstrained:(MiscBorderType)b;
- (BOOL)maxTotalSizeIsConstrained:(MiscBorderType)b;
- (BOOL)minTotalWidthIsConstrained;
- (BOOL)maxTotalWidthIsConstrained;
- (BOOL)minTotalHeightIsConstrained;
- (BOOL)maxTotalHeightIsConstrained;

- (void)border:(MiscBorderType)b constrainMinTotalSize:(BOOL)flag;
- (void)border:(MiscBorderType)b constrainMaxTotalSize:(BOOL)flag;
- (void)constrainMinTotalWidth:(BOOL)flag;
- (void)constrainMaxTotalWidth:(BOOL)flag;
- (void)constrainMinTotalHeight:(BOOL)flag;
- (void)constrainMaxTotalHeight:(BOOL)flag;


// SLOTS ----------------------------------------------------------------------
- (MiscTableBorder*)border:(MiscBorderType)b;
- (BOOL)slotTitlesOn:(MiscBorderType)b;
- (BOOL)border:(MiscBorderType)b setSlotTitlesOn:(BOOL)on_off;
	// -border:setTitlesOn: Returns YES if changed.
- (MiscTableTitleMode)slotTitleMode:(MiscBorderType)b;
- (void)border:(MiscBorderType)b setSlotTitleMode:(MiscTableTitleMode)x;
- (float)slotTitlesSize:(MiscBorderType)b;
- (void)border:(MiscBorderType)b setSlotTitlesSize:(float)x;

- (void)border:(MiscBorderType)b moveSlotFrom:(int)pos to:(int)pos;
- (int)border:(MiscBorderType)b slotPosition:(int)slot;
- (int)border:(MiscBorderType)b slotAtPosition:(int)pos;
- (NSArray*)border:(MiscBorderType)b physicalToVisual:(NSArray*)list;
- (NSArray*)border:(MiscBorderType)b visualToPhysical:(NSArray*)list;

- (BOOL)sizeableSlots:(MiscBorderType)b;
- (BOOL)draggableSlots:(MiscBorderType)b;
- (BOOL)modifierDragSlots:(MiscBorderType)b;
- (float)uniformSizeSlots:(MiscBorderType)b;

- (float)border:(MiscBorderType)b slotAdjustedSize:(int)slot;
- (float)border:(MiscBorderType)b slotSize:(int)slot;
- (float)border:(MiscBorderType)b slotMinSize:(int)slot;
- (float)border:(MiscBorderType)b slotMaxSize:(int)slot;
- (float)border:(MiscBorderType)b slotDataSize:(int)slot;
- (BOOL)border:(MiscBorderType)b slotIsSizeable:(int)slot;
- (BOOL)border:(MiscBorderType)b slotExpandsToData:(int)slot;
- (BOOL)border:(MiscBorderType)b slotIsAutosize:(int)slot;
- (NSString*)border:(MiscBorderType)b slotTitle:(int)slot;
- (int)border:(MiscBorderType)b slotTag:(int)slot;
- (MiscTableCellStyle)border:(MiscBorderType)b slotCellType:(int)slot;
- (id)border:(MiscBorderType)b slotCellPrototype:(int)slot;

- (void)border:(MiscBorderType)b setSizeableSlots:(BOOL)flag;
- (void)border:(MiscBorderType)b setDraggableSlots:(BOOL)flag;
- (void)border:(MiscBorderType)b setModifierDragSlots:(BOOL)flag;
- (void)border:(MiscBorderType)b setUniformSizeSlots:(float)uniform_size;

- (void)border:(MiscBorderType)b setSlot:(int)n size:(float)size;
- (void)border:(MiscBorderType)b setSlot:(int)n minSize:(float)size;
- (void)border:(MiscBorderType)b setSlot:(int)n maxSize:(float)size;
- (void)border:(MiscBorderType)b setSlot:(int)n dataSize:(float)size;
- (void)border:(MiscBorderType)b setSlot:(int)n sizeable:(BOOL)flag;
- (void)border:(MiscBorderType)b setSlot:(int)n expandsToData:(BOOL)flag;
- (void)border:(MiscBorderType)b setSlot:(int)n autosize:(BOOL)flag;
- (void)border:(MiscBorderType)b setSlot:(int)n title:(NSString*)title;
- (void)border:(MiscBorderType)b setSlot:(int)n tag:(int)tag;
- (void)border:(MiscBorderType)b setSlot:(int)n
		cellType:(MiscTableCellStyle)t;
- (void)border:(MiscBorderType)b setSlot:(int)n cellPrototype:(id)cell;


// COLS -----------------------------------------------------------------------
- (MiscTableBorder*)columnBorder;
- (BOOL)columnTitlesOn;
- (BOOL)setColumnTitlesOn:(BOOL)on_off;	// Returns YES if changed.
- (MiscTableTitleMode)columnTitleMode;
- (void)setColumnTitleMode:(MiscTableTitleMode)x;
- (float)columnTitlesHeight;
- (void)setColumnTitlesHeight:(float)x;

- (void)moveColumnFrom:(int)pos to:(int)pos;
- (int)columnPosition:(int)col;
- (int)columnAtPosition:(int)pos;

- (float)uniformSizeColumns;
- (BOOL)sizeableColumns;
- (BOOL)draggableColumns;
- (BOOL)modifierDragColumns;
- (float)columnAdjustedSize:(int)col;
- (float)columnSize:(int)col;
- (float)columnMinSize:(int)col;
- (float)columnMaxSize:(int)col;
- (float)columnDataSize:(int)col;
- (BOOL)columnIsSizeable:(int)col;
- (BOOL)columnExpandsToData:(int)col;
- (BOOL)columnIsAutosize:(int)col;
- (NSString*)columnTitle:(int)col;
- (int)columnTag:(int)col;
- (MiscTableCellStyle)columnCellType:(int)col;
- (id)columnCellPrototype:(int)col;

- (void)setSizeableColumns:(BOOL)flag;
- (void)setDraggableColumns:(BOOL)flag;
- (void)setModifierDragColumns:(BOOL)flag;
- (void)setUniformSizeColumns:(float)uniform_size;

- (void)setColumn:(int)col size:(float)size;
- (void)setColumn:(int)col minSize:(float)size;
- (void)setColumn:(int)col maxSize:(float)size;
- (void)setColumn:(int)col dataSize:(float)size;
- (void)setColumn:(int)col sizeable:(BOOL)flag;
- (void)setColumn:(int)col expandsToData:(BOOL)flag;
- (void)setColumn:(int)col autosize:(BOOL)flag;
- (void)setColumn:(int)col title:(NSString*)title;
- (void)setColumn:(int)col tag:(int)tag;
- (void)setColumn:(int)col cellType:(MiscTableCellStyle)type;
- (void)setColumn:(int)col cellPrototype:(id)cell;

- (int)numberOfVisibleColumns;
- (int)firstVisibleColumn;
- (int)lastVisibleColumn;
- (BOOL)columnIsVisible:(int)n;
- (void)setFirstVisibleColumn:(int)n;
- (void)setLastVisibleColumn:(int)n;


// ROWS -----------------------------------------------------------------------
- (MiscTableBorder*)rowBorder;
- (BOOL)rowTitlesOn;
- (BOOL)setRowTitlesOn:(BOOL)on_off;
- (MiscTableTitleMode)rowTitleMode;
- (void)setRowTitleMode:(MiscTableTitleMode)x;
- (float)rowTitlesWidth;
- (void)setRowTitlesWidth:(float)x;

- (void)moveRowFrom:(int)fromPos to:(int)toPos;
- (int)rowPosition:(int)row;
- (int)rowAtPosition:(int)pos;

- (BOOL)sizeableRows;
- (BOOL)draggableRows;
- (BOOL)modifierDragRows;
- (float)uniformSizeRows;
- (float)rowAdjustedSize:(int)row;
- (float)rowSize:(int)row;
- (float)rowMinSize:(int)row;
- (float)rowMaxSize:(int)row;
- (float)rowDataSize:(int)row;
- (BOOL)rowIsSizeable:(int)row;
- (BOOL)rowExpandsToData:(int)row;
- (BOOL)rowIsAutosize:(int)row;
- (NSString*)rowTitle:(int)row;
- (int)rowTag:(int)row;
- (MiscTableCellStyle)rowCellType:(int)row;
- (id)rowCellPrototype:(int)row;

- (void)setSizeableRows:(BOOL)flag;
- (void)setDraggableRows:(BOOL)flag;
- (void)setModifierDragRows:(BOOL)flag;
- (void)setUniformSizeRows:(float)uniform_size;

- (void)setRow:(int)row size:(float)size;
- (void)setRow:(int)row minSize:(float)size;
- (void)setRow:(int)row maxSize:(float)size;
- (void)setRow:(int)row dataSize:(float)size;
- (void)setRow:(int)row sizeable:(BOOL)flag;
- (void)setRow:(int)row expandsToData:(BOOL)flag;
- (void)setRow:(int)row autosize:(BOOL)flag;
- (void)setRow:(int)row title:(NSString*)title;
- (void)setRow:(int)row tag:(int)tag;
- (void)setRow:(int)row cellType:(MiscTableCellStyle)type;
- (void)setRow:(int)row cellPrototype:(id)cell;

- (int)numberOfVisibleRows;
- (int)firstVisibleRow;
- (int)lastVisibleRow;
- (BOOL)rowIsVisible:(int)n;
- (void)setFirstVisibleRow:(int)n;
- (void)setLastVisibleRow:(int)n;


// DRAWING --------------------------------------------------------------------
- (NSRect)documentClipRect;

- (void)drawCellAtRow:(int)row column:(int)col;	// Physical coords

- (void)drawRow:(int)row;				// Physical coords
- (void)drawColumn:(int)col;				// Physical coords
- (void)border:(MiscBorderType)b drawSlot:(int)n;

- (int)numberOfVisibleSlots:(MiscBorderType)b;
- (int)firstVisibleSlot:(MiscBorderType)b;
- (int)lastVisibleSlot:(MiscBorderType)b;
- (BOOL)border:(MiscBorderType)b slotIsVisible:(int)n;
- (void)border:(MiscBorderType)b setFirstVisibleSlot:(int)n;
- (void)border:(MiscBorderType)b setLastVisibleSlot:(int)n;

- (void)scrollCellToVisibleAtRow:(int)row column:(int)col; // Physical coords
- (void)scrollRowToVisible:(int)row;			// Physical coord
- (void)scrollColumnToVisible:(int)col;			// Physical coord
- (void)scrollSelectionToVisible;

- (void)border:(MiscBorderType)b drawSlotTitle:(int)n;
- (void)drawRowTitle:(int)n;
- (void)drawColumnTitle:(int)n;

- (void)selectionChanged;

- (void)sizeToCells;

// INTERNAL COMMUNICATIONS ON USER-ACTIONS FOR SUBCLASSES ONLY ----------------
// Private: BorderView -> TableScroll
- (void)border:(MiscBorderType)b slotDraggedFrom:(int)fromPos to:(int)toPos;
- (void)border:(MiscBorderType)b slotSortReversed:(int)n;
- (void)border:(MiscBorderType)b slotResized:(int)n;

// See implementation for explanation of the following methods.
- (void)superKeyDown:(NSEvent*)p;
- (id)superValidRequestorForSendType:(NSString*)s returnType:(NSString*)r;

@end


// SORTING --------------------------------------------------------------------
@interface MiscTableScroll(Sort)

- (MiscCompareSlotFunc)compareSlotFunction;
- (void)setCompareSlotFunction:(MiscCompareSlotFunc)f;

- (void)sortInfoInit:(MiscSlotSortInfo*)ip border:(MiscBorderType)b;
- (void)sortInfoDone:(MiscSlotSortInfo*)ip;

// Slots
- (BOOL)autoSortSlots:(MiscBorderType)b;
- (void)border:(MiscBorderType)b setAutoSortSlots:(BOOL)flag;
- (NSArray*)slotSortVector:(MiscBorderType)b;
- (void)border:(MiscBorderType)b setSlotSortVector:(NSArray*)v;

- (void)sortSlots:(MiscBorderType)b;
- (BOOL)slotsAreSorted:(MiscBorderType)b;
- (BOOL)border:(MiscBorderType)b sortSlot:(int)n;
- (BOOL)border:(MiscBorderType)b slotIsSorted:(int)n;

- (int)border:(MiscBorderType)b compareSlots:(int)slot1 :(int)slot2
	info:(MiscSlotSortInfo*)ip;
- (int)border:(MiscBorderType)b compareSlots:(int)slot1 :(int)slot2;


- (MiscCompareEntryFunc)border:(MiscBorderType)b slotSortFunction:(int)n;
- (MiscSortDirection)border:(MiscBorderType)b slotSortDirection:(int)n;
- (MiscSortType)border:(MiscBorderType)b slotSortType:(int)n;
- (void)border:(MiscBorderType)b setSlot:(int)n
		sortFunction:(MiscCompareEntryFunc)x;
- (void)border:(MiscBorderType)b setSlot:(int)n
		sortDirection:(MiscSortDirection)x;
- (void)border:(MiscBorderType)b setSlot:(int)n
		sortType:(MiscSortType)x;

// Cols
- (BOOL)autoSortColumns;
- (void)setAutoSortColumns:(BOOL)flag;
- (NSArray*)columnSortVector;
- (void)setColumnSortVector:(NSArray*)v;

- (void)sortColumns;
- (BOOL)columnsAreSorted;
- (BOOL)sortColumn:(int)n;
- (BOOL)columnIsSorted:(int)n;
- (int)compareColumns:(int)c1 :(int)c2 info:(MiscSlotSortInfo*)ip;
- (int)compareColumns:(int)c1 :(int)c2;

- (MiscCompareEntryFunc)columnSortFunction:(int)n;
- (MiscSortDirection)columnSortDirection:(int)n;
- (MiscSortType)columnSortType:(int)n;
- (void)setColumn:(int)n sortFunction:(MiscCompareEntryFunc)x;
- (void)setColumn:(int)n sortDirection:(MiscSortDirection)x;
- (void)setColumn:(int)n sortType:(MiscSortType)x;

// Rows
- (BOOL)autoSortRows;
- (void)setAutoSortRows:(BOOL)flag;
- (NSArray*)rowSortVector;
- (void)setRowSortVector:(NSArray*)v;

- (void)sortRows;
- (BOOL)rowsAreSorted;
- (BOOL)sortRow:(int)n;
- (BOOL)rowIsSorted:(int)n;
- (int)compareRows:(int)r1 :(int)r2 info:(MiscSlotSortInfo*)ip;
- (int)compareRows:(int)r1 :(int)r2;

- (MiscCompareEntryFunc)rowSortFunction:(int)n;
- (MiscSortDirection)rowSortDirection:(int)n;
- (MiscSortType)rowSortType:(int)n;
- (void)setRow:(int)n sortFunction:(MiscCompareEntryFunc)x;
- (void)setRow:(int)n sortDirection:(MiscSortDirection)x;
- (void)setRow:(int)n sortType:(MiscSortType)x;
@end


// DATA MANIPULATION ----------------------------------------------------------
@interface MiscTableScroll(Data)
- (BOOL)isLazy;
- (void)setLazy:(BOOL)flag;

- (id)cellAtRow:(int)row column:(int)col;

// Lazy mode tables that perform multiple-buffering:
- (int)bufferCount;

// Lazy mode asks delegate/dataDelegate first then uses cellAtRow:column:
// Eager mode goes straight to cellAtRow:column:
- (int)tagAtRow:(int)row column:(int)col;
- (int)intValueAtRow:(int)row column:(int)col;
- (float)floatValueAtRow:(int)row column:(int)col;
- (double)doubleValueAtRow:(int)row column:(int)col;
- (NSString*)stringValueAtRow:(int)row column:(int)col;
// For ButtonCells.
- (NSString*)titleAtRow:(int)row column:(int)col;
- (int)stateAtRow:(int)row column:(int)col;

// Invoke delegate methods if possible.
- (id)reviveCell:(id)cell atRow:(int)row column:(int)col;
- (id)retireCell:(id)cell atRow:(int)row column:(int)col;

// Builtin default implementation.
- (id)doReviveCell:(id)cell atRow:(int)row column:(int)col;
- (id)doRetireCell:(id)cell atRow:(int)row column:(int)col;

- (void)addSlot:(MiscBorderType)b;
- (void)border:(MiscBorderType)b insertSlot:(int)pos;
- (void)border:(MiscBorderType)b removeSlot:(int)pos;
- (int)numberOfSlots:(MiscBorderType)b;

- (void)addColumn;
- (void)insertColumn:(int)pos;
- (void)removeColumn:(int)pos;
- (int)numberOfColumns;

- (void)addRow;
- (void)insertRow:(int)pos;
- (void)removeRow:(int)pos;
- (int)numberOfRows;

- (void)renewRows:(int)count;
- (void)empty;					// [self renewRows:0];
- (void)emptyAndReleaseCells;
@end


// PASTEBOARD SUPPORT ---------------------------------------------------------
@interface MiscTableScroll(Pasteboard)
- (void)copy:(id)sender;
- (void)cut:(id)sender;
- (id)validRequestorForSendType:(NSString*)t_send
	returnType:(NSString*)t_return;
- (id)builtinValidRequestorForSendType:(NSString*)t_send
	returnType:(NSString*)t_return;
- (BOOL)canWritePboardType:(NSString*)type;
- (BOOL)builtinCanWritePboardType:(NSString*)type;
- (BOOL)writeSelectionToPasteboard:(NSPasteboard*)pboard types:(NSArray*)types;
- (BOOL)builtinWriteSelectionToPasteboard:(NSPasteboard*)pboard
	types:(NSArray*)types;
- (NSString*)stringForPboardType:(NSString*)type;
- (NSString*)builtinStringForPboardType:(NSString*)type;
- (NSString*)stringForNSStringPboardType;
- (NSString*)stringForNSTabularTextPBoardType;
- (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard;
- (BOOL)builtinReadSelectionFromPasteboard:(NSPasteboard*)pboard;
- (void)builtinRegisterServicesTypes;
- (void)registerServicesTypes;
@end


// INCREMENTAL SEARCH ---------------------------------------------------------
@interface MiscTableScroll(IncrementalSearch)
- (BOOL)incrementalSearch:(NSEvent*)p;
- (BOOL)doIncrementalSearch:(NSEvent*)p column:(int)col;
- (BOOL)getISearchColumn:(int*)col;
- (BOOL)doGetISearchColumn:(int*)col;
@end


// KEYBOARD EVENTS ------------------------------------------------------------
@interface MiscTableScroll(Keyboard)
- (void)keyDown:(NSEvent*)event;
@end


// EDITING --------------------------------------------------------------------
@interface MiscTableScroll(Edit)
- (NSRect)cellFrameAtRow:(int)row column:(int)col;	// Physical coords
- (BOOL)getRow:(int*)row column:(int*)col forPoint:(NSPoint)point; // Physical.
- (BOOL)getPreviousEditRow:(MiscCoord_P*)p_row column:(MiscCoord_P*)p_col;
- (BOOL)getNextEditRow:(MiscCoord_P*)p_row column:(MiscCoord_P*)p_col;
- (BOOL)getNext:(BOOL)foreward
	editRow:(MiscCoord_P*)p_row column:(MiscCoord_P*)p_col;
- (BOOL)isEditing;
- (BOOL)finishEditing;		// Normal, conditional termination.
- (BOOL)abortEditing;		// Forcibly abort the editing session.
- (void)textDidEndEditing:(NSNotification*)notification;
- (void)textDidBeginEditing:(NSNotification*)notification;
- (void)textDidChange:(NSNotification*)notification;
- (BOOL)textShouldBeginEditing:(NSText*)sender;
- (BOOL)textShouldEndEditing:(NSText*)sender;
- (void)edit:(NSEvent*)ev atRow:(MiscCoord_P)row column:(MiscCoord_P)col;
- (BOOL)canEdit:(NSEvent*)ev atRow:(MiscCoord_P)row column:(MiscCoord_P)col;
- (BOOL)editIfAble:(NSEvent*)ev atRow:(MiscCoord_P)row column:(MiscCoord_P)col;
- (void)editCellAtRow:(MiscCoord_P)row column:(MiscCoord_P)col;
@end


// PRINTING -------------------------------------------------------------------
@interface MiscTableScroll(Print)
- (void)print:(id)sender;
- (MiscTablePrintInfo const*)getPrintInfo;
- (id)getPageHeader;
- (id)getPageFooter;
- (void)setPageHeader:(id)obj;
- (void)setPageFooter:(id)obj;
@end


// DELEGATE PROTOCOL ----------------------------------------------------------
@interface MiscTableScroll(Delegate)
- (void)tableScroll:(MiscTableScroll*)scroll border:(MiscBorderType)b
	slotDraggedFrom:(int)fromPos to:(int)toPos;
- (void)tableScroll:(MiscTableScroll*)scroll border:(MiscBorderType)b
	slotSortReversed:(int)n;
- (void)tableScroll:(MiscTableScroll*)scroll border:(MiscBorderType)b
	slotResized:(int)n;

- (void)tableScroll:(MiscTableScroll*)scroll
	changeFont:(NSFont*)oldFont to:(NSFont*)newFont;
- (void)tableScroll:(MiscTableScroll*)scroll
	fontChangedFrom:(NSFont*)oldFont to:(NSFont*)newFont;

- (void)tableScroll:(MiscTableScroll*)scroll
	backgroundColorChangedTo:(NSColor*)x;
- (void)tableScroll:(MiscTableScroll*)scroll
	selectedBackgroundColorChangedTo:(NSColor*)x;
- (void)tableScroll:(MiscTableScroll*)scroll
	selectedTextColorChangedTo:(NSColor*)x;
- (void)tableScroll:(MiscTableScroll*)scroll
	textColorChangedTo:(NSColor*)x;

- (BOOL)tableScroll:(MiscTableScroll*)scroll getISearchColumn:(int*)col;
- (int)tableScrollBufferCount:(MiscTableScroll*)scroll;

- (id)tableScroll:(MiscTableScroll*)scroll
	border:(MiscBorderType)b slotPrototype:(int)slot;
- (NSString*)tableScroll:(MiscTableScroll*)scroll
	border:(MiscBorderType)b slotTitle:(int)slot;

- (id)tableScroll:(MiscTableScroll*)scroll cellAtRow:(int)row column:(int)col;
- (id)tableScroll:(MiscTableScroll*)scroll reviveCell:(id)cell
	atRow:(int)row column:(int)col;
- (id)tableScroll:(MiscTableScroll*)scroll retireCell:(id)cell
	atRow:(int)row column:(int)col;

- (int)tableScroll:(MiscTableScroll*)scroll
	tagAtRow:(int)row column:(int)col;
- (int)tableScroll:(MiscTableScroll*)scroll
	intValueAtRow:(int)row column:(int)col;
- (float)tableScroll:(MiscTableScroll*)scroll
	floatValueAtRow:(int)row column:(int)col;
- (double)tableScroll:(MiscTableScroll*)scroll
	doubleValueAtRow:(int)row column:(int)col;
- (NSString*)tableScroll:(MiscTableScroll*)scroll
	stringValueAtRow:(int)row column:(int)col;
- (NSString*)tableScroll:(MiscTableScroll*)scroll
	titleAtRow:(int)row column:(int)col;
- (int)tableScroll:(MiscTableScroll*)scroll
	stateAtRow:(int)row column:(int)col;

- (BOOL)tableScroll:(MiscTableScroll*)scroll
	allowDragOperationAtRow:(int)row column:(int)col;
- (void)tableScroll:(MiscTableScroll*)scroll
	preparePasteboard:(NSPasteboard*)pb
	forDragOperationAtRow:(int)row column:(int)col;
- (NSImage*)tableScroll:(MiscTableScroll*)scroll
	imageForDragOperationAtRow:(int)row column:(int)col;
- (unsigned int)tableScroll:(MiscTableScroll*)scroll
	draggingSourceOperationMaskForLocal:(BOOL)isLocal;
- (BOOL)tableScrollIgnoreModifierKeysWhileDragging:(MiscTableScroll*)scroll;

- (void)tableScrollRegisterServicesTypes:(MiscTableScroll*)scroll;
- (id)tableScroll:(MiscTableScroll*)scroll
	validRequestorForSendType:(NSString*)t_write
	returnType:(NSString*)t_read;
- (BOOL)tableScroll:(MiscTableScroll*)scroll 
	canWritePboardType:(NSString*)type;
- (NSString*)tableScroll:(MiscTableScroll*)scroll
	stringForPboardType:(NSString*)type;
- (BOOL)tableScroll:(MiscTableScroll*)scroll
	writeSelectionToPasteboard:(NSPasteboard*)pboard types:(NSArray*)types;
- (BOOL)tableScroll:(MiscTableScroll*)scroll
	readSelectionFromPasteboard:(NSPasteboard*)pboard;

- (void)tableScrollWillPrint:(MiscTableScroll*)scroll;
- (void)tableScrollDidPrint:(MiscTableScroll*)scroll;
- (void)tableScroll:(MiscTableScroll*)scroll
	willPrintPageHeader:(id)pageHeader
	info:(MiscTablePrintInfo const*)info;
- (void)tableScroll:(MiscTableScroll*)scroll
	willPrintPageFooter:(id)pageFooter
	info:(MiscTablePrintInfo const*)info;

- (BOOL)tableScroll:(MiscTableScroll*)scroll
	canEdit:(NSEvent*)ev atRow:(int)row column:(int)col;
- (void)tableScroll:(MiscTableScroll*)scroll
	edit:(NSEvent*)ev atRow:(int)row column:(int)col;
- (BOOL)tableScroll:(MiscTableScroll*)scroll
	setStringValue:(NSString*)s atRow:(int)row column:(int)col;
- (void)tableScroll:(MiscTableScroll*)scroll
	abortEditAtRow:(int)row column:(int)col;
- (void)tableScroll:(MiscTableScroll*)scroll
	willEditAtRow:(int)row column:(int)col;
- (void)tableScroll:(MiscTableScroll*)scroll
	didEdit:(BOOL)changed atRow:(int)row column:(int)col;
@end


// DATA CELL PROTOCOL ---------------------------------------------------------
@interface MiscTableScroll(DataCell)
- (id)tableScroll:(MiscTableScroll*)scroll
	reviveAtRow:(int)row column:(int)col;
- (id)tableScroll:(MiscTableScroll*)scroll
	retireAtRow:(int)row column:(int)col;
@end

#endif // __MiscTableScroll_h

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